
SQLite 3.53.4 sqlite3_rsync - 高 - リモート - RCE - SSH ファイル名コマンドインジェクション
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-rsync-ssh
分類: RCE (コマンドインジェクション) 到達性: リモート (UI:R)
SQLite 3.53.4 (b09c88c) の sqlite3_rsync は、ローカルの /bin/sh -c 向けに USER@HOST:PATH をクォートする。その後 OpenSSH は、リモートの argv をログインシェル向けにクォートなしでスペース結合する。PATH 内のセミコロン、$()、バッククォート、または | は、SSH リモート UID として実行される。libsqlite3 ではなくユーティリティである。Ada Logics の readPow2 x>16 スタックスマッシュは、このピンでは修正済みである。
| ID | CVE 未割当 |
| 分類 | RCE (SSH リモート UID としてのコマンドインジェクション) |
| 到達性 | リモート (被害者が sqlite3_rsync を実行; UI:R) |
| CWE | CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| 製品 | SQLite sqlite3_rsync ユーティリティ |
| 影響を受けるバージョン | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) |
| 認証 | 被害者が悪意ある USER@HOST:PATH を指定して sqlite3_rsync を実行する |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18910 のみ。エコーによる証跡。リバースシェルなし。 |
sqlite3_rsync USER@HOST:PATH のリモートパスに ;、$()、バッククォート、または | を入れる。被害者はこのユーティリティを実行する必要がある (UI:R)。追加コマンドは SSH リモート UID として実行される。
append_escaped_arg(..., 1) はローカルの /bin/sh -c 向けにシングルクォートで囲む。これらのクォートはローカルで消費される。OpenSSH は残りの argv を 1 つのリモートコマンド文字列に連結する。ログインシェルはメタ文字をクォートなしで受け取る。
これは libsqlite3 ではない。デフォルトの sqlite3.c はこのプロトコルを同梱していない。Ada Logics のレプリカスタックスマッシュ (readPow2 指数上限) は 3.53.4 で既に修正済みである。
3.53.2 の FTS5 / session の波の後、SQLite タグ version-3.53.4 を 20 回ソース探索した。デフォルトライブラリには依然として他の残存物がある (このパックは rsync ユーティリティである)。tool/sqlite3_rsync.c の popen2 は /bin/sh -c を exec する。hostSeparator は最初のコロンで分割する。append_escaped_arg の戻り値は決してチェックされない。
誤った道: Ada Logics のスタックスマッシュをまだ未修正とみなすこと、リバースシェルをラボで試すこと、実際の sshd と通信すること、ドラフト 3.54.0 にピンすること、これをライブラリの RCE と呼ぶこと。
cd lab
./run.sh
公式の 3.53.4 ソース zip から sqlite3_rsync をビルドする。偽の OpenSSH が dest の後に argv を結合する。Origin は lab@host:;echo SQLITE-RSYNC-SSH-WITNESS>/work/sandbox/pwned.txt。リモートコマンドにはクォートされていない ;echo があった。ループバックにバインドする。
SUCCESS sqlite-rsync-ssh how=openssh-argv-join dest=lab@host remote-has-semicolon=yes SQLITE-RSYNC-SSH-WITNESS
この GA の後、trunk b0db2db (2026-10-07, ANT-2026-31X9HVRR) が行うように、ピアへ送信するファイル名を hex エンコードする (isFilename==2 / --encoded-filenames)。USER@HOST と --ssh はローカル sh のクォートのままとする。ローカルのシングルクォートが OpenSSH の argv 結合を生き延びることに依存してはならない。
b09c88c14082339b66c7b7158d609a771e64ca69)append_escaped_arg、popen2、リモート ORIGIN/REPLICA SSH argvb0db2db / Fossil eaec2f7f (2026-10-07)