Description
setup-php is a GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and tools. From 2.25.0 prior to 2.37.1, shivammathur/setup-php resolves the PHP version from repository-controlled files such as .php-version, composer.lock through platform-overrides.php, and composer.json through config.platform.php, and insufficiently constrains those values before incorporating them into generated shell or PowerShell setup scripts, allowing command injection on a GitHub Actions runner when workflows such as pull_request_target check out attacker-controlled contents before invoking setup-php. This issue is fixed in version 2.37.1.
Published: 2026-07-17
Score: 5.6 Medium
EPSS: 1.1% Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability lies in the way shivammathur/setup-php resolves the PHP version from repository-controlled files such as .php-version, composer.lock, platform-overrides.php, and the Composer config. From 2.25.0 through 2.37.0, these values were incorporated directly into generated shell or PowerShell setup scripts without sufficient validation, allowing an attacker who controls repository contents and triggers the workflow with pull_request_target to inject arbitrary commands into the runner. This command injection flaw (CWE‑78) can lead to full remote code execution on the CI environment. The issue is fixed in version 2.37.1.

Affected Systems

The affected component is shivammathur's setup‑php GitHub Action. Versions 2.25.0 through 2.37.0, inclusive, are vulnerable. The action is valued in CI pipelines that install PHP, extensions, and configuration. Version 2.37.1 contained the fix and should be deployed to all workflows that use the action.

Risk and Exploitability

The CVSS score of 5.6 indicates a moderate severity. The EPSS score is under 1%, showing a low current exploitation probability, and the vulnerability is not listed in CISA KEV. The likely attack vector is a workflow that uses pull_request_target and checks out attacker‑controlled content before the action runs. If an adversary supplies a malicious version file or composer configuration, they can inject shell or PowerShell commands executed with the runner’s privileges, leading to full remote code execution on the build environment.

Generated by OpenCVE AI on July 30, 2026 at 23:35 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Update the shivammathur/setup‑php action to version 2.37.1 or later
  • For workflows that use pull_request_target, ensure that the checkout step runs after the action or that untrusted content is fetched from a separate repository
  • Implement a pre‑validation step that verifies .php-version, composer.lock, and composer.json for acceptable version patterns before allowing setup‑php to run

Generated by OpenCVE AI on July 30, 2026 at 23:35 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-pqwm-q9pv-ph8r Setup PHP: Command Injection in Repository-Derived PHP Version Resolution
History

Thu, 23 Jul 2026 21:45:00 +0000

Type Values Removed Values Added
First Time appeared Shivammathur
Shivammathur setup-php
Vendors & Products Shivammathur
Shivammathur setup-php

Mon, 20 Jul 2026 19:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Fri, 17 Jul 2026 20:15:00 +0000

Type Values Removed Values Added
Description setup-php is a GitHub action to set up PHP with extensions, php.ini configuration, coverage drivers, and tools. From 2.25.0 prior to 2.37.1, shivammathur/setup-php resolves the PHP version from repository-controlled files such as .php-version, composer.lock through platform-overrides.php, and composer.json through config.platform.php, and insufficiently constrains those values before incorporating them into generated shell or PowerShell setup scripts, allowing command injection on a GitHub Actions runner when workflows such as pull_request_target check out attacker-controlled contents before invoking setup-php. This issue is fixed in version 2.37.1.
Title setup-php: Command Injection in Repository-Derived PHP Version Resolution
Weaknesses CWE-78
References
Metrics cvssV3_1

{'score': 5.6, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L'}


Subscriptions

Shivammathur Setup-php
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-07-20T18:15:56.324Z

Reserved: 2026-05-13T22:18:22.829Z

Link: CVE-2026-46420

cve-icon Vulnrichment

Updated: 2026-07-20T18:15:34.887Z

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-07-30T23:45:05Z

Weaknesses
  • CWE-78

    Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')