
SQLite 3.53.4 - उच्च - स्थानीय - हीप OOB राइट - सत्र चेंजसेट समान-नाम nCol वृद्धि
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
राइट-अप: https://abraxaslabs.tech/research/sqlite-session-ncol
वर्ग: heap OOB write पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) -DSQLITE_ENABLE_SESSION के साथ। एक दो-ब्लॉक changeset जो तालिका नाम t को nCol=2 फिर nCol=64 के साथ पुनः उपयोग करता है, sessionTableInfo रीसेट (sqlite3session.c:5619) को छोड़ देता है और पहले ब्लॉक के aUpdateMask से आगे memset कर देता है। sessionUpdateFind में आकार 12 का ASan WRITE। नियंत्रण: एकल 2-col UPDATE apply-rc=0।
यह डिफ़ॉल्ट amalgamation नहीं है जब तक SESSION चालू न हो। CVE-2026-50812 NPD 3.53.2+ पर बंद है। यह weaponized RCE payload नहीं है। oracle ASan WRITE है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | heap OOB write (आकार 12 का ASan WRITE; RCE प्रदर्शित नहीं) |
| पहुँच | स्थानीय (sqlite3changeset_apply* के माध्यम से अविश्वसनीय changeset) |
| CWE | CWE-787 |
| CVSS | उच्च: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| उत्पाद | SQLite Session extra (Hwaci) |
| प्रभावित | 3.53.4 (b09c88c) -DSQLITE_ENABLE_SESSION के साथ संकलित |
| प्रमाणीकरण | होस्ट एक अविश्वसनीय changeset लागू करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18900। आकार-12 के ASan WRITE का साक्ष्य। |
एक अविश्वसनीय changeset लागू करें जिसका दूसरा तालिका ब्लॉक बड़े nCol के साथ तालिका नाम का पुनः उपयोग करता है। heap OOB write। extra संकलित करें। यह डिफ़ॉल्ट amalgamation नहीं है जब तक SESSION चालू न हो।
पहला ब्लॉक pIter->nCol से aUpdateMask आवंटित करता है। बाद में आने वाला समान-नाम वाला ब्लॉक sessionTableInfo रीसेट को छोड़ देता है और पुराने आवंटन के ऊपर एक बड़े mask को memset कर देता है। लैब: nCol=2 फिर nCol=64 UPDATE। sessionUpdateFind में आकार 12 का ASan WRITE। नियंत्रण: एकल 2-col UPDATE apply-rc=0।
इस पैक को write-what-where gadget न मानें। आकार-12 का ASan WRITE ही oracle है।
3.53.2 FTS5 / session-NPD लहर के बाद SQLite 3.53.4 की बीस स्रोत खोजें। CVE-2026-50812 बंद है (sessionBindRow अनुपस्थित मान को SQLITE_CORRUPT मानता है)। Session अभी भी SessionApplyCtx को केवल तालिका नाम पर key करता है। समान नाम और बड़ी घोषित कॉलम संख्या वाला दूसरा ब्लॉक aUpdateMask का पुनः उपयोग करता है।
पहले से दर्ज गलत रास्ते: डिफ़ॉल्ट amalgamation को in-scope मानना (SESSION बंद है); CVE-2026-50812 को फिर से दर्ज करना; 2-col schema के विरुद्ध nCol=64 वाला एक तालिका ब्लॉक भेजना (schemaMismatch, कोई write नहीं); 12-बाइट memset से RCE का दावा करना।
cd lab
./run.sh
आधिकारिक sqlite-src-3530400 zip से ASan amalgamation। अतिरिक्त -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK के साथ संकलित करें। 127.0.0.1:18900 पर हेल्थ। इसे लूपबैक से बाइंड करें।
SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS
जब कोई बाद वाला changeset तालिका ब्लॉक किसी नाम का पुनः उपयोग करता है, तो SessionApplyCtx को उसी तरह पुनर्निर्मित करें जैसे कोई नया नाम पहले से करता है: aUpdateMask मुक्त करें, sessionTableInfo को फिर से चलाएँ, लाइव स्कीमा से बड़े nCol को अस्वीकार करें। Trunk 3f57024aec / branch-3.53 a1dd7123d8 (2026-08-17) इस GA के बाद है।
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619, sessionUpdateFind :4381-4412