请选择 进入手机版 | 继续访问电脑版
查看: 709|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    12 小时前
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2021-9-5 17:04:13 | 显示全部楼层 |阅读模式
    不受信任的 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 或更高版本以修复其应用程序中的此严重漏洞。

    顺便给中国红客联盟的管理反馈一个问题就是,发表文章文字不能添加链接!

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表