つみかさね

CVE-2026-9277

High(8.1)

shell-quoteのコマンドインジェクション CVE-2026-9277:影響範囲と対応方法

公開日: 2026-08-01データソース: NVD, GitHub Advisory

影響を受けるソフトウェア

製品ベンダー影響バージョン
shell-quoteljharbセキュリティ修正が入る前のバージョン

対応ガイド

high|推奨セキュリティ修正影響: 限定的

推奨アクション

  1. 1npm ls shell-quote で依存ツリーに含まれるか確認する
  2. 2shell-quote を修正版へアップデートする
  3. 3外部入力を quote() のオブジェクトトークンとして渡していないか設計を確認する

影響対象

shell-quote で外部入力からコマンドを組み立てるNode.jsアプリ開発者

対応不要な人

  • shell-quote を利用していない
  • quote() に外部入力由来のオブジェクトトークンを渡していない
  • 既に修正版へ更新済み

補足

  • -直接依存していなくても推移的依存として含まれる場合があるため、依存ツリー全体を確認してください
CVEshell-quotenpmコマンドインジェクションNode.js

30秒で判断

  • 対応すべき人: shell-quote を使って、外部入力(ユーザー入力・外部データ)からシェルコマンド文字列を組み立てているNode.jsアプリの開発者
  • 対応不要な人: shell-quote を利用していない/quote() にオブジェクトトークンを外部入力から渡していない場合
  • 確認コマンド: npm ls shell-quote(依存ツリーに含まれるか確認)

概要

shell-quote はコマンドライン文字列のクォート/パースを行う、広く使われるnpmパッケージです。CVE-2026-9277 は、quote() 関数がオブジェクトトークンの入力を parse() のオペレータモデルに照らして検証していなかったことに起因します。

.op フィールドは1文字ずつバックスラッシュでエスケープされていましたが、この処理(/(.)/g)はJavaScriptの仕様上、改行類(\n, \r, U+2028, U+2029)にマッチしません。そのため .op に改行が含まれると、エスケープされないまま出力へ通過します。POSIXシェルは生の改行をコマンド区切りとして扱うため、改行以降の内容が別コマンドとして実行され得ます。

この経路は、(1) 外部入力から { op: '...\n...' } を直接構築する場合、(2) parse(cmd, envFn)envFn が攻撃者の影響下にある .op を持つオブジェクトトークンを返す場合、の2通りで到達可能です。

CVSSベクトル

項目
CVSSスコア8.1(High)
攻撃区分入力経路に依存(外部入力がコマンド組み立てに流れる構成)
想定影響コマンドインジェクション(意図しないコマンド実行)
CWECWE-77 / CWE-78(コマンドインジェクション)

影響を受けるソフトウェア

パッケージエコシステム影響バージョン
shell-quotenpmセキュリティ修正が入る前のバージョン
  • shell-quote は多くのツールの推移的依存として含まれることが多く、直接利用していなくても依存ツリーに存在する場合があります。

修正バージョンと回避策

  • 修正では、1文字エスケープを厳格な形状検証に置き換え、.op はパーサの制御オペレータ許可リストに一致する必要があり、改行類を含むトークンは TypeError を投げるようになりました。
  • 対応: shell-quote を修正版(アドバイザリ GHSA-w7jw-789q-3m8p 記載のバージョン)へアップデートしてください。あわせて、外部入力を quote() のオブジェクトトークンとして渡さない設計を推奨します。

関連リンク


データソース: NVD (NIST), GitHub Advisory Database AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。

Xでシェアはてブ
データソース: NVD (NIST), OSV (Google), GitHub Advisory Database, JVN iPedia (IPA/JPCERT/CC)
AI解説は Claude API により自動生成されています。正確性については原文をご確認ください。