
SQLite 3.53.4 - उच्च - स्थानीय - विशेषाधिकार शेष - INSERT SELECT xfer स्रोत READ को छोड़ देता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-xfer-auth
राइट-अप: https://abraxaslabs.tech/research/sqlite-xfer-auth
वर्ग: विशेषाधिकार अवशेष पहुँच: स्थानीय
SQLite 3.53.4 (b09c88c, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) अभी भी INSERT INTO dest SELECT * FROM src के लिए xferOptimization तेज़ पथ अपनाता है। sqlite3AuthCheck केवल dest पर SQLITE_INSERT है। प्रतिलिपि कभी भी src पर sqlite3Select या प्रति-कॉलम sqlite3AuthRead को कॉल नहीं करती। SELECT * FROM src अस्वीकृत है। INSERT SELECT साक्षी की प्रतिलिपि बनाता है। प्राधिकरण लॉग INSERT:dest है।
प्राधिकरण बंद रहता है जब तक एम्बेडर इसे स्थापित न करे। RCE नहीं है। DRH ने Fossil d1cdb817 को 3.54 सुविधा माना, 3.53 बगफिक्स नहीं। 3.54.0 अभी भी ड्राफ्ट है।
| ID | अभी तक कोई CVE नहीं |
| वर्ग | विशेषाधिकार अवशेष (READ-अस्वीकृत तालिका प्रतिलिपि) |
| पहुँच | स्थानीय (एम्बेडर sqlite3_set_authorizer) |
| CWE | CWE-863 |
| CVSS | उच्च: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| उत्पाद | SQLite (Hwaci) |
| प्रभावित | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) |
| प्रमाणीकरण | स्थापित प्राधिकरण के विरुद्ध स्थानीय SQL जो src पर READ/SELECT को DENY करता है और dest पर INSERT की अनुमति देता है |
| लाइसेंस | GNU Affero GPL v3.0 |
| लैब | केवल 127.0.0.1:18850 |
INSERT INTO dest SELECT * FROM src तैयार करें जब dest स्कीमा-संगत हो और INSERT की अनुमति हो। कच्चे B-tree रिकॉर्ड READ-अस्वीकृत स्रोत तालिका से निकलकर dest में पहुँच जाते हैं। केवल SELECT * FROM src SQLITE_AUTH है। xfer पथ SELECT को संकलित नहीं करता, इसलिए स्रोत SQLITE_SELECT, तालिका-स्तरीय SQLITE_READ, और प्रति-कॉलम sqlite3AuthRead कभी सक्रिय नहीं होते।
इसके लिए ऐसे एम्बेडर की आवश्यकता है जिसने अविश्वसनीय-SQL / कॉलम ACL गेट के रूप में sqlite3_set_authorizer स्थापित किया हो। डिफ़ॉल्ट लाइब्रेरी में वह कॉलबैक NULL होता है। RCE नहीं है।
इस GA पर अन्य अवशेषों की तरह ही 3.53.4 Crit/High खोज। प्राधिकरण का दस्तावेज़ीकरण sqlite3_set_authorizer पर है। INSERT प्रमाणीकरण केवल dest-तालिका के लिए है (insert.c:969)। xfer sqlite3Select() से पहले लिया जाता है (insert.c:1020-1038)। xferOptimization रिकॉर्ड की प्रतिलिपि बनाता है। इस पिन पर insert.c का grep: एक sqlite3AuthCheck, कोई sqlite3AuthRead नहीं। SQLITE_OMIT_XFER_OPT डिफ़ॉल्ट बिल्ड फ़्लैग नहीं है।
फ़ोरम 2026-05-21T03:31:22Z। ट्रंक d1cdb817cafd03a4 केवल 3.54 के लिए है। DRH: नई सुविधा, branch-3.53 पर नहीं जाएगी।
cd lab
./run.sh
lab/xfer_auth.c के साथ amalgamation 3.53.4 का निर्माण करता है। sqlite-xfer-auth को कंपोज़ करें। 127.0.0.1:18850 को बाइंड करें। Oracle, इन-प्रोसेस authorizer से प्राप्त JSON है: SELECT * FROM src अस्वीकृत; INSERT INTO dest SELECT * FROM src ठीक; dest में SQLITE-XFER-AUTH-WITNESS है; insert क्रियाएँ केवल INSERT:dest हैं।
SUCCESS sqlite-xfer-auth how=xfer-opt-skip-src-read select-src=denied insert-select=ok dest-has-witness=yes SQLITE-XFER-AUTH-WITNESS
स्रोत को उसी तरह अधिकृत करें जैसे 3.54 d1cdb817 करता है: यदि कोई authorizer पंजीकृत है, तो xferOptimization को src पर SELECT/READ के लिए sqlite3AuthCheck करना होगा (या फ़ास्ट पाथ से इनकार करके sqlite3Select पर गिरना होगा)। तब तक, जो embedder किसी तालिका पर READ को DENY करते हैं, उन्हें किसी भी संगत dest में INSERT को भी DENY करना होगा, या -DSQLITE_OMIT_XFER_OPT के साथ कंपाइल करना होगा।
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest, sqlite3Select से पहले xferOptimization