CVE-2026-46420: Setup PHP Command Injection Vulnerability

MODERATE
Advisory Identifier: GHSA-pqwm-q9pv-ph8r
CVSS 5.6
CWE-78
Published
Advisory Summary

CVE-2026-46420 is a MODERATE (CVSS 5.6) command injection vulnerability (CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')) affecting Setup PHP libraries in the GitHub Actions ecosystem. The issue involves command injection in repository-derived php version resolution. Remediation is available by upgrading affected packages to version 2.37.1.

CVE-2026-46420 at a Glance

CVE Identifier CVE-2026-46420
GHSA Identifier GHSA-pqwm-q9pv-ph8r
Severity MODERATE
CVSS v3.1 Base Score 5.6
CWE Classification CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
Affected Product Setup PHP
Package Ecosystem GitHub Actions
Published Date
Last Updated

Security Impact

CVSS: 5.6

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L).

Attack Vector Network (AV:N)
Attack Complexity High (AC:H)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality Low (C:L)
Integrity Low (I:L)
Availability Low (A:L)

How to Fix CVE-2026-46420

To remediate this vulnerability, upgrade all affected Setup PHP dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

shivammathur/setup-php fixed: 2.37.1
Upgrade shivammathur/setup-php to 2.37.1
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for shivammathur/setup-php

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-46420, inspect your project dependencies for Setup PHP:

inspect dependencies for shivammathur/setup-php

Analyze the terminal output to locate any version of Setup PHP in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 2.37.1), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection'), where the product constructs all or part of an os command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended os command when it is sent to a downstream component. In Setup PHP, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

### 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-version` - `composer.lock` via `platform-overrides.php` - `composer.json` via `config.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.

CVE-2026-46420 Affected Setup PHP Versions

1 component(s)
Fixed Versions:
2.37.1
Product / Package Ecosystem Affected Versions Fixed Version
shivammathur/setup-php
GitHub Actions
≥ 2.25.0
< 2.37.1
2.37.1

References

Frequently Asked Questions

What is CVE-2026-46420?
CVE-2026-46420 is a security vulnerability in Setup PHP involving Command Injection in Repository-Derived PHP Version Resolution under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection').
Which Setup PHP versions are affected?
Affected versions include releases prior to 2.37.1 across affected packages: shivammathur/setup-php.
What version fixes CVE-2026-46420?
Upgrading to 2.37.1 (or the latest patched release for your respective branch) resolves the vulnerability.
Is shivammathur/setup-php affected?
Yes, shivammathur/setup-php is affected in releases prior to 2.37.1. Upgrade your dependency to 2.37.1 or later.
What is the CVSS score of CVE-2026-46420?
CVE-2026-46420 has a CVSS v3.1 base score of 5.6 (MODERATE) with vector string CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L.
What CWE is associated with CVE-2026-46420?
CVE-2026-46420 is classified under CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') (The product constructs all or part of an OS command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended OS command when it is sent to a downstream component.).
How can I check GitHub Actions dependencies for CVE-2026-46420?
Run the dependency tree command: 'inspect dependencies for shivammathur/setup-php'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-pqwm-q9pv-ph8r",
  "modified" : "2026-05-20T15:31:52Z",
  "published" : "2026-05-20T15:31:52Z",
  "aliases" : [ "CVE-2026-46420" ],
  "summary" : "Setup PHP: Command Injection in Repository-Derived PHP Version Resolution",
  "details" : "### Summary\n\nA 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.\n\nIn affected versions, `setup-php` may read the PHP version from:\n\n- `.php-version`\n- `composer.lock` via `platform-overrides.php`\n- `composer.json` via `config.platform.php`\n\nIf 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.\n\n### Impact\n\nThis issue is exploitable when `setup-php` is run after checking out attacker-controlled repository contents and resolves the PHP version from repository files.\n\nThe 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.\n\nThis 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.\n\n### Technical details\n\nIn 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.\n\n### Remediation\n\nIf 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.\n\nThe fix validates PHP version inputs, constrains manifest-derived versions, hardens script generation at the execution, and includes additional checks in related input-handling paths.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:L/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "GitHub Actions",
      "name" : "shivammathur/setup-php"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "2.25.0"
      }, {
        "fixed" : "2.37.1"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/shivammathur/setup-php"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-78" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-05-20T15:31:52Z",
    "nvd_published_at" : null
  }
}