Composer近日披露了两个高危指令注入漏洞,漏洞编号分别为CVE-2026-40261和CVE-2026-40176,影响范围覆盖Composer 2.0至2.9.5版本。漏洞根源在于Perforce驱动模块在构建Shell指令时,未能对输入参数进行转义处理——这是一个典型的安全疏忽。其中CVE-2026-40261的CVSS评分高达8.8,危险性更高:攻击者可通过恶意仓库远程触发任意命令执行,且无需在用户端安装Perforce即可得手,直接构成供应链攻击威胁。官方已紧急发布2.2.27和2.9.6两个修复版本。

这两个漏洞的成因本质相同:Composer的Perforce驱动器在拼接系统指令时,直接将外部提供的参数原封不动地嵌入命令行,既未进行过滤也未做转义处理。攻击者只需在参数中插入Shell特殊字符,即可注入任意指令。
首先分析CVE-2026-40261。该漏洞存在于Perforce::syncCodeBase()方法中——在同步代码时,该方法直接将来源引用追加到Shell指令中。而来源引用本身属于套件元数据的一部分,任何Composer包仓库在提供套件信息时,都可以声明Perforce作为来源类型,并在其中嵌入恶意内容。换言之,只要开发者从被入侵或恶意搭建的Composer仓库安装套件,便可能在不知不觉中触发命令执行。具体而言,使用--prefer-source安装或更新依赖包,以及安装dev前缀版本时的默认行为,都会触发该漏洞。
另一个漏洞CVE-2026-40176则出现在Perforce::generateP4Command()方法中。该方法生成P4命令时,直接将用户提供的Perforce连接参数(Port、User、Client)内嵌到指令字符串中。攻击者可以在composer.json中定义恶意的Perforce VCS仓库配置,从而触发命令注入。不过,该漏洞的攻击面相对较窄——因为VCS仓库定义只能从项目根目录的composer.json或Composer全局配置目录加载,无法通过已安装的依赖包间接触发,因此实际利用难度更高。
这两个漏洞影响Composer 2.0到2.2.26的LTS分支,以及2.3到2.9.5的主线分支。官方已在2.2.27和2.9.6版本中完成修复。如果暂时无法升级,针对CVE-2026-40261,可改用下载压缩包的方式安装套件,避免以源码方式获取依赖包;对于CVE-2026-40176,则应避免在来源不明的项目目录中执行Composer命令。安全无小事,尤其对于这种可通过供应链传播的漏洞,务必尽快处理。
