"pac-resolver" 是一个非常受欢迎的 NPM 软件包,通过查询可以发现该软件包每周的下载量超过 300 万次,在 GitHub 上有 28.5 万个公共依赖仓库。近日该软件包开发者推出了一个漏洞修复补丁,以解决一个可能影响很多 Node.js 应用程序的远程代码执行漏洞(RCE)。
开发人员 Tim Perry 本周披露了 pac-resolver 依赖关系中的一个高危漏洞,他指出,只要操作者试图发送 HTTP 请求,它就可能允许本地网络上的攻击者在 Node.js 进程中远程运行恶意代码。Note.js 是知名的 JavaScript 运行时环境,可用于运行基于 JavaScript 的网络应用。
该漏洞的 CVE ID 为 CVE-2021-23406,该漏洞与 pac-resolver 处理 PAC 文件的方式有关。PAC 或 Proxy-Auto Config 是指用 JavaScript 编写的 PAC 文件,用于分发复杂的代理规则,指示 HTTP 客户端对给定的主机使用哪个代理,这些文件在企业系统中被广泛使用。它们从本地网络服务器和远程服务器上分发,通常是通过不安全的 HTTP 分发而不是 HTTPS。
虽然 PAC 标准最初于 1996 年作为 Netscape Navigator 2.0 的一部分推出,但至今仍在 Amazon Web Services(CDK)、Mailgun SDK 和 Google Firebase CLI 中得到广泛运用。
它影响到任何在 Node.js 应用程序中依赖 Pac-Resolver 5.0.0 版本之前的开发者。如果开发人员做了以下三种配置,那么漏洞就会对你的项目产生影响:
- 明确使用 PAC 文件进行代理配置
- 在启用 WPAD 的系统上,读取并使用 Node.js 中的操作系统代理配置
- 使用来自任何其他不受信任来源的代理配置(环境变量、配置文件、远程配置端点、命令行参数)
在上述任何一种情况下,攻击者都可以通过配置一个恶意的 PAC URL,并在使用代理配置发送 HTTP 请求时在你的计算机上远程运行任意代码。
目前该漏洞已在 pac-resolver v5.0.0 版本中被修复了。由于 pac-resolver 的下载量极大,并且广泛应用于各类项目,这意味着很多 Node.js 应用程序的开发者都有可能受到该漏洞的影响,建议各位开发者仔细检查一下自己的项目,并确保更新到 5.0.0 版本以修复该问题。