
SQLite 3.53.4 - عالي - محلي - انهيار - CTEs المتداخلة تتجاوز الحد الأقصى لعمق عرض nNestSel
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cte-nest
الفئة: انهيار الوصول: محلي
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69، SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci
تقوم sqlite3ResultSetOfSelect بزيادة nNestSel وإرجاع الخطأ VIEWs and/or subqueries nested too deep عندما تصل السلسلة إلى SQLITE_LIMIT_EXPR_DEPTH. إن الـ VIEWs المتداخلة على هذا الإصدار المثبّت تصل بالفعل إلى هذا الحد. ربط CTE عند select.c:5754 (sqlite3SrcItemAttachSubquery) لا يزيد nNestSel. بعد ذلك تقوم selectExpander / sqlite3WalkSelect بالاستدعاء الذاتي عبر سلسلة CTE حتى تنهار مكدس C.
سلسلة CTE صغيرة تُرجع صفًا. الـ FROM المتداخل عند N=25000 هو Recursion limit من المحلل ولا يسبب انهيارًا. الـ VIEWs المتداخلة عند .limit expr_depth 20 تُرجع خطأ too-deep. CTE عند N=25000 هو تجاوز مكدس ASan. ليس RCE.
| ID | لا يوجد CVE بعد |
| الفئة | انهيار (تجاوز مكدس ASan في selectExpander؛ لم يُثبت RCE) |
| الوصول | محلي (SQL غير موثوق أو مخطط CTE متداخل) |
| CWE | CWE-674 |
| 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 (b09c88c)؛ بقايا من CTE nNestSel في trunk اللاحق |
| المصادقة | SQL غير موثوق أو سلسلة WITH مزروعة |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1:18810 فقط. دمج ASan. شاهد الانهيار. |
تغذية سلسلة CTE طويلة، كـ SQL أو كجسم VIEW على .db غير موثوق:
WITH c0 AS (SELECT 1),
c1 AS (SELECT * FROM c0),
...
cN AS (SELECT * FROM cN-1)
SELECT * FROM cN;
تسير selectExpander عبر كل CTE كاستعلام فرعي FROM متداخل. لا يتحرك nNestSel أبدًا. تموت العملية المضيفة على مكدس C. الـ VIEWs المتداخلة محدودة بالفعل. الـ FROM المتداخل يصل إلى حد الاستدعاء الذاتي للمحلل. هذه البقايا هي مسار ربط CTE. لا تقوم SQLite بتقييم أسماء CTE إلى shell. انهيار، وليس RCE.
عشرون عملية بحث في الشيفرة المصدرية لـ https://github.com/sqlite/sqlite وسم https://github.com/sqlite/sqlite/releases/tag/version-3.53.4. كانت الـ VIEWs المتداخلة محدودة على هذا الإصدار المثبّت (3f3fb9b638 / branch-3.53 38430aa5ed، 2026-06-16). لم يكن ربط CTE كذلك. الـ trunk f547308713 (2026-10-05) يأتي بعد هذا الإصدار العام.
الطرق الخاطئة المسجلة بالفعل: اعتبار الـ VIEWs المتداخلة هي الانهيار (تُرجع خطأ too-deep)؛ اعتبار الـ FROM المتداخل N=25000 هو الانهيار (Recursion limit من المحلل)؛ اعتبار سلسلة من 5 CTE دليلًا على أن الحد ينطبق.
cd lab
./run.sh
ملف sqlite-src-3530400 الرسمي، دمج ASan، compose sqlite-cte-nest، منشور على 127.0.0.1:18810. اربطه بالـ loopback. لا توجّه هذا إلى SQLite الخاص بشخص آخر.
SUCCESS sqlite-cte-nest how=asan-stack-overflow crash-n=25000 small-cte=ok nested-views=too-deep nested-from=rejected SQLITE-CTE-NEST-WITNESS
زيادة nNestSel عند ربط CTE بالطريقة التي تفعلها sqlite3ResultSetOfSelect بالفعل مع الـ VIEWs، وإرجاع خطأ عند SQLITE_LIMIT_EXPR_DEPTH. الـ trunk f547308713 (2026-10-05، "Limit the depth of recursion for CTEs using SQLITE_LIMIT_EXPR_DEPTH") هو من هذه الفئة من التصحيحات. إنه ليس في 3.53.4.
b09c88c14082339b66c7b7158d609a771e64ca69)2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bccsrc/select.c sqlite3ResultSetOfSelect (nNestSel++)، ربط CTE :5754src/walker.c sqlite3WalkSelectFrom مسار الاستعلام الفرعيselectExpander / sqlite3SelectExpand2026-10-04T04:58:58Z؛ trunk f547308713