Trusted Design

CVE-2017-9841 の詳細

CVEの情報

説明:
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP code via HTTP POST data beginning with a "<?php " substring, as demonstrated by an attack on a site with an exposed /vendor folder, i.e., external access to the /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php URI.

CVE更新日: 2017-06-27 17:29:00.177000

CVSSバージョン: 3.1

CVSSスコア: 9.8

KEVの情報

KEV更新日: 2022-02-15

EPSSの情報

EPSSは脆弱性が今後30日以内に悪用される確率を予測するスコアリングシステムで、FIRST(Forum of Incident Response and Security Teams)が提供しています。
EPSSのスコアが高いということは、攻撃されるリスクが高いことを意味するので、早めの対策が必要です。

EPSSスコア: 0.999990000

EPSS更新日: 2026-10-16 00:00:00

SSVCの情報

SSVCはカーネギーメロン大学ソフトウェア工学研究所が提案する脆弱性の評価手法です。ステークホルダーごとに脆弱性対応の優先度を決定することを支援します。
本サイトでは、CVE、KEV、EPSSの内容からExploitation(悪用状況)、Technical Impact(技術的影響)、Automatable(自動攻撃の可否)を判定します。

Exploitation: active

Technical Impact: high

Automatable: True

AIを使った解説

解説:

CVE-2017-9841は、PHPで広く使われている単体テストフレームワークであるPHPUnitに存在する深刻なリモートコード実行の脆弱性です。

1. 脆弱性の概要

脆弱性名: PHPUnitのUtil/PHP/eval-stdin.phpにおける任意のPHPコード実行の脆弱性 (PHPUnit Remote Code Execution)

PHPUnitのUtil/PHP/eval-stdin.phpファイルには、リモートの攻撃者が任意のPHPコードを実行できる脆弱性が存在します。この脆弱性は、HTTP POSTデータとして"<?php "で始まるPHPコードを送信することによって悪用されます。このeval-stdin.phpファイルはテスト目的でPHPUnitに含まれており、eval('?>' . file_get_contents('php://input'));という行を含んでいるため、認証なしにユーザーが提供した入力を直接実行してしまいます。開発環境でのみ使用されるべきテストユーティリティが、Composerの依存関係として本番環境にデプロイされ、公開されている/vendorフォルダを通じてアクセス可能になっている場合に、この問題が発生します。

1.1 影響

  • リモートの攻撃者により、対象システム上で任意のPHPコードが実行される可能性があります。
  • PHPUnitが公開されている場合、サーバーが完全に侵害される可能性があります。
  • 具体的には、マルウェアの配置(例: XsamXadooマルウェア)、既存ファイルの改ざん(例: AdminLoginController.php)、任意のコマンド実行、そして機密性、完全性、可用性の喪失につながる可能性があります。
  • .envファイルからの認証情報漏洩や、侵害されたシステムをボットネットに組み込むための悪用も可能です。

1.2 深刻度

  • CVSS v3.1スコア: 9.8 (Critical)
  • JVN深刻度: 9.8 (CVSS v2スコアは7.5)
  • EPSS (Exploit Prediction Scoring System): 94.2% (99.9thパーセンタイル) と非常に高く、最も活発に標的とされている脆弱性の一つです。

2. 対象となる環境

2.1 影響を受けるOSバージョン

特定のOSバージョンに限定されるものではなく、PHPUnitを使用しているWebサーバー環境全般に影響します。

2.2 影響を受ける設定

  • PHPUnitのバージョン:
    • PHPUnit 4.x (4.8.28より前のバージョン)
    • PHPUnit 5.x (5.6.3より前のバージョン)
  • 構成:
    • vendorフォルダ(特にvendor/phpunit/phpunit/src/Util/PHP/eval-stdin.phpを含むパス)がインターネットからアクセス可能な状態になっているWebサイトやWebサーバー。
    • Composerを使用してPHPUnitをデプロイし、開発用パッケージが本番環境に残されている場合。
    • Drupal (MailchimpおよびMailchimp E-Commerceモジュールの一部) やPrestaShopなどのCMSで、影響を受けるPHPUnitのバージョンを使用している場合にも悪用が報告されています。
    • PHPがWindows上でApacheとPHP-CGIを使用して実行されている環境も、この脆弱性の影響を受ける可能性があります。

3. 影響を受けた時の兆候

  • Webサーバーのログに、/phpunit/src/Util/PHP/eval-stdin.phpまたは/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.phpへの異常なPOSTリクエストが記録される場合があります。
  • Webサイトの改ざん、意図しないファイルの生成、または既存のファイルの変更が発生する可能性があります。
  • WebサーバーのCPU使用率の異常な上昇や、不審なネットワーク通信が観測されることがあります。
  • システムログに異常なコマンド実行の記録が見られる場合があります。
  • Webサーバーの応答速度が低下する可能性があります。

4. 推奨対策

4.1 本対策

  • PHPUnitのアップデート:
    • PHPUnitをバージョン4.8.28以降、または5.6.3以降にアップグレードしてください。
    • 可能な限り、PHPUnitが本番環境に存在しないようにしてください。テストフレームワークであるため、通常、本番環境で必要とされることはありません。
  • 脆弱なファイルの削除またはアクセス制限:
    • vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.phpファイルが存在するか確認し、もし存在すれば削除してください。
    • vendorディレクトリ全体、特にeval-stdin.phpへの外部からのHTTPアクセスをWebサーバーの設定(例: Apacheの.htaccessやNginxの設定)でブロックしてください。
    • ファイルやフォルダのアクセス権を必要最低限に設定してください。
    • 本番環境で開発用パッケージをインストールしないように徹底してください。
  • CMSのアップデート:
    • DrupalやPrestaShopなどのCMSを使用している場合は、それらの公式情報を確認し、ベンダーが提供する最新のパッチやセキュリティアップデートを適用してください。

4.2 暫定回避策(緩和策)

  • WAF (Web Application Firewall) の導入:
    • Web Application Firewall (WAF) を導入し、/phpunit/src/Util/PHP/eval-stdin.phpへのリクエストをブロックするルールを設定してください。
  • 信頼できる送信元からのリクエストに制限:
    • リクエストにレートリミットをかける、またはリクエストを信頼できる送信元に制限してください。
  • ログの監視:
    • Webサーバーのログを継続的に監視し、CVE-2017-9841の悪用を示すパターン(例: eval-stdin.phpへのPOSTリクエスト)を検出できるようにしてください。
  • セキュリティ設定の評価:
    • ベストプラクティス評価を実行し、セキュリティ態勢を向上させるための設定変更がないか確認してください。
  • ファイアウォールの更新:
    • パロアルトネットワークスの次世代ファイアウォールなどの脅威防御コンテンツを継続的に更新し、最新の脅威シグネチャを適用してください。

他に解説すべき観点

  • 攻撃の活発性: この脆弱性は2017年に公開されたものですが、2019年、2020年、さらには2026年になっても非常に活発に悪用されていることが観測されています。これは、多くのシステムで古いPHPUnitが残り、/vendorディレクトリが意図せず公開されていることが原因です。
  • 簡単な悪用: この脆弱性は非常に単純なリモートコード実行であり、認証なしに任意のPHPコードを実行できるため、攻撃者にとって魅力的なターゲットとなっています。
  • 検出ツール: CVE-2017-9841の悪用を検出するためのツールや設定(CrowdSecなど)が公開されています。

参照したサイト

NVDサイト

NVDでCVEの詳細を見る

戻る