Merged upstream PRs
1,575+
Merged between 2023 and 2025
Advancing the science of security means sharing the work. We release our tools as open source, contribute fixes to the projects the industry depends on, build signing and provenance infrastructure for package registries, and publish the reports from our public security reviews.
1,575+
Merged between 2023 and 2025
90+
Contributed to in 2025
102k
Across trailofbits and crytic
660
Published in our library
466
Merged as of Oct 16, 2026
95
Published in trailofbits/skills
These charts break down our merged pull requests by year and by project, show how our work is split across domains, and list recently merged fixes.
Counts are PRs merged into repositories outside Trail of Bits, covering 80+ projects in 2024 and 90+ in 2025.
Counts come from the 2024 and 2025 recap posts and are minimum figures
| Project | Domain | Type | Change | Link |
|---|---|---|---|---|
| RustCrypto | Cryptography | Upstream PR | Fixed a timing side channel in ML-DSA signing | PR |
| go-jose | Cryptography | Upstream PR | go-jose accepts ES384/ES512 JWS signatures from weaker ECDSA curves | PtP |
| boulder | AppSec | Upstream PR | WFE2 account cache lets a deactivated account create new orders | PtP |
| vllm | AI/ML | Upstream PR | SHM capability forgery reaches worker pickle | PtP |
| gpac | Systems | Upstream PR | DASH memory-cache heap overflow from oversized Content-Length | PtP |
| scapy | Systems | Upstream PR | TLS client sends application data without authenticating the server certificate | PtP |
| pyca/cryptography | Cryptography | Upstream PR | Added ML-KEM and ML-DSA support | Post |
| zizmor | Supply chain | Upstream PR | Added full YAML anchor support to GitHub Actions analysis | Post |
| rekor-monitor | Supply chain | Upstream PR | Added Rekor v2 support, CA filtering and a reusable GitHub workflow | Post |
| hevm | Blockchain | Upstream PR | Added per-opcode cost centers and a toString cheatcode | Recap |
Trail of Bits has worked with the open-source community since 2012. We publish almost everything we build, from smart-contract fuzzers to AI-driven bug finders, and our engineers contribute directly to the open-source projects that our clients and the wider industry depend on.
For a maintainer, a bug report is only the first step. Triaging the report, writing a patch and getting it merged takes expertise and time, and our engineers do that work alongside the maintainers.
Securing the world's software starts with helping the people who maintain it.
Public release by default
We publicly release nearly all of our internal and approved client projects, so the tools we use on client engagements are available to everyone.
Upstream fixes
We submit patches along with our bug reports and follow each one through review until it is merged. Between 2023 and 2025 we merged 1,575+ PRs into external projects.
Shared infrastructure
Package registries, signing systems and widely used libraries are dependencies of thousands of other projects, so improving their security also protects those projects.
Published audit reports
When a foundation or sponsor funds a security review of an open-source project, we publish the full report in our library.
Each domain below collects our upstream contributions, public audits, research and released tools for that area of security.
Supply chain
We build publishing, signing and transparency infrastructure for package ecosystems, including Trusted Publishing and attestations on PyPI, build provenance for Homebrew, and monitoring for Sigstore's transparency log. We also publish audits of package registries such as RubyGems.org and PyPI.
Featured story
2023 to 2026 · 7 milestonesSince 2023 we have worked with the Python Packaging Authority, PyPI and Sigstore on publishing security for Python packages. The work replaced long-lived API tokens with short-lived credentials tied to a CI identity, added signed attestations to published files, and we are now proposing a transparency log for PyPI.
OIDC-based publishing for PyPI replaces long-lived API tokens with short-lived tokens scoped to a CI identity. Google's Open Source Security Team funded this work.
We implemented PEP 740 index-hosted attestations using Sigstore, and they are enabled by default in the official PyPI publish action.
Maintainers can now mark a project as archived to show downstream users that it no longer receives updates. Alpha-Omega funded this work.
This post explains the trust assumptions behind package installs and how build provenance and signing address them.
We made rekor-monitor ready for production use, so PyPI and npm maintainers are alerted when their signing identity is misused. OpenSSF funded this work.
We replaced hard-coded algorithms with configurable algorithm suites across Fulcio, Rekor, Cosign and sigstore-go, which prepares Sigstore for post-quantum signing.
We have written a draft PEP and run a test log that records every PyPI artifact and its publishing identity in a tamper-evident log.
pip-audit
Trail of Bits created pip-audit with support from Google, and the Python Packaging Authority now maintains it.
View on GitHubsigstore-rust security review
We reviewed Sigstore's Rust client over 3.5 weeks for The Sigstore Project.
Read reportPackage managers have an integrity problem
We tested 25 popular package managers. Only two verified the integrity of every package they downloaded.
Read moreFull YAML anchor support in zizmor
We improved zizmor's static analysis of GitHub Actions and tested it against 41,253 existing workflows. The Sovereign Tech Agency funded this work.
Read moreAuditing RubyGems.org
We assessed the security of RubyGems.org, the Ruby ecosystem's central package repository, for Ruby Central.
Read moreBuild provenance for Homebrew
Working with Alpha-Omega and OpenSSF, we added build provenance to homebrew-core, so every CI-built bottle has an attestation that users can check with brew verify.
Read moreAI/ML
We have released an AI system that finds and patches bugs, a scanner for malicious model files and a security wrapper for MCP tools. We also review open-source AI frameworks such as PyTorch ExecuTorch and Gradio.

