setup-php GitHub Action CVE-2026-46420
MEDIUMSeverity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
Primary rating from GitHub Advisory · only source for this CVE.
CVSS VectorGitHub Advisory
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L
Lifecycle Timeline
2DescriptionGitHub Advisory
Summary
A command injection vulnerability was identified in shivammathur/setup-php when the action resolves the PHP version from repository-controlled files and uses that value while generating the platform setup script.
In affected versions, setup-php may read the PHP version from:
.php-versioncomposer.lockviaplatform-overrides.phpcomposer.jsonviaconfig.platform.php
If an attacker can influence one of these files and the workflow executes setup-php in a trusted context, they may be able to execute commands on the GitHub Actions runner.
Impact
This issue is exploitable when setup-php is run after checking out attacker-controlled repository contents and resolves the PHP version from repository files.
The most significant example is a privileged workflow such as pull_request_target that checks out untrusted pull request code before invoking setup-php. Similar risk can also arise in other workflows that operate on attacker-controlled refs, branches, or repository contents in a trusted context.
This is not a separate security boundary when an attacker can already modify the workflow definition itself or directly control the php-version workflow input, since that level of access already permits arbitrary command execution in GitHub Actions.
Technical details
In affected versions, repository-derived PHP version values were insufficiently constrained before being incorporated into the generated shell or PowerShell setup script executed by the action. This could allow attacker-controlled values from supported repository files to influence script execution in trusted workflow contexts.
Remediation
If you are using shivammathur/setup-php@v2, no action is needed on your end. Users who pin the setup-php release version or release version SHA should upgrade to a patched version.
The fix validates PHP version inputs, constrains manifest-derived versions, hardens script generation at the execution, and includes additional checks in related input-handling paths.
AnalysisAI
Command injection in shivammathur/setup-php (versions 2.25.0 through 2.37.0) allows an attacker who can influence repository files to execute arbitrary commands on a GitHub Actions runner when the action resolves the PHP version from attacker-controlled content. The risk is highest in privileged workflows using pull_request_target that check out untrusted PR code before invoking setup-php, potentially exposing repository secrets and CI/CD infrastructure. No public exploit code or KEV listing exists at time of analysis, but the attack is realistic in any project using this common CI action pattern with auto-merging or cross-repo workflows.
Technical ContextAI
The affected component is the shivammathur/setup-php GitHub Action (pkg:actions/shivammathur_setup-php), versions 2.25.0 to below 2.37.1. The action resolves the PHP version not only from explicit workflow inputs but also from three repository-controlled files: .php-version, composer.lock (via platform-overrides.php), and composer.json (via config.platform.php). CWE-78 (Improper Neutralization of Special Elements used in an OS Command) applies because the version string extracted from these files was embedded directly into dynamically generated shell (bash) and PowerShell setup scripts without sufficient sanitization. The commit diff confirms the root cause: parseVersion() previously returned undefined for invalid inputs like '4.x' rather than throwing, and shell metacharacters such as $() were not escaped before script inclusion. The fix adds strict allowlisting validation of PHP version strings, throws on invalid or manifest-derived values, and escapes shell-special characters in script generation contexts.
RemediationAI
Vendor-released patch: version 2.37.1, available via the patched commit at https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b and the security advisory at https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r. Users referencing shivammathur/setup-php@v2 as a floating tag require no workflow change - the action auto-updates. Users pinning a specific release version or SHA (e.g., shivammathur/setup-php@v2.32.0 or a commit SHA in the affected range) must explicitly update their workflow files to reference v2.37.1 or its SHA. As an immediate compensating control, audit all workflows using pull_request_target: if any such workflow calls setup-php after a checkout step for untrusted code, add an explicit php-version input with a hardcoded value to bypass repository-file resolution - this removes the attacker-controlled input path entirely with no functional side effects. Alternatively, restructure pull_request_target workflows to avoid checking out PR content before trusted action invocations.
sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not
(1) boardData102.php, (2) boardData103.php, (3) boardDataJP.php, (4) boardDataNA.php, and (5) boardDataWW.php in Netgear
ProjectSend versions prior to r1720 are affected by an improper authentication vulnerability. Rated critical severity (C
Roundcube Webmail contains a critical PHP object deserialization vulnerability (CVE-2025-49113, CVSS 9.9) that allows au
Util/PHP/eval-stdin.php in PHPUnit before 4.8.28 and 5.x before 5.6.3 allows remote attackers to execute arbitrary PHP c
Palo Alto Networks PAN-OS management web interface contains an authentication bypass allowing unauthenticated attackers
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
Nagios XI version xi-5.7.5 is affected by OS command injection. Rated high severity (CVSS 8.8), this vulnerability is re
The get_referers function in /opt/ws/bin/sblistpack in Sophos Web Appliance before 3.7.9.1 and 3.8 before 3.8.1.1 allows
The Backup Migration plugin for WordPress is vulnerable to Remote Code Execution in all versions up to, and including, 1
NetAlertX (formerly PiAlert) versions 23.01.14 through 24.x before 24.10.12 allow unauthenticated command injection thro
The GiveWP - Donation Plugin and Fundraising Platform plugin for WordPress is vulnerable to PHP Object Injection in all
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
GHSA-pqwm-q9pv-ph8r