Rust PHP Node.js Haskellなど複数のプログラミング言語に影響するWindows環境の引数エスケープ処理に関する脆弱性が発生

Rust PHP Node.js Haskell yt-dlpなど複数のプログラミング言語に影響するWindows環境の引数エスケープ処理に関する脆弱性(JVNVU#94343502)が発生しています。なお各プログラミング言語でパッチはリリース済みです。

脆弱性の概要

多くのプログラミング言語では、プログラム内からOS上でコマンドを実行する機能を提供しており、典型的な実装例としてはWindowsのCreateProcess()関数を通じて当該コマンドを実行します。
脆弱性報告者によれば、実行する対象がバッチファイルだった場合、CreateProcess()関数はcmd.exeにコマンドライン文字列を渡す形で当該バッチファイルを実行します。

しかし、多くのプログラミング言語のコマンド実行処理においては、コマンドに渡す引数データのエスケープ処理がcmd.exeに渡す場合を考慮した適切なものになっていません。

想定される影響

プログラムのなかで、ユーザーから受け取った入力を引数としてコマンドを実行している場合、細工された入力を処理することで、任意のコマンドを実行させられる可能性があります。

対象のプログラミング言語と脆弱性

以下が対象のプログラミング言語と脆弱性の詳細ですが、全てパッチがリリースされています。

Haskell[HSEC-2024-0003] process: command injection via argument list on Windows
Node.jsWednesday, April 10, 2024 Security Releases
RustSecurity advisory for the standard library (CVE-2024-24576)
`std::process::Command` did not properly escape arguments of batch files on Windows
PHPCommand injection via array-ish $command parameter of proc_open even if bypass_shell option enabled on Windows
yt-dlp`–exec` command injection when using `%q` in yt-dlp on Windows (CVE-2023-40581 bypass)
TOPへ