Featured story
2025 to 2026Our cyber reasoning system, Buttercup, took second place in DARPA's AI Cyber Challenge in 2025, and we released it as open source. In 2026 we started Patch the Planet with OpenAI, in which our engineers use frontier models to find bugs in critical open-source projects, then triage them and submit fixes.
Buttercup is our AI cyber reasoning system for finding and patching vulnerabilities in open-source code. It won second place and $3M at DARPA AIxCC.
We published our audit workflows as Claude Code plugins, covering CodeQL, Semgrep, constant-time analysis and other techniques. The repository has 7.8k stars.
We launched Patch the Planet with OpenAI to help maintainers of critical open-source software handle the volume of AI-generated vulnerability reports.
The Patch the Planet dashboard tracks every issue found, patch submitted and fix merged.
PyTorch ExecuTorch security review
We spent nine weeks reviewing PyTorch's on-device inference runtime in an audit funded by OSTIF.
Read reportFickling's new ML pickle file scanner
Fickling now includes an allowlist-based scanner that blocks malicious pickle files before a model is loaded.
Read moreWeaponizing image scaling against AI systems
We showed how image scaling can be used for prompt injection against production AI systems, and released the Anamorpher tool.
Read moremcp-context-protector
mcp-context-protector is a security wrapper that protects MCP apps from line-jumping and ANSI escape-sequence prompt injection.
Read moreAuditing Gradio 5
We reviewed the security of Gradio, Hugging Face's open-source ML interface framework, before its version 5 release.
Read moreCryptography
We add new algorithms to widely used cryptography libraries such as pyca/cryptography, have proposed constant-time support for LLVM, and publish audits of cryptographic code, including Go's standard library and Open Quantum Safe.

Featured story
2024 to 2026 · pyca/cryptographypyca/cryptography is the most widely used cryptography library for Python and the 11th most-downloaded package on PyPI. Since 2024 we have added X.509 certificate path validation, a new ASN.1 API, and post-quantum key exchange and signatures.
We added X.509 certificate path validation, written in Rust, to pyca/cryptography. The Sovereign Tech Fund funded this work.
Across 28 PRs we added an ASN.1 API that lets developers define complex structures without writing byte-level parsing code. Alpha-Omega funded this work.
We added the ML-KEM and ML-DSA post-quantum algorithms to pyca/cryptography. The Sovereign Tech Agency funded this work.
Verifying the integrity of Signal chats
We built and operate one of three independent auditors for Signal's key transparency.
Read moreTiming side channel fixed in RustCrypto ML-DSA
Our constant-time-analysis skill found a timing side channel in ML-DSA signing, and the fix was merged upstream.
View PRConstant-time support for LLVM
We proposed an LLVM RFC and __builtin_ct_select intrinsics that prevent compiler optimizations from removing side-channel protections in cryptographic code.
Read moreWe found cryptography bugs in the elliptic library using Wycheproof
Testing with Wycheproof found CVE-2024-48949 and CVE-2024-48948 in elliptic, a widely used JavaScript elliptic-curve library.
Read morePost-quantum Go libraries
We released ML-DSA and SLH-DSA implementations in Go, designed to avoid side-channel leaks.
Read moreGo standard library cryptography review
We reviewed the cryptography packages in Go's standard library over 12 weeks for Google, and the Go team announced the results on the Go blog.
Read on go.devAppSec
We contribute to compilers, linters and fuzzers that developers use every day, including rustc, rust-clippy, CodeQL and OSS-Fuzz. We also publish the full reports from security reviews of open-source projects, many of them funded by OSTIF and the Open Technology Fund.
Featured story
With OSTIF, OTF and the Linux FoundationWhen a foundation funds a security review of an open-source project, we publish the full report. Our published reports include curl, OpenSSL, Jetty, Mosquitto, Flux, etcd and Linkerd.
This post summarizes our OSTIF-funded reviews of Linux kernel release signing, curl, Jetty, Mosquitto, Flux, KEDA and other projects, and the CVEs fixed as a result.
We improved curl's fuzzing harnesses with funding from OSTIF and contributed the changes upstream.
We reviewed the VLC media library over five weeks in an audit funded by OSTIF.
Wikimedia OATHAuth review
We reviewed the security of MediaWiki's two-factor authentication module for the Wikimedia Foundation.
Read reportgosentry
gosentry is a fork of the Go toolchain that adds LibAFL-based fuzzing to go test -fuzz.
Read moreDon't recurse on untrusted input
A CodeQL query found DoS bugs in protobuf-java (CVE-2024-7254), XStream and others.
Read moreRust compiler and rust-clippy
We contributed lint fixes and replacement suggestions to rust-clippy, and extended rustc's QueryStability lint to detect nondeterminism.
Read moreRuzzy
Ruzzy is a coverage-guided fuzzer for Ruby, and OSS-Fuzz now supports it.
Read moreBlockchain
Auditors and protocol teams use Slither, Echidna and Medusa to analyze and fuzz smart contracts. We also contribute to hevm, the symbolic EVM that Echidna depends on, and build testing tools for Ethereum clients.

