
SQLite 3.53.4 - उच्च - स्थानीय - क्रैश - FTS5 secure-delete PutVarint फ़ुटर ओवररन
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-fts5-securedel
लेख: https://abraxaslabs.tech/research/sqlite-fts5-securedel
वर्ग: क्रैश पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) - Hwaci
fts5DoSecureDelete nPg = iPgIdx के बाद sqlite3Fts5PutVarint के साथ FTS5 लीफ फ़ुटर को पुनर्निर्मित करता है। फ़ुटर से डिकोड किए गए कुंजी ऑफ़सेट मूल ब्लॉब के विरुद्ध सीमित नहीं हैं, इसलिए PutVarint कर्सर nn + FTS5_DATA_PADDING (20) से आगे निकल जाता है। सामान्य अतिरिक्त SQLITE_ENABLE_FTS5। हमले वाले डेटाबेस ने पहले से ही secure-delete का उपयोग किया था।
यह बाद के ट्रंक Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11, YEONBA) का अवशेष है। वह चेक-इन इस GA के बाद का है। यह नहीं है CVE-2026-11824: इस पिन पर fts5LeafRead पहले से ही szLeaf<4 को अस्वीकार करता है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | क्रैश (आकार 1 का ASan WRITE; RCE प्रदर्शित नहीं) |
| पहुँच | स्थानीय (एक तैयार किया गया FTS5 डेटाबेस खोलें, फिर DELETE/flush करें) |
| CWE | CWE-787 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| उत्पाद | SQLite (GitHub मिरर sqlite/sqlite) |
| प्रभावित | 3.53.4 SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| प्रमाणीकरण | कोई नहीं (अविश्वसनीय इंडेक्स फ़ाइल) |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18860। ASan हीप राइट। कोई RCE पेलोड नहीं। |
एक तैयार किया गया FTS5 डेटाबेस खोलें जिसने पहले से ही secure-delete का उपयोग किया है, फिर DELETE (या कोई भी राइट जो secure-delete को फ्लश करता है) करें ताकि fts5DoSecureDelete Fts5Data से आगे फ़ुटर varints लिख दे। क्रैश / आकार 1 का ASan हीप राइट। RCE प्रदर्शित नहीं। CVE-2026-11824 नहीं।
केवल MATCH इस सिंक नहीं है। ट्रिगर DELETE/flush है। तैयार की गई फ़ाइल के लिए SQLITE_DBCONFIG_DEFENSIVE बंद होने की आवश्यकता नहीं है।
अन्य डेटाबेस और HTTP-सर्वर पिन के बाद SQLite 3.53.4 की बीस स्रोत खोजें। CVE-2026-11822 / CVE-2026-11824 इस ट्री पर बंद है (fts5LeafRead szLeaf<4)। YEONBA की बाद की ट्रंक सीमा नहीं है। 3.53.4 की fts5corruptB.test फ़ाइल अभी भी टेस्ट 3.2 पर समाप्त होती है; ट्रंक टेस्ट 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; एक लाइव CREATE/INSERT प्लांट जो szLeaf को सीमा में रखता था और ओवरफ़्लो नहीं करता था; 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) आवश्यक है। लूपबैक 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 फ़्रेम: 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 पैरेंट है, यह शेष नहीं