Build1 distinct publisher3 min readPublished
Discovery took 495,211 executions and ten hours forty-three minutes on a single machine. The two-line guard that fixes it was proposed on ffmpeg-devel in November 2024 and never landed on the path that mattered.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
According to the FFmpeg issue, `vpk_read_header` does validate that the channel count is positive, and `vpk_read_packet` divides by that count as zero anyway [5][6]. The report explains the gap by pointing at the harness: in the fuzzer's custom-I/O setup, the bytes seen during probing and the bytes seen during packet reading can diverge [5]. That clause is load bearing, and it sits awkwardly beside the crash metadata, which records the input as fully deterministic with no preconditions and no network [10], and beside the claim that any FFmpeg-based application that opens the file and reads a packet dies [1].
For the 21 bytes to transfer to a stock build reading a file off disk, the short read has to land the same way. The demuxer parses a 24-byte header out of a 21-byte file, three bytes it never had [3]. The four zeros sit at bytes 14 through 17, inside the file [5]. The remainder of that header comes from whatever the I/O layer returns past the end, and the I/O layer is precisely the piece the fuzzer replaced. The article's author says he cloned the repo, attempted the crash on his own Ubuntu box, and flagged the one place his results diverged from the report [20]. That flag is where I would start.
Then the discovery cost. Ten hours forty-three minutes is 38,580 seconds, so 495,211 executions is roughly 12.8 per second [1]. That is slow, and the fuzzer's README says so, conceding that AFL remains the better choice for production fuzzing at scale [18]. A 13,188-entry corpus against 495,211 executions is a 2.7 percent retention rate [2]. The scheduling earned this finding rather than the execution rate: 147 mutation operators across nine categories, with 14 scheduler modules under Elo arbitration [17], aimed at a demuxer for Sony PS2 audio files [2]. VPK support is presumably load-bearing for someone.
The craft is worth naming. The repo carries an `AGENTS.md` that the human maintains for the agents working on the code, with rules such as always find the closest existing example and match its convention [19]. A README that publishes its own throughput disadvantage [18] tells you more than most benchmark tables do.
Adoption cost on the defender side is small: a guard on `nb_channels <= 0` at the top of `vpk_read_packet`, an `AVERROR_INVALIDDATA` return, and a regression test [12]. Exposure cost depends on your process model. A Medium-rated denial of service [11] is a restart for a transcode worker that runs out of process, and an outage for anything that links FFmpeg in-process and parses uploads it did not produce. Since the bug class was already characterised on ffmpeg-devel [13], the remaining work is not research. It is inventory: every call site that divides by a count a header handed it.
Ranked by verification strength, evidence, and original report placement.
The bug lives in libavformat/vpk.c, the demuxer for Sony PS2 VPK audio files, a container format almost nobody has heard of.
The issue's crash metadata records 495,211 executions to find the bug and a corpus size of 13,188 entries at discovery.
Elapsed time to discovery was 10 hours 43 minutes on a single machine.
The crash metadata lists the input as 21 bytes, fully deterministic, with no preconditions and no network.
Severity is rated Medium: a reliable denial of service, not code execution.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 28, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
security
CISA revises the Mitsubishi FA advisory a fourth time for one UDP denial-of-service bug1 distinct publisher
build
Fabricated SQLite CVEs cleared NVD, CISA ADP and Red Hat before anyone ran the code1 distinct publisher
build
Perf work stopped being a specialist queue item, and slow endpoints became a choice1 distinct publisher
build
Every viewer hits your HLS key endpoint in the same second, and almost nobody tests it1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One relayed tracker entry, honestly relayed
Every hard number - 495,211 executions, a 13,188-entry corpus, 21 bytes, ten hours forty-three minutes - lands in this story from a single place: the metadata block on FFmpeg issue #24290, as reprinted by dev.to. The relay is better than most, because the writer publishes the hex dump, names the file, function, line and byte offsets, and runs the input himself. It is also the ceiling: no maintainer comment, no advisory, no second account, and the one hands-on test on record came back clean.
Filed, not fixed
What exists is a tracker entry, a public repo, and a Hacker News thread. What does not exist anywhere in this reporting is a merged patch, a CVE, a distro advisory, or one named product that lets a stranger hand it a VPK file. The two-line guard is still a suggestion - and the earlier version of that same suggestion has been sitting on ffmpeg-devel since November 2024 without reaching the code path that fires.
Headline outruns the harness
'Crashes any FFmpeg-based application' and 'what years of audits missed' set the frame; a few paragraphs later the same writer feeds those 21 bytes to a stock FFmpeg and gets a tidy demuxing error. The crash needs the harness's custom I/O, where what the probe sees and what the packet reader sees come apart - and the rating is Medium, a process death, not a takeover. The overstatement is in the packaging, and the story itself supplies the deflating detail, which is why this is a stretch rather than a fabrication.
The finder is also the tool's promoter
Bug, fuzzer, findings documents and the Hacker News post that made any of it visible all trace to one person's repo, and the repo is the thing the story ends up praising. Two counterweights are on the record: the README says AFL beats it on throughput and remains the right choice at production scale, and dev.to's writer opens by saying he writes Java and runs agent infrastructure, not C security research. Self-interest here is present and labelled rather than buried.
Sharp on mechanism, thin on consequence
Trust the plumbing: file, function, line 89, bytes 14 through 17, and a 24-byte header parse over a 21-byte file all fit together into a coherent story about probe-time and read-time views diverging. Do not yet trust the stakes. Nobody outside the finder has confirmed the crash, the single documented attempt failed, the patch status is unknown, and the second HIGH-rated finding is relayed on the same authority as the first.