
SQLite 3.53.4 - عالي - محلي - كتابة خارج الحدود في الكومة - نمو nCol بنفس الاسم في مجموعة تغييرات الجلسة
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
الفئة: كتابة خارج الحدود في الكومة (heap OOB write) الوصول: محلي
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) مع -DSQLITE_ENABLE_SESSION. مجموعة تغييرات من كتلتين تعيد استخدام اسم الجدول t مع nCol=2 ثم nCol=64، فتتخطى إعادة تعيين sessionTableInfo (sqlite3session.c:5619) وتنفذ memset بعد aUpdateMask الخاص بالكتلة الأولى. كتابة ASan بحجم 12 في sessionUpdateFind. التحكم: تطبيق UPDATE واحد بعمودين apply-rc=0.
ليست دمجًا افتراضيًا ما لم يكن SESSION مفعّلًا. ثغرة CVE-2026-50812 NPD مغلقة في 3.53.2+. ليست حمولة RCE مسلّحة. الدليل هو كتابة ASan.
| المعرّف | لا يوجد CVE بعد |
| الفئة | كتابة خارج الحدود في الكومة (كتابة ASan بحجم 12؛ لم يُثبت RCE) |
| الوصول | محلي (مجموعة تغييرات غير موثوقة عبر sqlite3changeset_apply*) |
| CWE | CWE-787 |
| CVSS | مرتفع: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| المنتج | SQLite إضافة Session (Hwaci) |
| المتأثر | 3.53.4 (b09c88c) مُصرّح مع -DSQLITE_ENABLE_SESSION |
| المصادقة | المضيف يطبّق مجموعة تغييرات غير موثوقة |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18900 فقط. شاهد كتابة ASan بحجم 12. |
تطبيق مجموعة تغييرات غير موثوقة تعيد كتلة جدولها الثانية استخدام اسم جدول مع nCol أكبر. كتابة خارج الحدود في الكومة. تصريح إضافي. ليست دمجًا افتراضيًا ما لم يكن SESSION مفعّلًا.
الكتلة الأولى تخصّص aUpdateMask من pIter->nCol. الكتلة اللاحقة التي تحمل الاسم نفسه تتخطى إعادة تعيين sessionTableInfo وتنفذ memset لقناع أكبر فوق التخصيص القديم. المختبر: nCol=2 ثم nCol=64 UPDATE. كتابة ASan بحجم 12 في sessionUpdateFind. التحكم: تطبيق UPDATE واحد بعمودين apply-rc=0.
لا تتعامل مع هذه الحزمة كأداة كتابة-في-أي-مكان (write-what-where). كتابة ASan بحجم 12 هي الدليل.
عشرون عملية بحث في مصدر SQLite 3.53.4 بعد موجة 3.53.2 FTS5 / session-NPD. ثغرة CVE-2026-50812 مغلقة (sessionBindRow تعالج القيمة المفقودة كـ SQLITE_CORRUPT). لا يزال Session يعتمد على SessionApplyCtx باسم الجدول فقط. كتلة ثانية بالاسم نفسه مع عدد أعمدة معلن أكبر تعيد استخدام aUpdateMask.
مسارات خاطئة مسجّلة مسبقًا: اعتبار الدمج الافتراضي داخل النطاق (SESSION معطّل)؛ إعادة تسجيل CVE-2026-50812؛ إرسال كتلة جدول واحدة بـ nCol=64 مقابل مخطط بعمودين (schemaMismatch، لا كتابة)؛ ادعاء RCE من memset بحجم 12 بايت.
cd lab
./run.sh
دمج ASan من ملف sqlite-src-3530400 الرسمي. تصريح إضافي -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK. الفحص على 127.0.0.1:18900. اربطه بواجهة loopback.
SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS
عندما تعيد كتلة جدول لاحقة في مجموعة التغييرات استخدام اسم، أعد بناء SessionApplyCtx بالطريقة التي يفعلها الاسم الجديد بالفعل: حرّر aUpdateMask، أعد تشغيل sessionTableInfo، وارفض nCol أكبر من المخطط الحيّ. الفرع الرئيسي 3f57024aec / الفرع branch-3.53 a1dd7123d8 (2026-08-17) يأتي بعد هذا الإصدار.
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619، sessionUpdateFind :4381-4412