在Composer中发现一个漏洞,该漏洞危害了Packagist PHP存储库

几天前 新闻爆出,一个严重漏洞已被发现 en 的依赖管理器 作曲家 (CVE-2021-29472),允许您在处理具有特殊格式的URL值的软件包时在系统上运行任意命令,该URL值确定了下载源代码的方向。

该问题在GitDriver,SvnDriver和HgDriver组件中表现出来 与Git,Subversion和Mercurial源代码控制系统一起使用。 该漏洞已在Composer版本1.10.22和2.0.13中修复。

特别是,Composer的默认Packagist软件包存储库受到特别影响,该存储库包含306.000个PHP开发人员软件包,每月提供超过1.400亿次下载。

在PHP生态系统中,Composer是管理和安装软件依赖项的主要工具。 世界各地的开发团队都使用它来简化升级过程,并确保应用程序在所有环境和版本中都能轻松运行。

实验表明,如果有关于此问题的信息,攻击者可以控制Packagist基础结构并拦截维护者的凭据,或将软件包的下载重定向到第三方服务器,从而安排具有更改的软件包变体的交付。在依赖项安装过程中恶意替换后门程序。

对最终用户的危害是有限的 由于composer.json的内容通常是用户定义的,并且在访问第三方存储库时会传递到源的链接,而第三方存储库通常是可靠的。 主要的打击落在Packagist.org储存库和Private Packagist服务上, 调用Composer并传输从用户那里接收到的数据。 攻击者可以通过丢弃特制软件包来在Packagist服务器上运行其代码。

Packagist团队在收到通知的12小时内解决了该漏洞 的脆弱性。 研究人员于22月27日私下通知Packagist开发人员,该问题已在当天修复。 28月XNUMX日发布了带有该漏洞修复程序的Composer公开更新,并于XNUMX月XNUMX日披露了详细信息。 对Packagist服务器上的日志进行的审核未发现与该漏洞相关的任何可疑活动。

参数注入错误是一类非常有趣的错误,通常在代码审查期间被忽略,而在黑匣子交互中则被完全忽略。

该问题是由URL验证代码中的错误引起的 在根composer.json文件和源下载链接中。 自2011年XNUMX月以来,该错误已存在于您的代码中。Packagist使用特殊的层来管理代码下载,而无需绑定到特定的源代码控制系统,该系统通过使用命令行参数调用“ fromShellCommandline”来执行。

问题的核心是ProcessExecutor方法允许您在URL中指定任何其他调用参数。 GitDriver.php,SvnDriver.php和HgDriver.php驱动程序中缺少这样的转义。 “ git ls-remote”命令不支持在路径后指定其他参数,这阻碍了GitDriver.php攻击。

通过将“ –config”参数传递给“ hq”实用程序,可以对HgDriver.php进行攻击,该实用程序允许通过操纵“ alias.identify”配置来组织任何命令的执行。

通过提交具有与Packagist相似的URL的测试包,研究人员确保发布该测试包后,其服务器从AWS上的其中一个Packagist服务器接收到HTTP请求,该请求包含当前目录中的文件列表。

应该注意的是,维护者并未在包装专家的公共场合中发现任何先前利用此漏洞的迹象。

最后,如果您有兴趣了解更多信息,可以查阅详细信息。 在下面的链接中。


成为第一个发表评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责资料:AB Internet Networks 2008 SL
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。