注目github_advisory2分
shell-quote CVE-2026-9277: quote()が改行文字をエスケープしない脆弱性
30秒で把握
- 1CVE-2026-9277: shell-quoteのquote()が改行文字をエスケープせずコマンドインジェクション可能
- 2悪用経路は直接オブジェクト構築とenvFn戻り値の2経路・いずれも公開APIの正規利用
- 3quote()はシェル安全境界として設計されていたが前提が崩れ、影響範囲はオブジェクトトークン利用者
要約
shell-quoteライブラリの`quote()`関数にシェルコマンドインジェクション脆弱性(CVE-2026-9277)が確認された。オブジェクトトークンの`.op`フィールドをエスケープする処理が`/(.)/g`正規表現を使用しており、JavaScriptでは改行文字(`\n`・`\r`・U+2028・U+2029)が一致しないため、これらがエスケープされずに出力へ通過する。POSIXシェルはリテラルの`\n`をコマンド区切りとして扱うため、`.op`値に改行を含む攻撃者制御のオブジェクトを`quote()`に渡すと、後続の任意コマンドが実行される。悪用経路は「直接構築したオブジェクトトークンを渡す」か「`envFn`の戻り値として悪意あるオブジェクトを注入する」の2つで、いずれも公開APIの正規の使用方法に該当する。
あなたへの影響
shell-quoteを使って外部入力をシェルコマンドに組み込んでいるNode.jsプロジェクトは、`quote()`にオブジェクトトークンを渡す箇所を優先的にコードレビューし、修正済みバージョンへの更新を次スプリントで対応することを推奨する。
推奨:`envFn`経由でオブジェクトを生成している場合も攻撃経路になり得るため、入力検証の実装状況も合わせて確認すること。