JFrog’s investigation found that multiple SQLite CVE advisories issued by NVD and CISA contain technical inconsistencies and likely represent AI‑generated misinformation, suggesting they are false positives and not genuine vulnerabilities.
❯ Systems: Six Bugs That Never Existed
Six CVE numbers were filed against SQLite this spring for faults it has never had. Somebody read all six, failed to reproduce all six, and lost the afternoon that would otherwise have gone into the next release.
There is a page on the SQLite site that nobody links to, and it is the most quietly devastating thing the project publishes. Every CVE ever filed against the library, with a column for what the project makes of it. Most rows are courteous. Then you reach CVE-2026-51296, and five more running up to 51304, and somebody has typed: these are unreproducible, they appear to be AI hallucinations.
■ WHAT NINETY-TWO MILLION LINES BUY
155,800 lines of C, against 92,053,100 lines of test. The ratio gets quoted everywhere and understood almost nowhere, because the architecture is the interesting part: two suites kept deliberately unconnected so they cannot share a blind spot, 51,445 open cases in TCL and 50,362 proprietary ones in TH3, the latter expanded into some 2.4 million instances. Behind them a fuzzer producing close to a billion mutations a day from 336 seed files.
The coverage standard is where diligence turns into something else. MC/DC asks whether every individual condition inside a compound test has been shown to swing the outcome on its own, everything else held still, so a single if with four clauses wants at least five cases. That is the bar in DO-178B Level A, what a regulator asks before software may fly an aeroplane with people in it. Held continuously since August 2009.
Rather a lot of engineering for a database that fits in a briefcase, one might think. A defect here ships to a trillion active databases on the same afternoon.
■ THE FIGURE EVERYBODY QUOTES
I wrote in December that SQLite fits in 600 KB. Honest, and incomplete, which is what a second look is for. Minimal builds land between 590 and 750 KB depending on compiler and machine, and hardly anybody ships one. Measured here this morning, from the Homebrew package:
• 1,270,336 bytes, a shade over twice the minimal build
• Two runtime dependencies, libz and libSystem, both already in the base system
• 88,736 bytes of memory with a database open, peaking at 91,840
• Configuration files required: zero
The extra weight is FTS5, RTREE, Geopoly, the JSON support and the maths functions, compiled in because a distribution has to serve everyone who might want any of them.
■ THE TRIAGE TAX
In October 2024 Google's Big Sleep agent found a stack buffer underflow in a development build and reported it. The provenance is the remarkable part: Google's own people had already aimed 150 CPU-hours of fuzzing at that code and come back empty. The fault sat in seriesBestIndex, where a sentinel value of minus one turns up in a field the surrounding code assumes will be positive. Fixed the same day, and no release ever carried it. The suite had exercised every branch in that function thousands of times over, and nobody had ever asked it what a sentinel value might do there.
Then April brought the flood. 3.53.0 shipped, a huge rush of AI-aided bug reporting followed, and 3.53.4 went out as mostly fixes for AI-discovered bugs. Somewhere in that stretch the six invented CVEs arrived, and the project opened a second forum: the notice on the first one now explains that it is there to support human users of SQLite, not AIs, and points the machines at an address of their own. One hesitates to call that progress.
Filing costs four seconds. Examining costs an afternoon, out of the only budget a three-person shop actually holds, which is the attention of whoever would otherwise be writing the next release.
■ WHY THIS ONE SURVIVES IT
Little of it is the test suite. SQLite publishes a threat model, which almost nobody else dares do: every historical vulnerability against it needs an attacker who can run arbitrary SQL, or one who can hand you a maliciously crafted database file, and few real applications permit either. The maintainer has something to point at when the twentieth report of the week lands.
On FreeBSD the library arrives through the ports tree with a distinfo checksum and one origin, and the amalgamation underneath is a single C file with a single provenance. A project shipping four hundred transitive dependencies has nothing to point at, because its attack surface is the sum of four hundred decisions taken by strangers, and every advisory must be believed until somebody proves otherwise.
Ninety-two million lines of test can prove the code is right. They cannot prove the report is.
#SQLite#SoftwareTesting#FreeBSD
👉 Full essay: https://vivianvoss.net/blog/never-existed
• Test ratio, suite sizes, MC/DC and fuzz volume: https://sqlite.org/testing.html
• The CVE table, the six hallucinated entries, the project's assessment column and its published threat model: https://sqlite.org/cves.html
• The AI-aided bug rush and the 3.53.4 release note: https://sqlite.org/news.html
• Minimal build sizes by compiler and machine: https://sqlite.org/footprint.html
• The 2050 commitment and the Library of Congress listing: https://sqlite.org/lts.html
• Big Sleep against 150 CPU-hours of fuzzing: https://www.securityweek.com/google-says-its-ai-found-sqlite-vulnerability-that-fuzzing-missed/
Post summary
The post debunks six SQLite CVEs as AI hallucinations, noting they are unreproducible, while also describing a legitimate stack buffer underflow that was quickly patched.