Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
sqlite-rtree-rowid0 — SQLite 3.53.4 - عالي - محلي - UAF - rtree last_insert_rowid 0 node hash | Kitploit
أدوات/GitHubGitHub/abraxas/sqlite-rtree-rowid0
التحليل الديناميكي (عزل)تحليل الذاكرة الجنائيتحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيتحليل الملفات الثنائيةالأوراق والأبحاثأمن قواعد البيانات
GitHubabraxas/sqlite-rtree-rowid0

sqlite-rtree-rowid0

SQLite 3.53.4 - عالي - محلي - UAF - rtree last_insert_rowid 0 node hash

عرض المستودع
9منذ 6 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Abraxas Labs - sqlite-rtree-rowid0

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-rtree-rowid0

sqlite-rtree-rowid0

الفئة: UAF الوصول: محلي

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

تقوم nodeWrite بتجزئة عقدة rtree جديدة باستخدام iNode==0 عندما تبقى sqlite3_last_insert_rowid() صفرًا بعد INSERT في %_node الذي لا يزال يُبلّغ عن النجاح. تتخطى nodeHashDelete القيمة 0. تقوم nodeRelease بعد SplitNode بتحرير RtreeNode بينما لا تزال التجزئة تحتفظ به. لاحقًا تصبح nodeHashLookup استخدامًا بعد التحرير لذاكرة الكومة. نفس nodeWrite موجودة على مسار geopoly.

لم يتم إثبات RCE. قراءة ASan في nodeHashLookup. إصلاح branch-3.53 اللاحق هو SQLITE_CORRUPT_VTAB عندما يبقى رقم العقدة المُعيَّن صفرًا. هذا الفحص غير موجود في هذا الإصدار GA.

IDلا يوجد CVE بعد
الفئةUAF (استخدام بعد التحرير لذاكرة الكومة لـ RtreeNode؛ لم يتم إثبات RCE)
الوصولمحلي (SQL غير موثوق أو ملف .db غير موثوق على جدول rtree/geopoly)
CWECWE-416
CVSSمرتفع: 8.1 CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
المنتجSQLite rtree / geopoly (SQLITE_ENABLE_RTREE)
المتأثر3.53.4 (b09c88c)
المصادقةSQL من المهاجم أو trigger مزروع في الجدول الظل / %_node بدون ROWID
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1:18890 فقط. شاهد ASan. لا يوجد حمولة استغلال.

ما يمكن للمهاجم فعله

على جدول rtree أو geopoly، اجعل INSERT العقدة يُبلّغ عن النجاح بينما تبقى last_insert_rowid() صفرًا. الطرق الموثقة: استبدال %_node بـ WITHOUT ROWID، أو زرع BEFORE INSERT RAISE(IGNORE) على الجدول الظل، ثم إعادة الفتح بحيث يصبح last rowid للاتصال صفرًا. كرر INSERT حتى انقسام العقدة. يتم تجزئة الشقيق الأيمن كعقدة 0، وتحريره، ويظل قابلًا للعثور عليه.

ثم تستخدم العملية المضيفة RtreeNode محرَّرة. المختبر هو AddressSanitizer heap-use-after-free. التحكم في مؤشر التعليمات ليس في هذه الحزمة. الانهيار موجود.

يتم تعيين SQLITE_VTAB_INNOCUOUS، لذا لا يزال rtree يعمل مع trusted_schema معطّلًا. لا يضبط التجميع الافتراضي SQLITE_DEFAULT_DEFENSIVE. لا يزال trigger مزروع مسبقًا في ملف DB غير موثوق يعمل عندما يُنفَّذ INSERT الخاص بـ pWriteNode في rtree نفسه.

كيف وجدته

عشرون عملية بحث في المصدر لـ https://github.com/sqlite/sqlite وسم https://github.com/sqlite/sqlite/tree/version-3.53.4. الشجرة الأساسية هي https://sqlite.org/src. GitHub هو مرآة Fossil. لا يزال 3.54.0 مسودة. هذه البقايا نموذجية لـ -DSQLITE_ENABLE_RTREE الإضافي (التجميع الرسمي الموصى به، وWindows nmake OPTS، وautoconf fallback، وfuzzcheck كلها تضبطه).

if( pNode->iNode==0 && rc==SQLITE_OK ){
  pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
  nodeHashInsert(pRtree, pNode);
}
static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
  RtreeNode **pp;
  if( pNode->iNode!=0 ){
    pp = &pRtree->aHash[nodeHash(pNode->iNode)];
    for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
    *pp = pNode->pNext;
    pNode->pNext = 0;
  }
}

تبحث nodeAcquire في التجزئة قبل رفض iNode<=0. الإصابة على المدخل الصفري المحرَّر هي UAF. الفشل في العثور على iNode<=0 هو SQLITE_CORRUPT_VTAB، وهو مسار مختلف.

المنعطفات الخاطئة المسجلة بالفعل: اعتبار %_rowid last_insert_rowid 0 هو هذا الخطأ (ذلك يعيّن cell rowid 0، وليس hash UAF)؛ توقع SQLITE_CORRUPT_VTAB على هذا الإصدار (ذلك هو الإصلاح اللاحق)؛ ملء 50 خلية بحيث لا يوجد انقسام؛ زرع trigger وعدم إعادة الفتح؛ إخفاء lookaside للتحرير عن ASan؛ تسمية الانهيار RCE.

المختبر

cd lab
./run.sh

Amalgamation 3.53.4 مع -DSQLITE_ENABLE_RTREE=1 و-fsanitize=address. اختبار rtreeI.test المورّد 2.0-2.2: املأ 51 صفًا (RTREE_MAXCELLS)، وBEFORE INSERT RAISE(IGNORE) على %_node، وأعد فتح last_insert_rowid()==0، ثم INSERT الصف 52 (انقسام)، ثم SELECT *. انقسام التحكم بدون trigger يكون OK. اربط 127.0.0.1:18890. الأداة هي lab/harness.c.

control-split=ok
reopen-last-rowid=0
witness-before-split=SQLITE-RTREE-ROWID0-WITNESS
ERROR: AddressSanitizer: heap-use-after-free
READ of size 8 ... nodeHashLookup
freed by ... nodeRelease / SplitNode
SUCCESS sqlite-rtree-rowid0 how=asan-uaf-nodehash SQLITE-RTREE-ROWID0-WITNESS

الإصلاح

بعد sqlite3_last_insert_rowid()، إذا كان iNode لا يزال 0، أعد SQLITE_CORRUPT_VTAB ولا تقم بـ nodeHashInsert. يفعل branch-3.53 11ce330557 / Git 63b6d705 (2026-09-24) ذلك. يتوقع الاختبار "database disk image is malformed". هذا الإصدار GA لا يفعل.

المراجع

  • https://github.com/sqlite/sqlite وسم https://github.com/sqlite/sqlite/tree/version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • الأساسي https://sqlite.org/src SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • https://github.com/sqlite/sqlite/blob/version-3.53.4/ext/rtree/rtree.c nodeWrite، nodeHashDelete، nodeRelease، nodeAcquire، SplitNode
  • إصلاح branch-3.53 11ce330557 (2026-09-24، Claude / Ada Logics)
تنزيل الأداة