其他分享
首页 > 其他分享> > 每周下载超 300 万次的 NPM 包被爆存在严重漏洞!

每周下载超 300 万次的 NPM 包被爆存在严重漏洞!

作者:互联网

本周,开发人员 Tim Perry 披露了一个关于 pac-resolver 的严重漏洞,当一些本地用户在发出 HTTP 请求时,黑客可通过该漏洞肆意运行用户在 Node.js 进程中的任意代码。

此次漏洞与 PAC 文件有关

在此之前,pac-resolver 包的每周下载量超过了 300 万次,这个漏洞扩张到了依赖于开源的Node.js 应用程序。Pac-resolver 自诩为一个模块,它接受 JavaScript 代理配置文件,并为应用生成一个函数来映射特定的域以使用代理。

据 Tim Perry 透露,他是在为 HTTP 工具包添加代理支持时发现这一漏洞的,当他在审核 pac-resolver 代码时却遇到了安全问题。随后这个漏洞被追踪为 CVE-2021-23406,与模块处理代理自动配置 (PAC) 文件的方式有关。

PAC 文件由指定代理配置的 JavaScript 代码组成,它决定了哪些网络请求应该通过代理,哪些应该直接发出。例如,在 PAC 文件中,网络管理员可以明确指定一个网络代理,然后所有流量都应通过该代理进行路由,访问这个列表里面的域名的时候不通过代理服务器:

function FindProxyForURL(url, host) {
// Send all *.example requests directly with no proxy:
if (dnsDomainIs(host, '.example.com')) {
return 'DIRECT';
}
// Send every other request via this proxy:
return 'PROXY proxy.example.com:8080';
}

在上面的例子中,“example.com”的网络请求将绕过代理,而其余的流量则会按照指示通过代理服务器。

讲到这里,我们就不得不提到 PAC 标准。它最初于 1996 年作为 Netscape Navigator 2.0 的一部分被推出, 直到今天仍然被广泛使用。例如,Web Proxy Auto-Discovery Protocol (WAPD) 使用 DNS 或 DHCP 服务来定位网络上的 PAC 文件,并将代理配置导入到应用程序中。然而,随着代理配置变得越来越高,PAC 文件中的 JavaScript 代码也随之变得越来越复杂,并且被理想化地设计为在虚拟化环境 (VM) 中运行。

只需几行代码就可以绕过 VM,导致 RCE(remote code execution,即远程代码执行) 

例如,一个名为 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” 模块将任意代码转换为沙箱函数。由于 Node.js 的文档中明确说明,“ vm 模块不是一种安全机制,不要用它来运行不受信任的代码” ,因此,当使用 pac-resolver、Pac-Proxy-Agent 和 proxy-agent 等包时,degenerator 的输出则会带来一定的安全风险。

Perry 在另一个博客中声称,“这是一个非常容易犯的错误,它的文本很小(坦率地说,它应该只能算是页面上的标题)”, Perry 进一步解释说:“这造成了一个大问题,虽然 VM 确实试图在一个独立的上下文中创建一个隔离的环境,但有很多简单的方法可以访问原始环境,并且能够完全摆脱沙箱……允许‘沙箱’中的代码在你的系统上做任何它想做的事情。”

在这个基础上,Perry 利用代码演示了攻击者如何突破虚拟机:

“这就是突破 VM 模块沙箱所需的全部内容,如果你能让一个易受攻击的目标使用这个 PAC 文件作为他们的代理配置,那么你就可以在他们的机器上运行任意代码,”Perry 解释道。

该漏洞严重影响那些使用 pac-resolver 5.0.0 之前版本的人,甚至在他们的 Node.js 应用程序中传递,并且在以下任意一种情况下,远程攻击者都可以配置恶意 PAC URL 并在使用代理配置发出 HTTP 请求时在计算机上运行任意代码。

在 5.0.0 版本中对 pac-resolver 的修复只是简单地将 degenerator 版本升级到 3.0.1,核心修复程序则采用了degenerator 本身,并通过 vm2 模块实现了更强大的沙箱机制,以“防止不受信任的代码的权限升级”。

最后,Perry 建议受这个漏洞影响的开发人员应尽快升级到 pac-resolver 5.0.0 或更高版本以修复其应用程序中的这种漏洞。

标签:NPM,Node,万次,300,代理,js,PAC,pac,resolver
来源: https://blog.csdn.net/csdnopensource/article/details/120087888