ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-09-03 19:00:36  阅读:189  来源: 互联网

标签:NPM Node 万次 300 代理 js PAC pac resolver


本周,开发人员 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 请求时在计算机上运行任意代码。

  • 使用 PAC 文件进行代理配置
  • 在启用 WPAD 的系统上读取和使用 Node.js 中的操作系统代理配置
  • 使用不受信任来源的代理配置( env、配置文件、远程配置端点、命令行参数)

在 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有