
SQLite 3.53.4 - عالي - محلي - انهيار - FTS5 secure-delete PutVarint تجاوز الذيل
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-fts5-securedel
الفئة: انهيار الوصول: محلي
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) - Hwaci
fts5DoSecureDelete يعيد بناء تذييل ورقة FTS5 باستخدام sqlite3Fts5PutVarint بعد nPg = iPgIdx. لا يتم تقييد إزاحات المفاتيح المفكوكة من التذييل مقابل الكتلة الأصلية، لذا يتجاوز مؤشر PutVarint الحد nn + FTS5_DATA_PADDING (20). عادةً ما يكون SQLITE_ENABLE_FTS5 إضافيًا. قاعدة بيانات الهجوم استخدمت بالفعل secure-delete.
هذا من بقايا لاحق في trunk Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11، YEONBA). هذا الـ check-in يأتي بعد هذا الإصدار GA. وهو ليس CVE-2026-11824: fts5LeafRead يرفض بالفعل szLeaf<4 على هذا الإصدار.
| ID | لا يوجد CVE بعد |
| الفئة | انهيار (كتابة ASan بحجم 1؛ لم يُثبت تنفيذ كود عن بُعد) |
| الوصول | محلي (افتح قاعدة بيانات 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 (أو أي كتابة تؤدي إلى flush لـ secure-delete) بحيث يكتب fts5DoSecureDelete varints التذييل بعد Fts5Data. انهيار / كتابة ASan على الكومة بحجم 1. لم يُثبت تنفيذ كود عن بُعد. ليس CVE-2026-11824.
MATCH فقط ليس هذا الـ sink. المُحفّز هو DELETE/flush. الملف المصنوع لا يحتاج إلى إيقاف SQLITE_DBCONFIG_DEFENSIVE.
عشرون عملية بحث في مصدر SQLite 3.53.4 بعد إصدارات أخرى لقواعد البيانات وخوادم HTTP. CVE-2026-11822 / CVE-2026-11824 مغلق على هذه الشجرة (fts5LeafRead szLeaf<4). حد trunk اللاحق من YEONBA ليس كذلك. ملف fts5corruptB.test في 3.53.4 لا يزال ينتهي عند الاختبار 3.2؛ اختبار trunk 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 هو int بحجم 32 بت. trunk اللاحق يحتفظ بـ nPg الأصلي، ويستخدم i64 iKeyIn، ويرفض iKeyIn>nPg قبل PutVarint.
مسارات خاطئة: التعامل مع CVE-2026-11824 على أنه هذه الثغرة؛ MATCH بدلاً من DELETE؛ plant حي لـ CREATE/INSERT أبقى szLeaf في النطاق ولم يحدث overflow؛ استدعاء سلسلة Winter's WAL-plus-FTS5 RCE بدون حمولة.
cd lab
./run.sh
دمج ASan من ملف sqlite-src-3530400 الرسمي المضغوط، -DSQLITE_ENABLE_FTS5. مطلوب hexdb lab/yeonba-fts5corruptB-4.hexdb (trunk fts5corruptB.test 4.0). اربط 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: fts5PutVarint64 -> sqlite3Fts5PutVarint -> fts5DoSecureDelete / fts5FlushSecureDelete.
احتفظ بـ nPg الأصلي. وسّع iKeyIn إلى i64. ارفض iKeyIn>nPg قبل sqlite3Fts5PutVarint. هذا هو Fossil 9cd4f9e920 / branch-3.53 34171bee08. قم بعمل cherry-pick له على 3.53.
b09c88c14082339b66c7b7158d609a771e64ca69ext/fts5/fts5_index.c fts5DoSecureDelete، fts5FlushSecureDelete، fts5LeafReadext/fts5/fts5_varint.c sqlite3Fts5PutVarintd9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11، YEONBA)szLeaf<4، وليس هذه البقايا