公開日:2024/04/15 最終更新日:2024/04/16

JVNVU#94343502
複数のプログラミング言語のWindows環境におけるコマンド実行処理において引数のエスケープ処理が適切でない問題

概要

複数のプログラミング言語において、Microsoft Windows環境でプログラム内からコマンドを実行する場合に、コマンドに渡す引数データのエスケープ処理が不適切であると指摘されています。

影響を受けるシステム

影響を受けるシステムについては、[ベンダ情報]およびCERT/CC VU#123335のVendor Informationを参照してください。

詳細情報

多くのプログラミング言語では、プログラム内からオペレーティングシステム上でコマンドを実行する機能を提供しており、典型的な実装例としてはWindowsのCreateProcess()関数を通じて当該コマンドを実行します。
報告者によれば、実行する対象がバッチファイルだった場合、CreateProcess()関数はcmd.exeにコマンドライン文字列を渡す形で当該バッチファイルを実行します。しかし、多くのプログラミング言語のコマンド実行処理においては、コマンドに渡す引数データのエスケープ処理がcmd.exeに渡す場合を考慮した適切なものになっていません。

想定される影響

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

対策方法

ランタイムをアップデートする
各言語の開発者が提供する情報をもとに、最新のランタイム環境に更新してください。

個別にプログラムを更新する
使用している言語のランタイム環境が本脆弱性に未対応の場合、ユーザーが入力した引数に対して適切なエスケープ処理や無効化を実施してください。

参考情報

  1. CERT/CC Vulnerability Note VU#123335
    Multiple programming languages fail to escape arguments properly in Microsoft Windows
  2. Flatt Security Inc.
    BatBadBut: You can't securely execute commands on Windows
  3. Microsoft Learn
    Everyone quotes command line arguments the wrong way

JPCERT/CCからの補足情報

JPCERT/CCによる脆弱性分析結果

謝辞

関連文書

JPCERT 緊急報告
JPCERT REPORT
CERT Advisory
CPNI Advisory
TRnotes
CVE
JVN iPedia

更新履歴

2024/04/16
有限会社 アップルップルのベンダステータスが更新されました