ニュース

多くのプログラミング言語に危険な脆弱性 ~Windows環境の引数エスケープ処理に不備「Rust」「PHP」「Node.js」「Haskell」などに影響

脆弱性レポート(JVNVU#94343502)

 脆弱性ポータルサイト「JVN」は4月15日、脆弱性レポート(JVNVU#94343502)を公開した。複数のプログラミング言語において、Windows環境でプログラム内からコマンドを実行する際に行う引数データのエスケープ処理が不適切で、細工された入力があると任意のコマンドを実行させられてしまう可能性(コマンドインジェクション)があるという。

 多くのプログラミング言語ではプログラム内からOS上でコマンドを実行する機能を提供している。Windowsの場合は、一般にCreateProcess()関数を通じてコマンドが実行されるが、これがバッチファイル(*.bat/*.cmd)の場合は特殊で、OSではなくシェル(cmd.exe)で処理される。これを考慮していなかったり、考慮が不十分な場合、外部から悪意のあるコマンド引数を与えることができる恐れがあるようだ。

 この問題は、少なくとも以下のプログラミング言語で確認され、修正されている。

 「Rust」言語の場合、「cmd.exe」が複雑過ぎてすべてのケースで引数を正しくエスケープする解決策が見つからなかったとして、引数を安全にエスケープできない場合に「InvalidInput」(不正な入力)エラーを返すようになっているとのこと。このように、セキュリティアップデートによってライブラリの仕様が変わり、プログラムが動作不能になるケースがある点には注意したい。