Skip to content

CVE-2026-24765: GitHub Actions ワークフローに .coverage ファイル削除ステップを追加 #6610

@nanasess

Description

@nanasess

概要(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/phpunit

3. ワークフローでの .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

参考: GHSA-vvj3-c3rp-c85p

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions