abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cli-go
分類: コマンドインジェクション 到達範囲: ローカル
SQLite 3.53.4 (b09c88c) のデフォルト sqlite3 CLI は、依然として SQL Server の go と Oracle の / をステートメント終端として扱う。line_is_command_terminator はその行を ; に書き換える。SQL バッファが空の状態で次の行が来ると do_meta_command になるため、.shell / .output / .read がオペレータの UID で実行される。
--safe は依然として .shell をブロックする。この制御は有効である。デフォルトの sqlite3 は --safe を有効にしない。libsqlite3 ではない。Oracle は witness 文字列の echo である。
| ID | CVE 未割当 |
| 分類 | コマンドインジェクション (CLI の go / / 終端の後に後続のドットコマンド) |
| 到達範囲 | ローカル (被害者が --safe なしで攻撃者の SQL/スクリプトに対してデフォルトの sqlite3 を実行する。UI:R) |
| CWE | CWE-78 |
| CVSS | High: 7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 製品 | SQLite (sqlite3 CLI) |
| 影響を受けるバージョン | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| 認証 | 被害者がデフォルトの sqlite3 にスクリプトを渡す。--safe なし |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18920 のみ。Witness SQLITE-CLI-GO-WITNESS。 |
オペレータが --safe なしで sqlite3 に渡したスクリプト内で SQL が終端されていない場合、go または / の行の後に .shell / .output / .read がオペレータの UID で実行される。
セミコロンはすでにステートメントを終端する。残るのは ; を持たない終端 SQL であり、ステートメントがまだ開いていると判断したラッパーは次のドットコマンドを実行してしまう。.shell は system() である。ラボのオラクルは witness の echo である。リバースシェルではない。
OpenLiteSpeed の後、3.53.4 のソースを 20 回調査した。最新の GA であり、3.54.0 のドラフトではない。CLI の追加機能はデフォルトライブラリではない。--safe は信頼できないスクリプトに対する文書化されたシンクである (CVE-2022-46908)。依然として .shell をブロックする。デフォルトの sqlite3 はこれを有効にしない。
src/shell.c.in には依然として SQL Server / Oracle 互換パスが存在する。トランク ac6ac0c22d (2026-10-08) は SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR がない限りこれを無効化する。このチェックインは本 GA より後である。
すでに記録済みの誤った道: セミコロンを同じ残り物として扱うこと、CVE-2022-46908 を再申請すること、--safe がデフォルトであると期待すること、これを libsqlite3 の RCE と呼ぶこと、オラクルとしてリバースシェルを使うこと、3.54.0 (ドラフト) にピン留めすること。
cd lab
./run.sh
公式の sqlite-src-3530400 をデフォルトの Unix sqlite3 (--disable-readline) にビルドする。Compose sqlite-cli-go。127.0.0.1:18920 上のダミー TCP。デフォルト CLI は go と / を終端として扱い、その後 .shell echo SQLITE-CLI-GO-WITNESS を実行した。--safe は cannot run .shell in safe mode を出力した。ループバックにバインド。
SUCCESS sqlite-cli-go how=go-then-dot-shell slash=yes safe=blocked SQLITE-CLI-GO-WITNESS
go と / を終端として扱うのをやめること。これはトランク ac6ac0c22d が -DSQLITE_SHELL_LEGACY_COMMAND_TERMINATOR がない限り行っていることである。それまでは、信頼できないスクリプトを --safe で実行すること。--safe は依然として有効な制御である。
b09c88c14082339b66c7b7158d609a771e64ca69)src/shell.c.in line_is_command_terminator、process_input の書き換え、do_meta_command、failIfSafeMode 後の .shell system()--safe--safe