abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · 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 は witness をコピーする。authorizer ログは INSERT:dest である。
authorizer は、embedder がインストールしない限りオフである。RCE ではない。DRH は Fossil d1cdb817 を 3.53 のバグ修正ではなく 3.54 の機能として扱った。3.54.0 はまだドラフトである。
| ID | CVE 未割当 |
| 分類 | 権限の取りこぼし (READ 拒否テーブルのコピー) |
| 到達範囲 | ローカル (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 |
| 製品 | SQLite (Hwaci) |
| 影響を受けるバージョン | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) |
| 認証 | src に対する READ/SELECT を拒否し dest への INSERT を許可する、インストール済み authorizer に対するローカル SQL |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18850 のみ |
dest がスキーマ互換で INSERT が許可されている場合に、INSERT INTO dest SELECT * FROM src を準備する。生の B-tree レコードが READ 拒否されたソーステーブルを離れ、dest に着地する。素の SELECT * FROM src は SQLITE_AUTH となる。xfer パスは SELECT をコンパイルしないため、ソースの SQLITE_SELECT、テーブルレベルの SQLITE_READ、および列単位の sqlite3AuthRead は決して発火しない。
信頼できない SQL / 列 ACL ゲートとして sqlite3_set_authorizer をインストールした embedder が必要である。デフォルトのライブラリではこのコールバックは NULL である。RCE ではない。
この GA における他の取りこぼしと同じ 3.53.4 の Crit/High ハントである。authorizer は sqlite3_set_authorizer に文書化されている。INSERT の認証は dest テーブルのみである (insert.c:969)。xfer は sqlite3Select() より前に取られる (insert.c:1020-1038)。xferOptimization はレコードをコピーする。このピンでの insert.c の grep: sqlite3AuthCheck が 1 つ、sqlite3AuthRead はなし。SQLITE_OMIT_XFER_OPT はデフォルトのビルドフラグではない。
フォーラム 2026-05-21T03:31:22Z。トランク d1cdb817cafd03a4 は 3.54 専用である。DRH: 新機能であり、branch-3.53 には入れない。
cd lab
./run.sh
amalgamation 3.53.4 と lab/xfer_auth.c をビルドする。Compose sqlite-xfer-auth。127.0.0.1:18850 にバインドする。オラクルはインプロセス authorizer からの JSON である: SELECT * FROM src は拒否; INSERT INTO dest SELECT * FROM src は ok; 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 にフォールスルーする)。それまでは、あるテーブルに対する READ を拒否する embedder は、互換性のある dest への INSERT も拒否するか、-DSQLITE_OMIT_XFER_OPT でコンパイルしなければならない。
b09c88c14082339b66c7b7158d609a771e64ca69)src/insert.c sqlite3AuthCheck INSERT dest、sqlite3Select より前の xferOptimization