
SQLite 3.53.4 - उच्च - स्थानीय - विशेषाधिकार शेष - INSERT SELECT xfer स्रोत READ को छोड़ देता है
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-xfer-auth
Class: Privilege leftover Reach: Local
SQLite 3.53.4 (b09c88c, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) अभी भी INSERT INTO dest SELECT * FROM src के लिए xferOptimization fast path लेता है। sqlite3AuthCheck केवल dest पर SQLITE_INSERT है। कॉपी कभी भी src पर sqlite3Select या per-column sqlite3AuthRead को कॉल नहीं करती। SELECT * FROM src अस्वीकृत है। INSERT SELECT witness को कॉपी करता है। authorizer log INSERT:dest है।
Authorizer बंद रहता है जब तक embedder इसे इंस्टॉल न करे। RCE नहीं है। DRH ने Fossil d1cdb817 को 3.54 feature माना, 3.53 bugfix नहीं। 3.54.0 अभी भी draft है।
| ID | अभी तक कोई CVE नहीं |
| Class | Privilege leftover (READ-denied table copy) |
| Reach | Local (embedder sqlite3_set_authorizer) |
| CWE | CWE-863 |
| CVSS | High: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N |
| Product | SQLite (Hwaci) |
| Affected | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) |
| Auth | src पर READ/SELECT को DENY करने और dest पर INSERT की अनुमति देने वाले इंस्टॉल किए गए authorizer के विरुद्ध local SQL |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1:18850 |
जब dest schema-compatible हो और INSERT की अनुमति हो, तब INSERT INTO dest SELECT * FROM src तैयार करें। Raw B-tree records READ-denied source table को छोड़कर dest में पहुँच जाते हैं। केवल SELECT * FROM src SQLITE_AUTH है। xfer path SELECT को compile नहीं करता, इसलिए source SQLITE_SELECT, table-level SQLITE_READ, और per-column sqlite3AuthRead कभी trigger नहीं होते।
इसके लिए ऐसे embedder की आवश्यकता है जिसने untrusted-SQL / column ACL gate के रूप में sqlite3_set_authorizer इंस्टॉल किया हो। Default library में वह callback NULL होता है। RCE नहीं है।
इस GA पर अन्य leftovers की तरह ही वही 3.53.4 Crit/High hunt। Authorizer का दस्तावेज़ीकरण sqlite3_set_authorizer पर है। INSERT auth केवल dest-table पर है (insert.c:969)। xfer sqlite3Select() से पहले लिया जाता है (insert.c:1020-1038)। xferOptimization records को कॉपी करता है। इस pin पर insert.c की grep: एक sqlite3AuthCheck, कोई sqlite3AuthRead नहीं। SQLITE_OMIT_XFER_OPT default build flag नहीं है।
Forum 2026-05-21T03:31:22Z। Trunk d1cdb817cafd03a4 केवल 3.54 के लिए है। DRH: नया feature, branch-3.53 पर नहीं जाएगा।
cd lab
./run.sh
amalgamation 3.53.4 और lab/xfer_auth.c को build करता है। Compose sqlite-xfer-auth। Bind 127.0.0.1:18850। Oracle, in-process authorizer से JSON है: SELECT * FROM src अस्वीकृत; INSERT INTO dest SELECT * FROM src ठीक; dest में SQLITE-XFER-AUTH-WITNESS है; insert actions केवल 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
source को उसी तरह authorize करें जैसे 3.54 d1cdb817 करता है: यदि कोई authorizer registered है, तो xferOptimization को src पर SELECT/READ के लिए sqlite3AuthCheck करना चाहिए (या fast path से इनकार करके sqlite3Select पर fall through करना चाहिए)। तब तक, जो embedders किसी table पर READ को DENY करते हैं, उन्हें किसी भी compatible dest में INSERT को भी DENY करना होगा, या -DSQLITE_OMIT_XFER_OPT के साथ compile करना होगा।
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest, xferOptimization before sqlite3Select