Windows環境でコマンドインジェクションを引き起こす脆弱性、複数のプログラミング言語に影響:攻撃の成立条件は限定的
Flatt Securityは、複数のプログラミング言語に存在する、Windows環境でコマンドインジェクションを引き起こす脆弱性に関する解説を公式ブログの英語版で公開した。
サイバーセキュリティ関連サービスを手掛ける日本のFlatt Securityは2024年4月9日、複数のプログラミング言語に存在する、Windows環境でコマンドインジェクションを引き起こす脆弱(ぜいじゃく)性に関する解説を公式ブログの英語版で公開した。
それによると、この脆弱性は、特定の条件が満たされた場合に、「CreateProcess」関数に間接的に依存するWindowsアプリケーションに対して攻撃者がコマンドインジェクションを実行できるというものだ。
同社はこの脆弱性を「BatBadBut」と呼んでいる。バッチファイル(BATch files)に関する脆弱性であり、悪い(BAD)ものだが(BUT)、最悪ではないからだ。
Flatt Securityはこの脆弱性について既に各言語の開発元に報告しており、この脆弱性に関するアドバイザリーが各開発元から公開されたことを受け、解説記事を公開した。
Flatt Securityは、BatBadButの概要、アプリケーションが影響を受けるかどうかを判断するためのフローチャート、影響を受けるプログラミング言語の状況、ユーザーに可能な緩和策を次のように解説した。
BatBadButの概要
CreateProcess関数は、バッチファイル(.bat、.cmdなど)を実行する際に、アプリケーションがコマンドラインで指定していなくても、暗黙的に「cmd.exe」を起動する。
だが、cmd.exeにはコマンド引数の複雑な解析ルールがあり、そのためにプログラミング言語のランタイムがコマンド引数を適切にエスケープしない場合があるという問題がある。
そのため、誰かがバッチファイルのコマンド引数の部分をコントロールできれば、コマンドを注入可能になる。
以下の単純なNode.jsのコードスニペットは、サーバマシン上でcalc.exeを起動する可能性がある。
これは、CreateProcess関数に渡されるコマンドラインにバッチファイルが明示的に指定された場合にのみ発生する。.exeファイルが指定された場合には発生しない。
だが、Windowsでは、既定で環境変数PATHEXTに.batや.cmdファイルが含まれているため、一部のランタイムは、開発者が実行しようとしたコマンドと同じ名前のバッチファイルがあると、開発者の意図に反してバッチファイルを実行してしまう。そのため、以下のスニペットも、.batや.cmdを明示的に含んでいないにもかかわらず、任意のコマンドの実行につながる可能性がある。
これらの挙動を悪用することは、以下の条件が満たされた場合に可能になる。
- アプリケーションがWindows上でコマンドを実行する
- アプリケーションがコマンドのファイル拡張子を指定しないか、またはファイル拡張子が.batまたは.cmdである
- 実行されるコマンドがコマンド引数の一部として、ユーザーが制御する入力を含んでいる
- プログラミング言語のランタイムがcmd.exeのコマンド引数を適切にエスケープしない
これらの挙動を悪用すれば、任意のコマンド実行が可能になるかもしれない。
アプリケーションが影響を受けるかどうかを判断するためのフローチャート
アプリケーションがBatBadButの脆弱性の影響を受けるかどうかを判断するためのフローチャートは、以下の通り。これは、この脆弱性を悪用した攻撃が成立する条件である上記の項目を踏まえたものだ。
影響を受けるプログラミング言語の状況
BatBadButの脆弱性の影響を受けるプログラミング言語の状況は以下の通り。
- Erlang:ドキュメントが更新されている
- Go:ドキュメントが更新されている
- Haskell:パッチが利用可能
- Java:修正しない
- Node.js:パッチが利用可能
- PHP:パッチが利用可能
- Python:ドキュメントが更新されている
- Ruby:ドキュメントが更新されている
- Rust:パッチが利用可能
ユーザーに可能な緩和策
バッチファイルの予期せぬ実行を防ぐには、環境変数PATHに含まれないディレクトリにバッチファイルを移動することを検討すべきだ。
そうすれば、フルパスが指定されない限りバッチファイルは実行されないので、バッチファイルの予期せぬ実行を防ぐことができる。
BatBadButの脆弱性の評価
CERT Coordination Center(CERT/CC)は2024年4月10日(米国時間)、「Vulnerability Note VU#123335」(Multiple programming languages fail to escape arguments properly in Microsoft Windows)として、BatBadButの脆弱性に関する情報を公開した。
それによると、この脆弱性は「CVE-2024-1874」「CVE-2024-22423」「CVE-2024-24576」「CVE-2024-3566」として登録されている。CVE-2024-22423、CVE-2024-24576は高いCVSSスコア(基本スコア)が付与されている。
Flatt Securityは「この脆弱性を悪用した攻撃の成立条件は限定的であり、言語の実装に基づいて、アプリケーションにおけるリスク評価を進めるべきだ」と述べている。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「XZ Utils」にバックドア(CVE-2024-3094)の問題 Fedora、Debian、Alpine、Kali、OpenSUSE、Arch Linuxの開発版、実験版に影響
主要なLinuxディストリビューションなどで広く使用されている「XZ Utils」に、悪意あるコードが挿入された問題(CVE-2024-3094)が確認された。 - データ侵害を防ぎたいなら、まずは経営陣を守れ ベライゾン
ベライゾンジャパンは、「2023年度 データ漏えい/侵害調査報告書」を公開した。それによるとランサムウェアはデータ侵害全体の24%を占め、インシデント対応にかかる費用はここ2年間で倍増しているという。 - Log4j 2はオープンソースソフトウェアなんだから「問題を見つけたらあなたが直せ」?
情報セキュリティの啓発を目指した、技術系コメディー自主制作アニメ「こうしす!」の@ITバージョン。第31列車は、「Log4j 2の脆弱性」です。※このマンガはフィクションです。