検索
ニュース

Windows環境でコマンドインジェクションを引き起こす脆弱性、複数のプログラミング言語に影響攻撃の成立条件は限定的

Flatt Securityは、複数のプログラミング言語に存在する、Windows環境でコマンドインジェクションを引き起こす脆弱性に関する解説を公式ブログの英語版で公開した。

Share
Tweet
LINE
Hatena

 サイバーセキュリティ関連サービスを手掛ける日本の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を起動する可能性がある。

サーバマシン上でcalc.exeを起動する可能性があるNode.jsのコード(提供:Flatt Security)
サーバマシン上でcalc.exeを起動する可能性があるNode.jsのコード(提供:Flatt Security)

 これは、CreateProcess関数に渡されるコマンドラインにバッチファイルが明示的に指定された場合にのみ発生する。.exeファイルが指定された場合には発生しない。

 だが、Windowsでは、既定で環境変数PATHEXTに.batや.cmdファイルが含まれているため、一部のランタイムは、開発者が実行しようとしたコマンドと同じ名前のバッチファイルがあると、開発者の意図に反してバッチファイルを実行してしまう。そのため、以下のスニペットも、.batや.cmdを明示的に含んでいないにもかかわらず、任意のコマンドの実行につながる可能性がある。

任意のコマンド実行につながる恐れのあるコードの例(提供:Flatt Security)
任意のコマンド実行につながる恐れのあるコードの例(提供:Flatt Security)

 これらの挙動を悪用することは、以下の条件が満たされた場合に可能になる。

  • アプリケーションがWindows上でコマンドを実行する
  • アプリケーションがコマンドのファイル拡張子を指定しないか、またはファイル拡張子が.batまたは.cmdである
  • 実行されるコマンドがコマンド引数の一部として、ユーザーが制御する入力を含んでいる
  • プログラミング言語のランタイムがcmd.exeのコマンド引数を適切にエスケープしない

 これらの挙動を悪用すれば、任意のコマンド実行が可能になるかもしれない。

アプリケーションが影響を受けるかどうかを判断するためのフローチャート

 アプリケーションがBatBadButの脆弱性の影響を受けるかどうかを判断するためのフローチャートは、以下の通り。これは、この脆弱性を悪用した攻撃が成立する条件である上記の項目を踏まえたものだ。

アプリケーションがBatBadButの脆弱性の影響を受けるかどうかを判断するためのフローチャート(提供:Flatt Security)
アプリケーションがBatBadButの脆弱性の影響を受けるかどうかを判断するためのフローチャート(提供:Flatt Security)

影響を受けるプログラミング言語の状況

 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.

Security & Trust 記事ランキング

  1. 「SMSは認証に使わないで」 米CISA、モバイル通信を保護する8つのベストプラクティスを公開
  2. Google Cloud、2025年のサイバーセキュリティ予測を発表 AIがサイバー攻撃にもたらす影響とは?
  3. 経営層の約7割が「セキュリティ対策は十分」一方で6割以上がインシデントを経験、1位の要因は?
  4. 2025年に押さえるべきセキュリティの重要論点をガートナーが発表 新しいリスク、脅威、環境の変化、法規制などの動きを把握する指標に使える
  5. “ゼロトラスト”とトラスト(信頼性)ゼロを分かつものとは――情報セキュリティ啓発アニメ「こうしす!」監督が中小企業目線で語る
  6. 終わらせましょう。複雑過ぎるKubernetes/クラウドネイティブが生む心理的安全性の低下を――無料でクラウドセキュリティの勘所が分かる130ページの電子書籍
  7. よく聞く「複雑化するサイバー攻撃」は具体的にどう複雑なのか? 一例を医療系企業のランサム事例とともに解説
  8. 3割程度のSaaS事業者が標準的なセキュリティ対策をしていない アシュアードがSaaS事業者を調査
  9. 「このままゼロトラストへ進んでいいの?」と迷う企業やこれから入門する企業も必見、ゼロトラストの本質、始め方/進め方が分かる無料の電子書籍
  10. Google、「パスキー」のアップデートを発表 新たに導入された「パスワードマネジャーPIN」とは?
ページトップに戻る