
SQLite 3.53.4 - उच्च - स्थानीय - क्रैश - नेस्टेड CTE nNestSel व्यू-गहराई सीमा को छोड़ देते हैं
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cte-nest
राइट-अप: https://abraxaslabs.tech/research/sqlite-cte-nest
वर्ग: क्रैश पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci
sqlite3ResultSetOfSelect nNestSel को बढ़ाता है और जब श्रृंखला SQLITE_LIMIT_EXPR_DEPTH तक पहुँच जाती है तो VIEWs and/or subqueries nested too deep त्रुटि देता है। इस पिन पर नेस्टेड VIEWs पहले से ही उस सीमा तक पहुँच चुके हैं। select.c:5754 (sqlite3SrcItemAttachSubquery) पर CTE अटैच nNestSel को नहीं बढ़ाता। इसके बाद selectExpander / sqlite3WalkSelect CTE श्रृंखला को तब तक पुनरावर्तित करते हैं जब तक C स्टैक समाप्त नहीं हो जाता।
एक छोटी CTE श्रृंखला एक पंक्ति लौटाती है। N=25000 पर नेस्टेड FROM एक पार्सर Recursion limit है और क्रैश नहीं करता। .limit expr_depth 20 पर नेस्टेड VIEWs भी too-deep त्रुटि देते हैं। CTE N=25000 ASan स्टैक-ओवरफ़्लो है। RCE नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | क्रैश (selectExpander में ASan स्टैक-ओवरफ़्लो; 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); बाद के trunk CTE nNestSel का अवशेष |
| प्रमाणीकरण | अविश्वसनीय SQL या एक रोपित WITH श्रृंखला |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18810। ASan अमलगमेशन। क्रैश साक्षी। |
एक लंबी CTE श्रृंखला दें, SQL के रूप में या अविश्वसनीय .db पर VIEW बॉडी के रूप में:
WITH c0 AS (SELECT 1),
c1 AS (SELECT * FROM c0),
...
cN AS (SELECT * FROM cN-1)
SELECT * FROM cN;
selectExpander प्रत्येक CTE को एक nested FROM subquery के रूप में चलाता है। nNestSel कभी नहीं बढ़ता। होस्ट प्रोसेस C stack पर मर जाती है। Nested VIEWs पहले से सीमित हैं। Nested FROM parser की recursion limit तक पहुँच जाता है। यह बचा हुआ हिस्सा CTE attach path है। SQLite CTE नामों को shell में eval नहीं करता। Crash, RCE नहीं।
https://github.com/sqlite/sqlite टैग https://github.com/sqlite/sqlite/releases/tag/version-3.53.4 के बीस source hunts। इस pin (3f3fb9b638 / branch-3.53 38430aa5ed, 2026-06-16) पर Nested VIEWs सीमित थे। CTE attach सीमित नहीं था। Trunk f547308713 (2026-10-05) इस GA के बाद का है।
पहले से दर्ज गलत रास्ते: nested VIEWs को crash मानना (वे too-deep error देते हैं); nested FROM N=25000 को crash मानना (parser Recursion limit); 5-CTE chain को cap लागू होने का प्रमाण मानना।
cd lab
./run.sh
आधिकारिक sqlite-src-3530400 zip, ASan amalgamation, sqlite-cte-nest को compose करें, 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
CTE attach पर nNestSel को उसी तरह बढ़ाएँ जैसे 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 attach :5754src/walker.c sqlite3WalkSelectFrom subquery walkselectExpander / sqlite3SelectExpand2026-10-04T04:58:58Z; trunk f547308713