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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
sqlite-values-union — SQLite 3.53.4 - عالي - محلي - انهيار - VALUES UNION ALL fallback cleanup stack overflow | Kitploit
أدوات/GitHubGitHub/abraxas/sqlite-values-union
تحليل الثغرات الأمنيةالاستغلالالاختبار العشوائيتحليل الملفات الثنائيةالأوراق والأبحاثأمن قواعد البياناتمختبرات وتدريب عملي
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 - عالي - محلي - انهيار - VALUES UNION ALL fallback cleanup stack overflow

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

الأكثر شعبية

عرض الكل →

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

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

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

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

Abraxas Labs - sqlite-values-union

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

المقال التقني: https://abraxaslabs.tech/research/sqlite-values-union

sqlite-values-union

الفئة: انهيار النطاق: محلي

SQLite 3.53.4 (b09c88c) - Hwaci

يستخدم VALUES الافتراضي روتينًا مشتركًا (co-routine). أما WITH (أو إعادة تحميل المخطط، أو صف غير ثابت) فيجبر sqlite3MultiValues على استخدام UNION ALL. يتم تخطي فحص طول SELECT المركّب عند تعيين SF_Values (parse.y:562-567). عندئذٍ تُرفض قائمة الصفوف الكبيرة بما يكفي بواسطة SQLITE_LIMIT_EXPR_DEPTH، وتُفجّر الدالة العودية sqlite3ExprDeleteNN مكدس C في مسار تنظيف الأخطاء.

VALUES العادي المكوّن من 5000 صف لا مشكلة فيه. أما WITH مع 1000 صف فيُنتج خطأً نظيفًا (Expression tree is too large). وWITH مع 300000 صف يُنتج تجاوزًا لمكدس ASan في sqlite3ExprDeleteNN (rc=134). ليس RCE.

المعرّفلا يوجد CVE بعد
الفئةانهيار (تجاوز مكدس ASan في ExprDelete؛ لم يُثبت RCE)
النطاقمحلي (SQL غير موثوق، أو VALUES داخل VIEW/TRIGGER)
CWECWE-674
CVSSمرتفع: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
المنتجSQLite
المتأثر3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc). بقايا حدّ VALUES المركّب في الفرع الرئيسي اللاحق.
المصادقةSQL من المهاجم، أو مخطط مزروع يأخذ مسار UNION ALL الاحتياطي
الترخيصGNU Affero GPL v3.0
المختبر127.0.0.1:18820 فقط. دمج ASan. دليل الانهيار.

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

تغذية SQL غير موثوق سيُحضّره مضيف. أضف بادئة WITH إلى قائمة VALUES ضخمة حتى يُعطّل مسار الروتين المشترك. يُفترض أن يفشل التحليل بخطأ عمق التعبير. لكن تنظيف تلك الشجرة يتكرر في sqlite3ExprDeleteNN حتى تموت العملية.

ينطلق المسار الاحتياطي نفسه عندما تكون VALUES داخل VIEW أو TRIGGER (db->init.busy). المضيف هو المُضمِّن: واجهة سطر أوامر، أو تطبيق يحضّر SQL المهاجم، أو خدمة تفتح ملف .db خبيثًا. لا تُقيّم SQLite بايتات VALUES كشيفرة. الانهيار هو النتيجة.

كيف وجدته

عشرون عملية بحث في المصدر لوسم github.com/sqlite/sqlite version-3.53.4. قائمة التخطي أغلقت بالفعل CVE-2026-11824، وsession NPD، وconcat_ws، وLOOKASIDE، وJSON UAF، وWAL-reset. load_extension الافتراضي معطّل. كانت بقايا المحلل/VDBE هي هذا التخطي لـ VALUES UNION ALL بالإضافة إلى مُدمِّر عودي.

if( (p->selFlags & (SF_MultiValue|SF_Values))==0
 && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0
 && cnt>mxSelect
){
  sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
}
if( pParse->bHasWith
 || pParse->db->init.busy
 || exprListIsConstant(pParse,pRow)==0
 ...
){
  /* The co-routine method cannot be used. Fall back to UNION ALL. */
  ...
  pSelect->op = TK_ALL;
  pSelect->pPrior = pLeft;
}

clearSelect() يمشي عبر pPrior بشكل تكراري. لا يزال sqlite3ExprDeleteNN() يعاود الاستدعاء الذاتي على pRight وعلى pLeft عندما يكون EP_Static مضبوطًا.

المنعطفات الخاطئة: 1000 صف مع WITH يفشل بشكل نظيف عند حد العمق الموثّق ولا ينهار؛ احتجنا إلى 300000 صف حتى يتجاوز عمق المُدمِّر مكدس C البالغ 8 MiB. تبقى VALUES العادية على الـ co-routine وهي الضابط السلبي.

المختبر

cd lab
./run.sh

ملف zip المصدر الأساسي 3.53.4، sqlite3 مع ASan. تركيبة sqlite-values-union. منشور على 127.0.0.1:18820. اربطه بواجهة loopback.

SUCCESS sqlite-values-union how=with-values-union-all-fallback-exprdelete rows=300000 crash=asan-stack-overflow plain=5000 depth-error=1000 SQLITE-VALUES-UNION-WITNESS

الإصلاح

طبّق SQLITE_LIMIT_COMPOUND_SELECT على VALUES بالطريقة نفسها التي تُحدَّد بها المركّبات الأخرى. امشِ عبر سلسلة UNION ALL بشكل تكراري عند الحذف، أو حدّد EXPR_DEPTH قبل بناء الشجرة حتى لا يتمكن التنظيف من التكرار خارج مكدس C. الفرع الرئيسي اللاحق (Bug 2026-10-04T05:34:47Z) يأتي بعد هذا الإصدار GA.

المراجع

  • sqlite.org/src وسم version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 تخطي compound-SELECT عند تعيين SF_Values
  • src/insert.c:681-704 احتياطي UNION ALL في sqlite3MultiValues
  • src/expr.c:1406-1430 الاستدعاء التكراري لـ sqlite3ExprDeleteNN
  • sqlite.org/cves.html · sqlite.org/security.html
تنزيل الأداة