JPCERTコーディネーションセンター(JPCERT/CC: Japan Computer Emergency Response Team Coordination Center)は4月15日、「JVNVU#94343502: 複数のプログラミング言語のWindows環境におけるコマンド実行処理において引数のエスケープ処理が適切でない問題」において、Windows上で動作する複数のプログラミング言語に引数を適切にエスケープしない脆弱性が存在するとして、注意を喚起した。この脆弱性はアプリケーションのコマンドインジェクションにつながる可能性がある。
脆弱性に関する情報
脆弱性に関する情報は次のページにまとまっている。
- VU#123335 - Multiple programming languages fail to escape arguments properly in Microsoft Windows
- Windowsで動くプログラミング言語に脆弱性、引数の扱い方の穴を突いて攻撃 | TECH+(テックプラス)
脆弱性に関連した情報(CVE)は次のとおり。
- CVE-2024-1874 - PHPのproc_openにコマンドインジェクションの脆弱性
-
CVE-2024-22423 - yt-dlpにコマンドインジェクションの脆弱性。オプション「-exec %q」には不適切なエスケープ処理が存在する(参考:「
--exec
command injection when using%q
in yt-dlp on Windows (CVE-2023-40581 bypass) Advisory yt-dlp/yt-dlp GitHub」) - CVE-2024-24576 - RustのCommand APIに不適切なエスケープの脆弱性。Rustの開発者は適切にエスケープする方法はないと判断し、安全ではない引数を入力エラーとして処理する方法で対策した。この修正は悪意のない有効な引数をエラーとみなす可能性がある
- CVE-2024-27980 - Node.jsの「child_process.spawn」および「child_process.spawnSync」にコマンドインジェクションの脆弱性。攻撃者は悪意のあるコマンドライン引数を使用して任意のコマンドを実行する可能性がある
- CVE-2024-3566 - コマンドインジェクションの脆弱性。CreateProcess関数に間接的に依存するWindowsアプリケーションに影響する可能性がある
脆弱性の影響を受けるプログラミング言語
脆弱性の影響を受けるプログラミング言語およびバージョンは次のとおり。
- Haskell Programming Language processパッケージ バージョン1.0.0.0から1.6.19.0より前のバージョン
- Node.js 18.x
- Node.js 20.x
- Node.js 21.x
- Rust 1.77.2より前のバージョン
- PHP 8.1.28より前のバージョン
- PHP 8.2.18より前のバージョン
- PHP 8.3.5より前のバージョン
- yt-dlp バージョン2024.04.09より前のバージョン
脆弱性を修正したプログラミング言語
脆弱性を修正したプログラミング言語およびバージョンは次のとおり。
- Haskell Programming Language processパッケージ バージョン1.6.19.0
- Node.js 18.20.2
- Node.js 20.12.2
- Node.js 21.7.3
- Rust 1.77.2
- PHP 8.1.28およびこれ以降のバージョン
- PHP 8.2.18およびこれ以降のバージョン
- PHP 8.3.5およびこれ以降のバージョン
- yt-dlp バージョン2024.04.09
脆弱性の影響を受けないプログラミング言語
脆弱性の影響を受けないとされるプログラミング言語は次のとおり。
- Go Programming Language
上記以外のプログラミング言語は調査中であり、影響の有無は各言語の開発者に問い合わせる必要がある。影響を受ける言語を使用していてパッチが提供されていない場合、アプリケーションの開発者はアプリケーション側で必要なエスケープ処理を実装するか、または悪意のある処理を無効化する必要がある。JPCERT/CCはプログラミング言語開発者が提供する情報に基づいて開発環境のアップデートを推奨している。