Featured story
crytic · hevm · Ethereum FoundationOur fuzzers depend on the execution engines they run on, so we contribute upstream to hevm, the symbolic EVM that Echidna uses. We also work with the Ethereum Foundation on testing Ethereum clients.
We built Attacknet with the Ethereum Foundation to run chaos tests against Ethereum execution and consensus clients.
We merged 27 PRs into hevm in 2024, adding Cancun opcodes and cheatcodes, and 14 more in 2025 that improved performance.
Building Secure Contracts
Building Secure Contracts is our guide to best practices and patterns for secure smart-contract development.
View on GitHubgo-panikint
go-panikint is a modified Go compiler that detects silent integer overflows, and it found one in Cosmos SDK's RPC pagination.
Read moreFinding mispriced opcodes with fuzzing
We built a LibAFL harness for the Fuel VM that found opcodes charging too little gas.
Read moreSystems
We contribute to LLVM, pwndbg, osquery and reverse-engineering tools such as Ghidra and angr, and we disclose the vulnerabilities we find in systems software.

Featured story
LLVM · libc++We added AddressSanitizer container annotations to libc++, so ASan now reports overflows inside std::string and std::deque that it previously missed.
We merged 22 PRs into LLVM in 2024, including the container annotations for std::string and std::deque.
This guide explains, step by step, how to use the ASan annotations we contributed to libc++.
mquire
mquire queries Linux memory snapshots over SQL without needing external debug symbols.
Read moreLUKS2 flaws in confidential VMs
We disclosed CVE-2025-59054 and CVE-2025-58356 in LUKS2 disk encryption as used by confidential VMs.
Read morepwndbg on LLDB
We ported pwndbg to LLDB and added Binary Ninja integration and support for embedded devices.
Read moreWe publicly release nearly all of our internal tooling. The full catalog on the Open Source tools page groups each tool by the problem it solves.
Slither
Slither runs static analysis on Solidity and Vyper code, with built-in detectors and an API for custom checks.
View toolEchidna
Echidna is a property-based fuzzer that generates grammar-based inputs to test the invariants of Ethereum contracts.
View toolButtercup
Buttercup is our AIxCC cyber reasoning system, which finds and patches vulnerabilities in open-source code.
View toolSkills
Our security research and audit workflows are published as skills for AI coding agents.
View toolPackage managers have an integrity problem
Only two of 25 popular package managers verified the integrity of every package they downloaded.
Supply chainHow we help verify the integrity of your Signal chats
We operate one of three independent auditors for Signal's key transparency.
CryptographyShipping post-quantum cryptography to Python
We added ML-KEM and ML-DSA to pyca/cryptography.
CryptographyIntroducing Patch the Planet
We launched a joint initiative with OpenAI to help secure critical open-source software.
AI/MLWe hardened zizmor's GitHub Actions analyzer
We added full YAML anchor support and tested it against 41,253 existing workflows.
Supply chainWe forked the Go toolchain to fix fuzzing
gosentry adds LibAFL-based fuzzing to Go's native fuzz interface.
AppSecThis is our earliest annual recap of open-source contributions.
Read the recapThis roundup covers our tooling, research and ecosystem contributions in 2022.
Read the recapThis recap covers our work on our own tools and on upstream security projects in 2023.
From the recap
450+ merged PRs
In 2024 we contributed to package infrastructure, language tooling and security engineering projects across the ecosystem.
From the recap
750+ merged PRs · 80+ projects
Our upstream work in 2025 covered Sigstore, Rust tooling, PyPI, cryptography libraries and debugging infrastructure.
From the recap
375+ merged PRs · 90+ projects
You can fork our repositories, file issues and send pull requests. Most of what we build is public.
Patch the Planet
Patch the Planet gives selected maintainers a week of dedicated security engineering, including patches.
Fund or sponsor
We work with foundations and companies that fund audits and security engineering for open-source projects.