
SQLite 3.53.4 - उच्च - स्थानीय - क्रैश - VALUES UNION ALL फ़ॉलबैक क्लीनअप स्टैक ओवरफ़्लो
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-values-union
लेख: https://abraxaslabs.tech/research/sqlite-values-union
वर्ग: क्रैश पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c) - Hwaci
डिफ़ॉल्ट VALUES एक को-रूटीन का उपयोग करता है। WITH (या स्कीमा रीलोड, या एक गैर-स्थिर पंक्ति) sqlite3MultiValues को UNION ALL पर बाध्य करता है। जब SF_Values सेट होता है तो कंपाउंड-SELECT लंबाई छोड़ दी जाती है (parse.y:562-567)। फिर पर्याप्त बड़ी पंक्ति सूची को SQLITE_LIMIT_EXPR_DEPTH द्वारा अस्वीकार कर दिया जाता है, और त्रुटि-सफ़ाई पथ पर पुनरावर्ती sqlite3ExprDeleteNN C स्टैक को उड़ा देता है।
5000 पंक्तियों का सादा VALUES ठीक है। WITH के साथ 1000 पंक्तियाँ साफ़-सुथरे ढंग से त्रुटि देती हैं (Expression tree is too large)। WITH के साथ 300000 पंक्तियाँ sqlite3ExprDeleteNN में ASan स्टैक-ओवरफ़्लो है (rc=134)। RCE नहीं।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | क्रैश (ExprDelete पर ASan स्टैक-ओवरफ़्लो; RCE प्रदर्शित नहीं) |
| पहुँच | स्थानीय (अविश्वसनीय SQL, या VIEW/TRIGGER के अंदर VALUES) |
| 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 |
| प्रभावित | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)। बाद के trunk VALUES कंपाउंड कैप का अवशेष। |
| प्रमाणीकरण | हमलावर का SQL, या एक रोपित स्कीमा जो UNION ALL फ़ॉलबैक लेता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18820। ASan अमालगमेशन। क्रैश साक्षी। |
ऐसा अविश्वसनीय SQL दें जिसे कोई होस्ट तैयार करेगा। एक विशाल VALUES सूची के आगे WITH लगाएँ ताकि को-रूटीन पथ बंद हो जाए। पार्स को अभिव्यक्ति-गहराई त्रुटि के साथ विफल होना चाहिए। उस ट्री की सफ़ाई sqlite3ExprDeleteNN में तब तक पुनरावर्तित होती है जब तक प्रक्रिया मर न जाए।
वही फ़ॉलबैक तब भी सक्रिय होता है जब VALUES किसी VIEW या TRIGGER में रहता है (db->init.busy)। होस्ट एम्बेडर है: एक CLI, एक ऐप जो हमलावर का SQL तैयार करता है, एक सेवा जो किसी शत्रुतापूर्ण .db को खोलती है। SQLite VALUES बाइट्स को कोड के रूप में eval नहीं करता। क्रैश ही निष्कर्ष है।
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 पंक्तियों की आवश्यकता थी ताकि डिस्ट्रक्टर की गहराई 8 MiB C स्टैक को उड़ा दे। सादा VALUES को-रूटीन पर रहता है और नकारात्मक नियंत्रण है।
cd lab
./run.sh
Canonical 3.53.4 स्रोत zip, ASan sqlite3। sqlite-values-union को कंपोज़ करें। 127.0.0.1:18820 प्रकाशित करें। इसे लूपबैक से बाइंड करें।
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 के बाद का है।
b09c88c14082339b66c7b7158d609a771e64ca69)2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bccsrc/parse.y:562-567 जब SF_Values सेट हो तो कंपाउंड-SELECT स्किपsrc/insert.c:681-704 sqlite3MultiValues UNION ALL फ़ॉलबैकsrc/expr.c:1406-1430 पुनरावृत्त sqlite3ExprDeleteNN