Impact at a Glance

103
Vulnerabilities
Discovered · +41 since Feb
56
Projects
C / C++ ecosystem · +30 since Feb
70
Confirmed or Fixed
By maintainers · +27 since Feb
<5%
False Positive Rate
Across all live filings

What Changed Since the Last Campaign

Our previous update, in February, reported 62 vulnerabilities across 26 projects. Most of those came from auditing existing OSS-Fuzz harnesses on the general open-source ecosystem. The work done since has been deliberately different. The focus shifted to generating new harnesses for projects that did not have good fuzz coverage to begin with, and the target list moved one tier deeper into security-critical software.

All of that work runs on a single backbone we call the Four Principles. They are four source-level checks that every harness has to pass before we trust the crashes it produces. In short: (1) the harness code itself must be bug-free, (2) it must call library APIs in the order the library expects, (3) it should drive the library through its public attack surface (so any crash we find is reachable in production), and (4) the entry point it picks has to actually sit on a meaningful attack surface, not on a no-op helper. The first methodology post below introduces all four in detail.

A few additional numbers worth highlighting that the hero stats above do not show.

472
Harnesses Generated
In two weeks across the Chrome dependency graph
52
Crashes Caught Internally
52 fuzzer crashes that looked like real bugs but failed our own verification; we never sent them to upstream maintainers
59%
Confirmed Within the Period
24 of the 41 new findings already confirmed or merged
2
Latent Bugs Surfaced
Real upstream bugs that broken harnesses had been hiding

Three Milestones, Three Methodology Posts

The pivot above came out of three connected milestones. First we needed a checkable definition of what makes a harness "good". Then we used that definition to generate new harnesses and find new bugs, with Chromium as the showcase target. Finally we put each candidate crash through a verify pipeline so the FP rate stays low. Each milestone gets its own post; the cards below link straight through.

Define what a "good" harness is

Harnesses Have Bugs Too: A Four-Principles Audit of 586 OSS-Fuzz Harnesses. The Four Principles checklist (P1 Logic Correctness, P2 API Protocol Compliance, P3 Security Boundary Respect, P4 Entry Point Adequacy), validated by auditing 586 production OSS-Fuzz harnesses. 53 fix PRs filed, 45 verified or merged, 14 false positives caught at audit, two upstream bugs unmasked (including a 25-year-old OpenSSL DES over-read).

Read Milestone 1 →

Generate good harnesses on Chromium, find new bugs

Two Weeks Inside Chromium: 472 Harnesses, 30 Vulnerabilities Filed Upstream. The four principles flipped into a generation criterion (P4 → P1) and combined with Logic Group as a semantic-unit slicer. 472 harnesses across 58 Chromium-stack libraries (libvpx, libwebp, libaom, openscreen, dawn, pdfium, sqlite, v8 …). 30 vulnerabilities filed upstream. 52 internal crashes caught and dropped before any reached a maintainer.

Read Milestone 2 →

Verify each crash before we file it

How We Verify Fuzzer Crashes: Four Principles, Two Reproductions, and Security Proxies. The verify pipeline that keeps live FP under 5%. Three gates: re-run the four principles on the specific crash trace, two independent reproductions (harness replay plus public-API repro), and per-library Security Proxies that encode the maintainer's documented threat model.

Read Milestone 3 →

Severity of the New 41

Roughly half of the new findings are High severity. Memory-corruption bugs (heap overflow, UAF, OOB) dominate, with denial-of-service and unbounded-allocation issues making up most of the rest. No Critical for this batch, two Low.

High: 20 (49%)
Medium: 19 (46%)
Low: 2 (5%)

What We Found: Bug Classes

The new wave skews toward memory-safety classes typical of modern multimedia, parsing, and serialization code. Heap buffer overflow leads, followed by denial-of-service in JSON and HTTP/3 parsers, and a cluster of allocation-related bugs in deserializers.

Heap Buffer Overflow9
Denial-of-Service4
Memory Leak3
Use-After-Free2
Heap Use-After-Free2
NULL Pointer Deref2
Unbounded Allocation2
Uncontrolled Allocation2
Assertion Failure2
Integer Overflow2
Stack Overflow1
Double-Free1
Other (parser / OOB / FPE)9

Where the New Findings Landed

Almost all of the 24 new projects sit in the Chromium dependency graph or in security-critical libraries with wide deployment footprints. Below are the ones with multiple findings or a notable confirmed/fixed first-time hit. Single-finding new projects appear in the table after.

Chromium & Google Vendor Stack

Multiple confirmed

