每周下载 300 万次的 NPM 包存在严重漏洞
不受信任的 JavaScript 配置文件可以执行任意代码。流行的 NPM 包“pac-resolver”修复了一个严重的远程代码执行 (RCE) 缺陷。
pac-resolver 包每周的下载量超过 300 万次https://www.npmjs.com/package/pac-resolver,将此漏洞扩展到依赖开源依赖项的 Node.js 应用程序。Pac-resolver 将自己标榜为一个模块,它接受 JavaScript 代理配置文件并为您的应用生成一个函数来映射某些域以使用代理。
代理或不代理
本周,开发人员Tim Perry 披露了 pac-resolver 中的一个严重缺陷,该漏洞可以使本地网络上的威胁行为者在尝试发出 HTTP 请求时在您的 Node.js 进程中运行任意代码。
在为他的HTTP Toolkit添加代理支持时,Perry 开始审核 pac-resolver 代码并遇到了安全问题。该漏洞被跟踪为 CVE-2021-23406,该漏洞与模块处理代理自动配置 (PAC) 文件的方式有关。PAC 文件由指定代理配置的 JavaScript 代码组成——哪些网络请求应该通过代理,哪些应该直接发出。例如,在 PAC 文件中,网络管理员可以明确指定一个网络代理,所有流量都应通过该代理进行路由,并显示免于要求的域:
函数 FindProxyForURL(网址,主机){
// 不使用代理直接发送所有 *.example 请求:
如果 (dnsDomainIs(host, '.example.com')) {
返回“直接”;
}
// 通过此代理发送所有其他请求:
返回 'PROXY proxy.example.com:8080';
}
在上面的例子中,对“example.com”的网络请求将绕过代理,而其余的流量被指示通过代理服务器。
PAC 标准最初于 1996 年作为 Netscape Navigator 2.0 的一部分推出, 至今仍然具有相关性并得到广泛使用。例如,Web 代理自动发现协议 (WAPD) 使用 DNS 和/或 DHCP 服务来定位网络上的 PAC 文件并将代理配置导入到应用程序中。然而,随着代理配置变得越来越大,PAC 文件中的 JavaScript 代码会变得越来越复杂,并且理想地设计为在虚拟化环境 (VM) 中运行。
几行 JavaScript 就可以绕过 VM,导致 RCE
这就是问题的开始。
例如,一个名为Pac-Proxy-Agent的相关 NPM 包 ,由同一作者制作,每周下载量超过 200 万次,为 Node.js 应用程序提供 PAC 文件支持。Pac-Proxy-Agent 通过获取 PAC 文件的 URL,检索文件,然后充当 Node.js HTTP 代理来处理应用程序的传出请求。但是 Pac-Proxy-Agent 无法正确沙箱 PAC 文件,因为它使用了易受攻击的 pac-resolver 模块,该模块进一步依赖“degenerator”来构建 PAC 功能。
Degenerator 是同一作者的另一个包, 它使用 Node.js 的“VM”模块帮助将任意代码转换为沙盒函数。但是 VM 模块从未设计为用作安全机制,Node.js 文档中明确说明了这一点。因此,degenerator 的输出——当被 pac-resolver、Pac-Proxy-Agent 和 proxy-agent 等一系列包使用时——会带来安全风险。
提到 Node 文档中的免责声明,“vm 模块不是一种安全机制。不要用它来运行不受信任的代码,” 佩里在一篇博客文章中说https://httptoolkit.tech/blog/npm-pac-proxy-agent-vulnerability/,“这是一个容易犯的错误——它是小文本(坦率地说,它应该是该页面上和每种方法旁边的标题)。” 佩里进一步声称 MongoDB 也“在 2019 年也做了完全相同的事情,后果更糟”。然而,CVE Perry 链接到一个名为mongo-express的第三方工具。MongoDB 向 Ars 确认他们与相关软件包没有任何关系。
Perry 进一步解释说,“这造成了一个大问题。虽然 VM 确实尝试在单独的上下文中创建一个隔离的环境,但有一长串简单的方法可以访问原始上下文并完全脱离沙箱......允许代码在其中'沙箱' 基本上可以在你的系统上做任何它喜欢的事情。”
“就是这样——这就是突破 VM 模块沙箱所需的全部内容。如果你能让一个易受攻击的目标使用这个 PAC 文件作为他们的代理配置,那么你就可以在他们的机器上运行任意代码,”他解释道。
该漏洞严重影响那些使用 pac-resolver 5.0.0 之前版本的人,甚至在他们的 Node.js 应用程序中传递,并且:
[*]显式使用 PAC 文件进行代理配置或
[*]在启用 WPAD 的系统上读取和使用 Node.js 中的操作系统代理配置或
[*]使用env来自不受信任来源的代理配置(变量、配置文件、远程配置端点、命令行参数)
在任何这些情况下,远程攻击者都可以配置恶意 PAC URL 并在使用代理配置发出 HTTP 请求时在计算机上运行任意代码。
在5.0.0版本的PAC-解析器的修复由简单地颠簸起来 的版本踩降级到3.0.1。核心修复进入了 degenerator 本身,并 通过 vm2 模块实现了更强大的 沙箱机制,以“防止不受信任的代码的权限提升”。
Perry 感谢 Snyk 在整个协调的漏洞披露过程中支持开发人员。
受影响的开发人员应升级到 pac-resolver 5.0.0 或更高版本以修复其应用程序中的此严重漏洞。
顺便给中国红客联盟的管理反馈一个问题就是,发表文章文字不能添加链接!
页:
[1]