SQLite versions before 3.54.0 can return uninitialized page-cache memory when a process opens a database file together with a sibling write-ahead-log (-wal) file whose page size differs from the database's. A crafted pair of files can make ordinary queries return stale bytes from the process's memory. The attack vector is local and needs the victim to open the files.
As libsqlite3-sys bundles SQLite when it is built from its bundled source (the bundled feature, which rusqlite's bundled feature enables), it is susceptible to the vulnerability. The releases 0.6.0 to 0.38.2 bundle SQLite 3.13.0 to 3.53.2 and are affected; the earlier releases contain no SQLite source. libsqlite3-sys was updated to bundle the patched version of SQLite in 0.39.0 (SQLite 3.54.0) and 0.39.1 (SQLite 3.54.1), released with rusqlite 0.41. libsqlite3-sys 0.39 declares Rust 1.88 and rusqlite 0.41 declares Rust 1.89.
Only a process that opens a database file, with its -wal, that a less trusted party could have written is exposed. A build that links a system SQLite instead of the bundled source is not affected by the copy in this crate; its exposure is that of the system library's version. The bundled-sqlcipher feature builds SQLCipher instead of SQLite; in 0.39.0 and 0.39.1 it depends on sqlcipher-src =419.0.6, which bundles SQLite 3.53.4 and is affected.
{
"license": "CC0-1.0"
}