
SQLite 3.53.4 - उच्च - स्थानीय - क्रैश - FTS5 secure-delete PutVarint फ़ुटर ओवररन
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-fts5-securedel
Class: Crash Reach: Local
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) - Hwaci
fts5DoSecureDelete nPg = iPgIdx के बाद sqlite3Fts5PutVarint के साथ FTS5 लीफ फ़ुटर को पुनर्निर्मित करता है। फ़ुटर-डिकोड किए गए key offsets को मूल blob के विरुद्ध सीमित नहीं किया जाता, इसलिए PutVarint कर्सर nn + FTS5_DATA_PADDING (20) से आगे निकल जाता है। सामान्य अतिरिक्त SQLITE_ENABLE_FTS5। हमले वाला डेटाबेस पहले से ही secure-delete का उपयोग कर चुका था।
यह बाद के trunk Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11, YEONBA) का अवशेष है। वह चेक-इन इस GA के बाद का है। यह नहीं है CVE-2026-11824: इस pin पर fts5LeafRead पहले से ही szLeaf<4 को अस्वीकार करता है।
| ID | अभी तक कोई CVE नहीं |
| Class | Crash (आकार 1 का ASan WRITE; RCE प्रदर्शित नहीं) |
| Reach | Local (एक crafted FTS5 डेटाबेस खोलें, फिर DELETE/flush करें) |
| CWE | CWE-787 |
| CVSS | High: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Product | SQLite (GitHub मिरर sqlite/sqlite) |
| Affected | 3.53.4 SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| Auth | कोई नहीं (अविश्वसनीय इंडेक्स फ़ाइल) |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:18860। ASan heap write। कोई RCE payload नहीं। |
एक crafted FTS5 डेटाबेस खोलें जो पहले से ही secure-delete का उपयोग कर चुका है, फिर DELETE (या कोई भी write जो secure-delete को flush करता है) करें ताकि fts5DoSecureDelete Fts5Data से आगे footer varints लिख दे। आकार 1 का Crash / ASan heap write। RCE प्रदर्शित नहीं। CVE-2026-11824 नहीं।
केवल MATCH इस sink का कारण नहीं है। ट्रिगर DELETE/flush है। Crafted फ़ाइल के लिए SQLITE_DBCONFIG_DEFENSIVE बंद होना आवश्यक नहीं है।
अन्य डेटाबेस और HTTP-server pins के बाद SQLite 3.53.4 की बीस स्रोत खोजें। CVE-2026-11822 / CVE-2026-11824 इस tree पर बंद है (fts5LeafRead szLeaf<4)। YEONBA की बाद की trunk bound नहीं है। 3.53.4 की fts5corruptB.test फ़ाइल अभी भी test 3.2 पर समाप्त होती है; trunk test 4.0 hexdb के साथ DELETE FROM t WHERE rowid = 1 है।
iPgIdx -= nShift;
nPg = iPgIdx;
fts5PutU16(&aPg[2], iPgIdx);
for(iIdx=0; iIdx<nIdx; /* no-op */){
u32 iVal = 0;
iIdx += fts5GetVarint32(&aIdx[iIdx], iVal);
iKeyIn += iVal;
if( iKeyIn!=iDelKeyOff ){
int iKeyOut = (iKeyIn - (iKeyIn>iOff ? nShift : 0));
nPg += sqlite3Fts5PutVarint(&aPg[nPg], iKeyOut - iPrevKeyOut);
iPrevKeyOut = iKeyOut;
}
}
ext/fts5/fts5_index.c:5514-5544। iKeyIn एक 32-बिट int है। बाद का trunk मूल nPg रखता है, i64 iKeyIn का उपयोग करता है, और PutVarint से पहले iKeyIn>nPg को अस्वीकार करता है।
गलत रास्ते: CVE-2026-11824 को इस बग के रूप में मानना; DELETE के बजाय MATCH; एक live CREATE/INSERT plant जो szLeaf को सीमा में रखता था और overflow नहीं करता था; payload के बिना Winter की WAL-plus-FTS5 श्रृंखला को RCE कहना।
cd lab
./run.sh
आधिकारिक sqlite-src-3530400 zip से ASan amalgamation, -DSQLITE_ENABLE_FTS5। Hexdb lab/yeonba-fts5corruptB-4.hexdb (trunk fts5corruptB.test 4.0) आवश्यक है। Bind loopback 127.0.0.1:18860। Compose प्रोजेक्ट sqlite-fts5-securedel।
SUCCESS sqlite-fts5-securedel how=asan-heap-buffer-overflow-write-1-fts5DoSecureDelete db=yeonba-hexdb bytes=5120 SQLITE-FTS5-SECUREDEL-WITNESS
ASan frames: fts5PutVarint64 -> sqlite3Fts5PutVarint -> fts5DoSecureDelete / fts5FlushSecureDelete।
मूल nPg रखें। iKeyIn को i64 तक चौड़ा करें। sqlite3Fts5PutVarint से पहले iKeyIn>nPg को अस्वीकार करें। यही Fossil 9cd4f9e920 / branch-3.53 34171bee08 है। इसे 3.53 पर cherry-pick करें।
b09c88c14082339b66c7b7158d609a771e64ca69ext/fts5/fts5_index.c fts5DoSecureDelete, fts5FlushSecureDelete, fts5LeafReadext/fts5/fts5_varint.c sqlite3Fts5PutVarintd9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11, YEONBA)szLeaf<4 parent है, यह अवशेष नहीं