
SQLite 3.53.4 - उच्च - स्थानीय - हीप OOB राइट - सत्र चेंजसेट समान-नाम nCol वृद्धि
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
क्लास: heap OOB write रीच: Local
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) -DSQLITE_ENABLE_SESSION के साथ। एक दो-ब्लॉक चेंजसेट जो टेबल नाम t को nCol=2 और फिर nCol=64 के साथ पुनः उपयोग करता है, वह sessionTableInfo रीसेट (sqlite3session.c:5619) को स्किप कर देता है और पहले ब्लॉक aUpdateMask से आगे memset करता है। sessionUpdateFind में 12 साइज़ का ASan WRITE। सिंगल 2-कॉलम UPDATE एप्लाई-rc=0 पर नियंत्रण।
यह डिफ़ॉल्ट अमैल्गामेशन नहीं है जब तक SESSION ऑन न हो। CVE-2026-50812 NPD 3.53.2+ पर बंद है। यह एक हथियारबंद RCE पेलोड नहीं है। ओरैकल ASan WRITE है।
| आईडी | अभी कोई CVE नहीं |
| क्लास | heap OOB write (12 साइज़ का ASan WRITE; RCE प्रदर्शित नहीं किया गया) |
| रीच | Local (sqlite3changeset_apply* के माध्यम से अनट्रस्टेड चेंजसेट) |
| CWE | CWE-787 |
| CVSS | High: 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 |
| ऑथ | होस्ट एक अनट्रस्टेड चेंजसेट लागू करता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18900। 12 साइज़ के ASan WRITE की गवाही। |
एक अनट्रस्टेड चेंजसेट लागू करें जिसका दूसरा टेबल ब्लॉक एक बड़े nCol वाले टेबल नाम को पुनः उपयोग करता है। heap OOB write। एक्स्ट्रा कंपाइल करें। यह डिफ़ॉल्ट अमैल्गामेशन नहीं है जब तक SESSION ऑन न हो।
पहला ब्लॉक pIter->nCol से aUpdateMask आवंटित करता है। बाद का समान-नाम वाला ब्लॉक sessionTableInfo रीसेट को स्किप कर देता है और पुराने आवंटन पर एक बड़े मस्कोव memset करता है। लैब: nCol=2 फिर nCol=64 UPDATE। sessionUpdateFind में 12 साइज़ का ASan WRITE। सिंगल 2-कॉलम UPDATE एप्लाई-rc=0 पर नियंत्रण।
इस पैक को एक राइट-व्हाट-व्हेयर गैजेट के रूप में न मानें। 12 साइज़ का ASan WRITE ही ओरैकल है।
3.53.2 FTS5 / सेशन-NPD वेव के बाद SQLite 3.53.4 के बीस सोर्स हंट्स। CVE-2026-50812 बंद है (sessionBindRow एक गायब मान को SQLITE_CORRUPT मानता है)। सेशन अभी भी SessionApplyCtx को केवल टेबल नाम पर की करता है। समान नाम और बड़े घोषित कॉलम काउंट वाला दूसरा ब्लॉक aUpdateMask को पुनः उपयोग करता है।
गलत दिशाओं को पहले ही रिकॉर्ड किया जा चुका है: डिफ़ॉल्ट अमैल्गामेशन को इन-स्कोप मानना (SESSION बंद है); CVE-2026-50812 को फिर से फाइल करना; nCol=64 के साथ एक टेबल ब्लॉक भेजना 2-कॉलम स्कीमा के खिलाफ (schemaMismatch, कोई लिखना नहीं); 12-बाइट memset से RCE का दावा करना।
cd lab
./run.sh
आधिकारिक sqlite-src-3530400 ज़िप से ASan अमैल्गामेशन। एक्स्ट्रा कंपाइल करें -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
जब एक बाद का चेंजसेट टेबल ब्लॉक एक नाम को पुनः उपयोग करता है, तो SessionApplyCtx को उसी तरह रीबिल्ड करें जैसे एक नया नाम पहले ही करता है: aUpdateMask फ्री करें, sessionTableInfo फिर से चलाएं, लाइव स्कीमा से बड़े nCol को अस्वीकार करें। ट्रंक 3f57024aec / ब्रांच-3.53 a1dd7123d8 (2026-08-17) इस GA के बाद है।
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619, sessionUpdateFind :4381-4412