依赖混淆 exploit 已被滥用于攻击亚马逊等多家大厂
编译:奇安信代码卫士团队
研究人员发现恶意程序包正在被用于攻击亚马逊、Lyft、Slack 和 Zillow 等企业的 npm 代码公开库,提取敏感信息。
这些恶意包武器化了安全研究员 Alex Birsan 最近提供的依赖混淆 PoC exploit,将恶意代码注入开发者项目中。
内部的开发者项目通常使用的是位于私有仓库中标准的、受信任的代码依赖关系。Birsan 决定尝试下如果在公开库如 npm 中创建“山寨”程序包会发生什么后果,这些程序包的名称和私有的合法的代码依赖关系的名称一样。他想了解,PayPal 的某些内部项目会不会被默认位于新的公开程序包中而非私有程序包中?结果确实如此。
依赖混淆招致大批模仿者
Birsan 使用非恶意 PoC 代码块测试了这种“依赖混淆”攻击,他将这些代码库上传到公开库中并坐等会不会被导入,结果如他所料,证实了外部代码可通过目标企业的内部应用和系统,轻松被导入,苹果、微软、Netflix、PayPal、Shopify、特斯拉、优步无一幸免。
最后他获得超过13万美元的奖励,并实现取得目标组织机构的许可进行了实验。这一举动招来大量猎洞人员的仿效,据 Sonatype 公司的分析,在 Birsan 的研究成果发布后48小时内,npm 仓库中被上传了超过275个类似程序包。而截止到本周二,这一数字已经超过700个,恶意人员也混入其中。
Sonatype 公司的研究员 Ax Sharma 解释称,“道德黑客一般会在公开库如 npm 下发布一个和私有依赖关系名称相同的程序包。不过他们会在程序包中包含足够的最小化的 PoC 代码来证实攻击对厂商真实存在且为了申请漏洞奖励。道德黑客还发布了免责声明,说明仅为研究所用。”
依赖混淆技术遭武器化
遗憾的是,Sonatype 公司还发现了多个恶意包,说明该技术正遭武器化。Sharma 解释称,“某些依赖混淆山寨包比‘道德研究’走得更远了一步,直接参与恶意活动。”该公司发现这些山寨包会提取用户的 .bash_history 文件和 /etc/shadow 文件。.bash_history 文件包含之前由基于 Unix OS 用户在终端执行的命令清单。除非被定期清理,否则该文件中包含用户名、密码和其它敏感数据。/etc/shadow 文件还维护用户账户在系统上的哈希密码数据。尽管该文件一般被限制于“超级用户”账户,但如果受感染机器以提升权限运行 npm 则可获得该文件。
Sharma 解释称,“程序包中一般包含高度敏感信息,其中一些包还向其作者的服务器构建了反向 shell,也并未明确给出免责声明或者指出属于研究还是漏洞奖励计划。“
轻松自动化地实施攻陷
这些程序包更危险的地方还在于这种代码的导入是自动完成的:当出现新版本时,开发者项目将自动从仓库中提取,无需受害者进行任何操作。鉴于这些程序包和顶级组织机构所使用的内部依赖关系具有相同的名称,因此它们几乎可被同步拉取到组织机构的 build 中。
遗憾的是,即便这些内部依赖关系从技术上而言并未公开,但也可以非常容易地识别出它们。
Sharma 表示,“道德黑客一般会监控组织机构的 GitHub 公开库或代码的 CDN。该代码可能会披露内部依赖关系的名称(如manifest 文件中披露),而不会在公开库 npm、RubyGems 或 GitHub 上出现。至少这是 Alex Biran 的做法,但仍然存在创新的可能性。“
另外,由于这些山寨程序包被上传到公开库中,恶意攻击者几乎无需任何门槛即可访问。这种问题常出现在涉及误植域名 (typosquatting) 和公共包品牌劫持的软件供应链攻击中。“ Sharma 指出,任何人皆可利用依赖混淆问题,是否为恶意性质要看意图。
亚马逊等公司的山寨包
研究人员发现这些恶意包被用于攻击多家企业,包括亚马逊、Lyft、Slack 和 Zillow。
“amzn” 的 npm 网页提供了两个相似的恶意包版本,每个当中均只包含两个文件:一个名为 package.json 的manifest,一个是功能性 run.js 文件。”amzn” 包的名称和亚马逊的 GitHub 包以及开源包相仿。
分析指出,“从 run.js 中可看到 /etc/shadow 文件的内容正被访问且最终被提取到作者的域名 comevil.fun 中。该代码还可导致其作者打开服务器的反向 shell,一旦 ‘amzn’ 软件包渗透到易受攻击的版本中,就会生成。”
至于 Zillow,同样的作者将 “zg-rentals” 发布到 npm 中,且和 ‘amzn” 包的结构以及功能类似。它们均未发布免责声明或者和道德黑客的研究有关。同时,恶意 “serverless-slack-app” 包的情况也是如此,名称和 Atlassian 公司的开发人员构建的合法程序包有关。分析指出,它具有 manifest 文件启动的预安装和后安装脚本,“在预安装阶段生成的 index.js 脚本和 Birsan 发布的 PoC 研究软件包中的脚本完全相同,但在安装后阶段,托管在 GitHub 上的另外一个脚本会运行,并将用户的 .bash_history 文件发送给 serverless-slack-app 的作者。”
这名作者还发布了几乎相近的 Lyft 程序包 “lyft-dataset-sdk”,和Lyft 使用的基于 Python 的程序包名称一样。
Sonatype 公司的安全研究员 Juan Aguirre 表示,“近期的恶意 npm 山寨数据包都在演进,它们的起始代码和研究员 Alex Birsan 发布的 PoC 几乎相同,不过逐渐开始具有一些创造性。”
Repo Jacking:依赖关系仓库劫持漏洞,影响谷歌GitHub等7万多个开源项目的供应链
谷歌推出 GKE 开源依赖关系漏洞奖励计划
https://threatpost.com/malicious-code-bombs-amazon-lyft-slack-zillow/164455/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。