Bleeping Computer 网站披露,一个化名“neskafe3v1”的网络攻击者“黑进” PHP 软件包集中式存储库 Packagist 中 ,获取了四个不太活跃账户的访问权限,劫持十四个软件包。据悉,这些软件包累计安装已超数亿次。
有意思的是,包“劫持”事件发生后,这名网络攻击者联系了 Bleeping Computer 并表示之所以发动此次网络攻击活动,是想通过劫持软件包,找到一份工作。
Packagist 是一个 PHP 软件包的集中式存储库,为开发人员提供了一个快捷的方式来分享和安装 PHP 软件包,开发人员可以将自己的 PHP 软件包上传到 Packagist,并通过 Composer 进行安装和依赖管理。
被劫持包的名称主要包括:
值得一提的是,该名攻击者还向 Bleeping Computer 提供了材料,证明被劫持包的 Packagist 页面已经修改成了指向自己的(伪造的)链接,取代了此前指向合法 GitHub 存储库的链接。
例如,下面截图中 acmepp 包 Packagist 页面的 GitHub 链接,已经从 GitHub.com/acmehp/acmephp 改为研究人员的 repo。
acmepp 劫持软件包列表页面(Bleeping Computer)
Packagist 的发布过程与 npm 或 PyPI 等开源 repos 的发布过程略有不同,与直接将二进制文件或软件版本上传到 Packagist.org 相反,开发人员只需创建一个 Packagistorg 帐户,并提交一个链接到特定包的GitHub 回购,Packagist 的爬虫随后访问所提供的 repo,并聚合所有数据以显示在该包的 Packagist 页面上。
当开发人员使用“install”或“update”命令运行 Composer 时, Composer 实例首先在本地查找包的存在,如果找不到,则默认在 Packagist 上搜索此包,并检索为该包列出的 GitHub URL。之后,从该包的 Packagist 页面上列出的 GitHub 回购中下载该包的内容。也就是说,Packagist 直接从服务器托管和分发软件版本,这种方式与 npm 或 PyPI 的工作方式形成了鲜明对比。
通过修改每个包的 Packagist 页面,网络攻击者有效地劫持了 Composer 环境中使用的安装工作流。开发人员现在可以从 neskafe3v1 的 GitHub 回购中获取包的内容,而不是从项目的存储库中获取。
网络攻击者简单地将 composer.json 文件更改为类似于应用程序清单的文件,在这些包中读取”由neskafe3v1……Иõураборунапозиции应用安全、渗透测试人员、网络安全专家提供。“等内容。
更改了 composer.json 文件以演示黑客攻击:
网络攻击者通过分叉原始项目存储库,修改 composer.json 中 的“description”字段,并将更改提交到自身的分叉存储库中,但没有将更改合并回原始存储库。(这样做需要额外的访问权限,并且可能会引起维护人员的仔细检查)。当 Bleeping Computer 要求网络攻击者分享劫持包裹使用的确切技术时,没有获得答案,反而收到了”我正在找工作,在被某家公司聘用后会披露一份报告,没有获得取工作之前,没有什么可谈的。”一段话。