聚焦源代码安全,网罗国内外最新资讯!
编译:奇安信代码卫士团队
最大的JavaScript 库数据包管理器 npm 的幕后团队发布安全警告,建议所有用户更新至最新版本 (6.13.4) 以阻止“二进制植入”攻击。相关漏洞编号是 CVE-2019-16775、 CVE-2019-16776和 CVE-2019-16777。
Npm(Node.js 数据包管理器)运维人员表示 npm 命令行接口 (CLI) 客户端受一个bug 影响,它结合了文件遍历问题和一个任意文件(覆写)写入问题。攻击者可利用该 bug 植入恶意二进制或覆写用户计算机上的文件。
该漏洞仅可在通过 npm CLI 安装膨胀 mpm 数据包时才可遭利用。
Npm 团队保释,“然而,正如我们之前所发现的那样,这并非不可撼动的障碍”,即此前攻击者曾在官方 Npm 库中植入后门或膨胀数据包。
无攻击迹象
Npm 运维人员表示,他们正在扫描数据包中可能包含旨在利用该 bug 的npm 门户,但目前尚未发现任何可疑案例。
Npm 运维人员表示,“这无法保证门户未遭利用,而只是意味着目前并未被用于npm 官方注册表已发布的数据包中。”他们表示将持续监控,“然而,我们无法扫描所有的 npm 数据包来源(私有注册表、镜像、git 库等),因此尽快更新很重要。”
除了 npm 以外,JavaScript 的另外一个数据包管理器 yarn 也受影响。本周初,该 bug 已在新发布的 yarn 1.21.1 中修复。
Npm 和 yarn 团队对发现该漏洞的德国安全研究员 Daniel Ruf 表示感谢。
技术细节
以下细节内容节选自 Daniel Ruf 发布的博客文章。
虽然npm 和 yarn 受到的影响最大,但测试结果显示 pnmp 似乎阻止了很多攻击类型。
在多数情况下,pnpm 似乎无法解析 node_modules 外部的路径。另外由于 pnpm 通常使用符号链接来管理依赖关系,因此可以阻止这些符号链接被其它数据包覆写,之后由其它数据包创建并拥有。
问题在于,我们能够为该二进制名称定义任意(有效的)路径和之后将被符号链接的文件。而这就是执行攻击所需的所有条件。
"bin": {
"../some/path": "../some/other/path"
}
PoC
Symlink .ssh/id_rsa
"keyfile": "/Users/danielruf/.ssh/id_rsa"
它可导致恶意应用程序直接访问文件,而无需使用绝对路径并绕过检查该路径是否使用的工具。它也可用作某种权限绕过方法,具体取决于该数据管理器的安全方式。
覆写(写入)文件/二进制
"webpack": "./test.js"
它可以其它内容覆写 webpack 二进制,用于通过遭操纵或恶意版本替代清洁的二进制或文件。
植入二进制
"/Users/danielruf/Desktop/yyy": "./fake-file"
它会在桌面上生成一个新文件,其中包括所安装数据包的相对路径代码。
可使用相对路径和简单的路径遍历实现同样目的:
"../../../yyy": "./fake-file"
解决方案
不应该在 node_modules 文件夹之外解析路径,以阻止多数利用方式,如 pnpm 所做。同时不应该覆写由其它依赖关系创建的符号链接。在某些情况下它是被禁止的但在多数情况下是被允许的。另外,用户无法获知正在默认安装二进制,因此并不清楚具体情况。再次,应该存在针对文件系统访问的限制,以阻止其它类似攻击,不过这是一个必须在 Node.js 中解决的通用问题。
更新至最新版本 npm v6.13.4、pnpm v4.5.0 以及 yarn v1.12.1,修复这些问题。
NPM 对于 JS 生态系统的重要性
然而,该问题对npm 用户的影响要比对 yarn用户的影响更大。Npm 不仅是最大的 JavaScript 数据包管理应用程序,它还是任何编程语言的最大的数据包库,其库的数量超过35万个。
JavaScript 这些年几乎无处不在:从浏览器到金融应用,从桌面到服务器。由于 npm 在 JavaScript 生态系统中占据如此核心的地位,因此通常遭利用。
黑客将膨胀库上传到 npm 中,寄望于合法项目使用它们。同时劫持已知开发者的 npm 账户并在流行库中植入恶意代码。他们最终的目标是发动攻击或者在内置膨胀 npm 数据包中的应用中植入后门,以便后续窃取数据。
过去曾多次发生这类事件。2018年7月,黑客攻陷了含有恶意代码的 ESLint 库,旨在窃取其它开发者的 npm 凭证。
2018年5月,黑客试图在另外一款流行的 npm 数据包 getcookies 中隐藏后门。
2017年8月,npm 团队删除了被指从其它项目中窃取环境变量的38款 JavaScriptnpm 数据包,它们试图收集项目敏感信息如密码或 API 密钥。
密币用户沦为常见目标
但是虽然过去发生的攻击活动针对的是开发者,但最近发生的后门事件旨在密币用户。这是因为 JavaScript (npm)用于构建并驱动当前的 web、移动和桌面密币钱包应用。
攻击者通常会为 npm 库增加后门或者创建膨胀克隆,将代码植入钱包并窃取用户资金。例如,今年6月份,npm 某数据包中被指含有恶意代码,旨在窃取某些密币应用的密币钱包种子以及其它登录短码。该库由一家密币初创公司使用,该公司选择在黑客之前下手自黑。
另外一起攻击活动发生在2018年11月,当时黑客在 Copay 桌面和移动钱包应用所使用的npm 数据包中安装了后门,以便窃取用户的比特币。
本文提到的漏洞已修复,它非常危险可导致密币钱包的开发者及其用户遭攻击。
推荐阅读
黑客利用遭攻陷的 JavaScript 包盗取 npm 凭证
原文链接
https://www.zdnet.com/article/npm-team-warns-of-new-binary-planting-bug/
https://blog.daniel-ruf.de/critical-design-flaw-npm-pnpm-yarn/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点,转载请注明“转自奇安信代码卫士 www.codesafe.cn”
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的产品线。