技術 約2分で読めます

CVE-2026-24765: PHPUnitのPHPTテストランナーにRCE脆弱性

概要

PHPUnitのPHPTテストランナーに、安全でないデシリアライズ(CWE-502)によるリモートコード実行(RCE)の脆弱性が発見された。CVSSスコアは7.8(High)。

影響を受けるバージョン

ブランチ影響バージョン修正バージョン
PHPUnit 8≤ 8.5.518.5.52
PHPUnit 9≤ 9.6.329.6.33
PHPUnit 10≤ 10.5.6110.5.62
PHPUnit 11≤ 11.5.4911.5.50
PHPUnit 12≤ 12.5.712.5.8

かなり広範囲のバージョンが対象になっている。

脆弱性の内容

PHPTテストランナーの cleanupForCoverage() メソッドが、コードカバレッジファイルをバリデーションなしでデシリアライズしている。

具体的には @unserialize($buffer) がそのまま呼ばれており、悪意のある .coverage ファイルに __wakeup() メソッドを含むシリアライズ済みオブジェクトを仕込めば、PHPUnitのクリーンアップ時に任意コードが実行される。

攻撃シナリオ

この脆弱性を悪用するには、カバレッジファイルの保存先に悪意のあるファイルを配置する必要がある。主な攻撃経路は以下の通り。

  • CI/CDパイプライン: 悪意のある .coverage ファイルを含むプルリクエストを送り、テスト実行時にRCEを発動させる
  • サプライチェーン攻撃: 侵害された依存パッケージ経由で悪意のあるファイルを混入させる

特にCI/CD環境はシークレットやデプロイキーを持っていることが多いため、影響が大きい。

影響の確認

自分のプロジェクトが影響を受けるかは、インストール済みのPHPUnitバージョンを確認する。

composer show phpunit/phpunit

Composer 2.4以降なら composer audit で既知の脆弱性をまとめてチェックできる。

composer audit

CIに composer audit を組み込んでおけば、今後同様の脆弱性が出たときにも自動で検知できる。

対策

修正バージョンへのアップデートが最優先。

composer update phpunit/phpunit

インフラ面では以下も有効。

  • CI/CDランナーをエフェメラル(使い捨て)にする
  • ブランチ保護ルールを適用し、不審なファイルがマージされないようにする
  • テスト成果物の改ざん検知を導入する

参考