-
Notifications
You must be signed in to change notification settings - Fork 708
Open
Labels
securitysecuritysecurity
Milestone
Description
概要(Overview)
CVE-2026-24765 (GHSA-vvj3-c3rp-c85p) により、PHPUnit の PHPT テストランナーにおける cleanupForCoverage() メソッドが未検証のデシリアライゼーションを実行する脆弱性が報告されています(CVSS 7.8 高)。
攻撃者が悪意のある .coverage ファイルを含む PR を作成するだけで、マージ不要で CI 上にてリモートコード実行(RCE)が成立する可能性があります。
攻撃の成立条件
- プロジェクトに PHPT テストが存在しなくても、攻撃者が PR で
.phptファイルとphpunit.xmlの変更を含めることで攻撃を構成可能 - EC-CUBE の CI はカバレッジ収集(
--coverage-clover)を有効にしているため、cleanupForCoverage()の経路が実行される - 攻撃者はフォーク側のコードを自由に変更できるため、ワークフローでの
.coverageファイル削除ステップや PHPUnit アップデートを回避可能
期待する内容(Expect) or 要望(Requirement)
1. 外部 PR の CI 実行を承認制にする(最優先)
リポジトリの Settings → Actions → General → 「Require approval for all outside collaborators」 を有効にしてください。
- ブランチやバージョンに依存せず、リポジトリ全体に適用される
- 承認前に CI が実行されないため、攻撃者がフォークでどのような変更をしても RCE が成立しない
- 古いブランチでは PHPUnit のアップデートが互換性の問題で困難なため、この設定が最も現実的かつ効果的な対策
2. PHPUnit のパッチ済みバージョンへの更新(根本対策)
互換性が許容できるブランチでは、パッチ済みバージョンへの更新も併せて実施してください。
composer update phpunit/phpunit3. ワークフローでの .coverage ファイル削除(多層防御)
内部コントリビューターに対する多層防御として、テスト実行前に .coverage ファイルを削除するステップを追加してください。ただし、外部 PR の場合は攻撃者がこのステップを削除できるため、単独での防御効果はありません。
- uses: actions/checkout@v4
- name: Remove potentially malicious coverage files
run: find . -name "*.coverage" -delete
- name: Run tests
run: vendor/bin/phpunit影響を受けるバージョン:
- PHPUnit 8.x < 8.5.52
- PHPUnit 9.x < 9.6.33
- PHPUnit 10.x < 10.5.62
- PHPUnit 11.x < 11.5.50
- PHPUnit 12.x < 12.5.8
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
securitysecuritysecurity