
Laravel-RCE: CVE-2017-9841
Laravel-RCE: CVE-2017-9841
CVE-2017-9841 は、PHP の自動テストで広く使用されている PHPUnit ライブラリに影響する、重大なリモートコード実行(RCE)の脆弱性です。この欠陥により、攻撃者は公開されている特定の PHPUnit ファイルにアクセスできた場合、サーバー上で任意のコマンドを実行できます。
📌 主な詳細 識別子: CVE-2017-9841 GOOGLE DORK "inurl:"/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php" 影響を受ける製品: PHPUnit(コンポーネント phpunit/phpunit)
影響を受けるバージョン: 5.6.3 未満および 4.8.28 未満
脆弱性の種類: リモートコード実行(RCE)
影響: 重大 – 攻撃者がサーバー上で任意の PHP コードを実行できる可能性があります。
🔍 脆弱性の仕組み 問題は、以下の場所にある eval-stdin.php ファイルに存在します。
text /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php (プロジェクト構成によっては、類似したパスに存在する場合もあります)。
このファイルは PHPUnit の内部使用を目的として設計されていますが、多くのインストール環境では公開されたままになっています。このファイルのコードは、標準入力(php://input)からデータを読み取り、それを eval() 関数で直接実行するだけです。つまり、このエンドポイントに送信された POST リクエストはすべて PHP コードとして評価されます。
悪用例 攻撃者は、脆弱なファイルに対して HTTP POST リクエストを送信できます。例:
http POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: alvo.com
Content-Type: application/x-www-form-urlencoded
Payload 🛡️ " "
サーバーはコードを実行し、その出力を返すため、実行が確認されます。
これにより、攻撃者は攻撃を拡大してリバースシェルを取得したり、機密ファイルを読み取ったり、データを改ざんしたりすることができます。
🛡️ 緩和策 PHPUnit を修正済みバージョン(≥ 5.6.3 または ≥ 4.8.28)に更新する。
本番環境では vendor/phpunit/ ディレクトリへのアクセスを削除または制限する。テスト用ライブラリは公開してはならないためです。
eval-stdin.php などの一般的なテストファイルへのリクエストをブロックするようサーバーを設定する。
Web アプリケーションファイアウォール(WAF)を使用して、悪用の試みを検出・ブロックする。
📚 追加の背景 この脆弱性は、多くのプロジェクトが誤って vendor ディレクトリを公開してしまうため、非常に広く知られています。PHPUnit は PHP プロジェクト(Laravel、Symfony などのフレームワークを含む)で一般的な依存関係であるため、偶発的な露出が頻繁に発生します。そのため、自動化されたセキュリティスキャンで最初にテストされるベクターの1つとなっています。
開発者またはシステム管理者の方は、本番のサイトで eval-stdin.php ファイルが外部からアクセス可能になっていないか確認してください。