libaom (AV1)

3/3 confirmed

openscreen (Cast Streaming)

3/3 fixed

tidy-html5

0/3 awaiting review

flatbuffers

2/2 confirmed
  • Heap Overflow in flatbuffers::Verify Reflection Verifier — flatbuffers#9040 (confirmed)
  • Heap Overflow in FlexBuffers toString Post-Verification — flatbuffers#9041

libvpx

2/2 confirmed

libvorbis

0/2 awaiting review

FreeRDP

1/1 fixed
  • Pre-Auth Memory Leak in NTLM AuthenticateMessage parser failure path — FreeRDP#12609

libavif

1/1 fixed
  • Heap Buffer Overflow via signed-int length sign-extension at the Android JNI direct-ByteBuffer entry points — libavif#3178

HarfBuzz

1/1 fixed
  • OOB write in fontations glyph-name callback when invoked with size==0 — harfbuzz#5947

nDPI

1/1 fixed
  • Unbounded sscanf in ndpi_hex_decode over a borrowed non-NUL-terminated buffer in ndpi_decode_tls_blocksnDPI#3163

OTS (Chrome's font sanitizer)

1/1 fixed
  • NULL deref in ProcessGeneric with TABLE_ACTION_PASSTHRUots#309

SQLite

1/1 fixed
  • Heap-Use-After-Free in sqlite3Fts5PoslistNext64 via realloc-moved LookaheadReader (FTS5 path).

ICU

1/1 fixed
  • Use-After-Free / NULL deref in TransliterationRule destructor — ICU-23365 (fixed in ICU 79.1)

Additional New-Project Findings

Single-finding-per-project hits in this period.

Project Vulnerability Severity Status
Cap'n Proto Stack Overflow in Text Codec Lexer High Submitted
crashpad Unbounded Alloc in MemorySnapshotMinidump Medium Submitted
Dawn Unbounded Alloc in BlobCache Stream Medium Submitted
JavaScriptCore DFG StrengthReductionPhase incorrectly resets m_changed flag Medium Fixed
LevelDB Unbounded Alloc in ReadBlock via Crafted SSTable Block Handle High Submitted
libheif Heap Overflow in heif_image_crop High Submitted
libpng Heap-Use-After-Free in png_zlib_inflate via stale next_in (pCAL) Medium Submitted (GHSA)
OpenCV Heap Buffer Overflow in YAML parser parseKey() (empty key) Low Fixed
OpenSSL Stack Buffer Over-Read in DES OFB/CFB64 (unchecked num) — 25 yrs latent Low Fixed
QUICHE Pre-Auth DoS in HTTP/3 Frame Decoder via QUICHE_BUG Medium Submitted
RapidJSON Assertion Failure in Regex Engine High Submitted
V8 Bytecode Mismatch in V8 Interpreter (correctness bug) Medium Confirmed

Timeline

February 2026

Last Campaign Update

62 vulnerabilities reported across 26 projects. Most through OSS-Fuzz harness audits on general open-source software.

March 2026

Pivot to Generation

Methodology designed and validated on existing harnesses. Two latent upstream library bugs surfaced when broken harnesses were repaired (the OpenSSL DES 25-year over-read and a tidy-html5 lexer leak).

April 2026

Two-Week Chromium Run

472 harnesses generated across 58 Chrome-stack libraries. 30 vulnerabilities filed upstream, 16 already confirmed. Another 52 fuzzer crashes were caught and dropped by our own internal verification before any reached a maintainer.

April 30, 2026

Methodology Series Published

Three posts released today, plus this update. All-time numbers: 103 filed across 56 projects, 70 confirmed by maintainers, FP rate under 5%.

What Comes Next

The 33 still-in-flight submissions are being chased through the same Security Proxies. The 12 confirmed-but-not-yet-merged are waiting on upstream maintainer time. The next batch of harness generation widens the Chromium dependency graph (mojo IPC and Skia are next) and applies the same Four Principles framework to a few network-stack libraries beyond Chrome.

Wider Chromium Coverage

mojo IPC, Skia rendering, and the remaining unfuzzed Chrome-vendor libraries.

Beyond Chrome

Extending the same generate-and-verify pipeline to network-stack and database libraries that have lighter fuzz coverage today.

Open Dataset

The audit results, Logic Group definitions, Security Proxy YAMLs, and harness sources continue to be published in the public repo.

Explore the Methodology

The Four Principles framework, the Logic Group abstraction, and the Security Proxies are all open. Reuse encouraged.

— Ze Sheng · Team FuzzingBrain