PHP Composer漏洞可能引发供应链攻击
番茄系统家园 · 2022-06-13 02:31:02
Composer是PHP中管理和安全软件依赖的主要工具,被开发团队广泛应用于更新过程等。因此,Composer使用名为Packagist的在线服务来确定包下载供应链的正确性。而Packagist每个月的下载请求在14亿次左右。
研究人员在进行安全研究时,在Packagist使用的Composer源码中发现了一个严重的安全漏洞,漏洞CVE编号为CVE-2021-29472。攻击者利用该漏洞可以在Packagist.org服务器上执行任意系统命令。此外,攻击者还可以进一步窃取维护者凭证,或将包下载重定向到传播后门依赖的第三方服务器。
漏洞分析
在请求下载包时,Composer首先会查询Packagist来获取元数据。元数据中包含2个获取代码源的域source和dist。Source只想开发库,dist只想预构建的库。Composer在从库中下载代码时会使用外部系统命令来避免重新实现针对每隔版本控制软件的逻辑。因此,这些调用都是用wrapperProcessExecutor来执行的:
在 [1]和[2]中,可以看到参数 $command是在shell中执行的。大多数的ProcessExecutor调用都是在版本控制软件驱动中执行的,版本控制软件负载原创和本地库的所有操作。比如,在Git驱动中:
使用ProcessExecutor::escape() 可以将参数$url 逃逸以预防子命令($(...),...
),但是无法预防用户提供(--)开头的值,只要加上其他的参数就可以成为最终的命令。这类漏洞就叫做参数注入。
类似的有漏洞的模式也出现在其他驱动中,用户控制的数据可以成功绕过检查并连接在一起成为系统命令:
更多技术细节参见:https://blog.sonarsource.com/php-supply-chain-attack-on-composer
补丁
研究人员将该漏洞提交给Packagist团队后,该团队快速反应,在12个小时内就部署了安全补丁。
本文翻译自:https://blog.sonarsource.com/php-supply-chain-attack-on-composer
免责声明: 凡标注转载/编译字样内容并非本站原创,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如果你觉得本文好,欢迎推荐给朋友阅读;本文链接: https://m.nndssk.com/dngz/330122nuUVyk.html。