GLSA-202405-29:Node.js:多个漏洞

critical Nessus 插件 ID 195166

语言:

描述

远程主机受到 GLSA-202405-29 中所述漏洞的影响(Node.js:多个漏洞)

- 3.2.2、4.0.1 和 5.0.5 之前的 y18n 程序包容易受到原型污染影响。(CVE-2020-7774)

- 在 c-ares 库中发现一个缺陷,其中未对 DNS(域名服务器)返回的主机名进行输入验证检查,可导致输出错误的主机名,进而可能导致域劫持。此漏洞最大的威胁在于机密性和完整性,以及系统可用性。(CVE-2021-3672)

- 使用“unknownProtocol”建立连接的尝试次数过多时,版本低于 10.24.0、12.21.0、14.16.0、15.10.0 的 Node.js 容易遭受拒绝服务攻击。这会导致文件描述符泄露。如果在系统上配置了文件描述符限制,则服务器无法接受新的连接,同时还会阻止进程打开文件。如果未配置文件描述符限制,则会造成内存使用过度,导致系统内存不足。
(CVE-2021-22883)

- 白名单中包含 localhost6 时,版本低于 10.24.0、12.21.0、14.16.0、15.10.0 的 Node.js 容易遭受 DNS 重新绑定攻击。当 /etc/hosts 中不存在 localhost6 时,这只是一个通过网络上的 DNS 进行解析的普通域。如果攻击者控制了受害者的 DNS 服务器,或者可以伪造其响应,则可使用 localhost6 域绕过 DNS 重新绑定保护。只要攻击者使用 localhost6 域,他们就可以应用 CVE-2018-7160 中所述的攻击。(CVE-2021-22884)

- 使用 uv__idna_toascii() 将字符串转换为 ASCII 时,Node.js 16.4.1 之前版本、14.17.2 版、12.22.2 版容易受到越界读取漏洞的影响。读取并增加指针 p 时,未检查其是否超出 pe,而后者有一个指向缓冲区末尾的指针。这可导致信息泄露或崩溃。此函数可通过 uv_getaddrinfo() 触发。(CVE-2021-22918)

- 低于 16.6.0、14.17.4 和 12.22.4 版的 Node.js 容易受到释放后使用攻击,攻击者可能利用内存损坏来更改进程行为。(CVE-2021-22930)

- 低于 16.6.0、14.17.4 和 12.22.4 版本的 Node.js 容易受到远程代码执行、XSS、应用程序崩溃漏洞的影响,这是因为缺少对 Node.js dns 库中域名服务器返回的主机名的输入验证,这可导致使用该库的应用程序中存在错误主机名输出(导致域劫持)和注入漏洞。(CVE-2021-22931)

- 如果未正确使用 Node.js https API,并且为 rejectUnauthorized 参数传入了 undefined,则应用程序不会返回任何错误,且会接受与具有过期证书的服务器的连接。(CVE-2021-22939)

- 低于 16.6.1、14.17.5 和 12.22.5 版的 Node.js 容易受到释放后使用攻击,攻击者可能利用内存损坏来更改进程行为。(CVE-2021-22940)

- 解析器接受冒号前的标头名称后带有空格 (SP) 的请求。这可导致低于 2.1.4 版和 6.0.6 版的 llhttp 发生 HTTP 请求走私问题。(CVE-2021-22959)

- 在低于 2.1.4 版和 6.0.6 版的 llhttp 中,parse 函数会在解析分块请求正文时忽略区块扩展。在某些情况下,这会导致 HTTP 请求走私 (HRS)。(CVE-2021-22960)

- 4.4.16、5.0.8、6.1.7 之前版本的 npm 程序包 tar(也称为 node-tar)中存在任意文件创建/覆盖级任意代码执行漏洞。“node-tar”的目的在于保证应用程序不会提取任何位置会被符号链接修改的文件。这部分是通过确保提取的目录不是符号链接来实现的。此外,为防止不必要的“stat”调用,以确定给定的路径是否为目录,创建目录时会缓存路径。
当提取同时包含目录和与目录同名的符号链接的 tar 文件时,此逻辑尚不充分,其中存档条目中的符号链接和目录名称在 posix 系统上使用反斜线作为路径分隔符。缓存检查逻辑同时使用“\”和“/”字符作为路径分隔符,但“\”在 posix 系统上属于有效的文件名字符。通过先创建一个目录,然后用符号链接替换该目录,用户可以绕过针对目录的“node-tar”符号链接检查,这基本上允许不受信任的 tar 文件以符号链接指向任意位置,然后将任意文件提取到该位置,从而允许应用程序创建和覆盖任意文件。此外,不区分大小写的文件系统也会出现类似的混淆问题。如果 tar 存档在 `FOO` 中加入一个目录,后跟一个名为 `foo` 的符号链接,则在不区分大小写的文件系统上创建符号链接时,将从文件系统中删除该目录,但不会从内部目录缓存中删除目录,因为该目录不会被视为缓存命中。`FOO` 目录中的后续文件条目将被放置在符号链接的目标中,并认为该目录已经成功创建。这些问题已在 4.4.16、5.0.8、6.1.7 版本中解决。node-tar 的 v3 分支已弃用,且未收到针对这些问题的补丁。如果您仍在使用 v3 版本,我们建议您更新到较新的 node-tar 版本。
如果无法执行此操作,可参阅引用的 GHSA-9r2w-394v-53qc 查找解决方法。(CVE-2021-37701)

- 4.4.18、5.0.10、6.1.9 之前版本的 npm 程序包 tar(也称为 node-tar)中存在任意文件创建/覆盖级任意代码执行漏洞。“node-tar”的目的在于保证应用程序不会提取任何位置会被符号链接修改的文件。这部分是通过确保提取的目录不是符号链接来实现的。此外,为防止不必要的“stat”调用,以确定给定的路径是否为目录,创建目录时会缓存路径。
当提取同时包含目录和符号链接的 tar 文件时,此逻辑并不充分,其名称包含标准化为相同值的 unicode 值。此外,在 Windows 系统上,长路径部分将解析为其 8.3 短路径对应项相同的文件系统实体。因此,特制的 tar 存档可能包含具有一种形式路径的目录,后跟具有解析为相同文件系统实体的不同字符串的符号链接,并后跟使用第一种形式的文件。通过先创建一个目录,然后用一个符号链接(具有不同的明显名称,并解析为文件系统中的相同条目)替换该目录,用户可以绕过针对目录的“node-tar”符号链接检查,这基本上允许不受信任的 tar 文件以符号链接指向任意位置,然后将任意文件提取到该位置,从而允许应用程序创建和覆盖任意文件。这些问题已在 4.4.18、5.0.10、6.1.9 版本中解决。
node-tar 的 v3 分支已弃用,且未收到针对这些问题的补丁。如果您仍在使用 v3 版本,我们建议您更新到较新的 node-tar 版本。如果无法执行此操作,可参阅引用的 GHSA-qq89-hq3f-393p 查找解决方法。(CVE-2021-37712)

- 计算依存关系树和管理 npm 命令行界面的“node_modules”文件夹层次结构的库“@npmcli/arborist”旨在保证满足程序包依存关系约定,并保证程序包内容会提取到预期文件夹中。这在一定程度上是通过以下方式实现的:解析“package.json”清单中为具有特定名称的依存关系而定义的依存关系说明符,以及嵌套文件夹以解决冲突的依存关系。当多个依存关系仅在名称上存在不同时,Arborist 的内部数据结构会将它们视为可在“node_modules”层次结构的同一级别中共存的独立项目。但是,在不区分大小写的文件系统(例如 macOS 和 Windows)上,情况并非如此。结合“file:/some/path”等符号链接依赖关系,这允许攻击者造成可将任意内容写入文件系统上的任何位置的情况。例如,“pwn-a”程序包可在其“package.json”文件中定义依存关系,例如“foo: file:/some/path”。另一个程序包“pwn-b”可定义“FOO: file:foo.tgz”等依存关系。在不区分大小写的文件系统上,如果安装了“pwn-a”,然后安装了“pwn-b”,则“foo.tgz”的内容将写入“/some/path”,而“/some/path”的任何现有内容都将被删除。在不区分大小写的文件系统上使用 npm v7.20.6 或更低版本的任何用户都可能受到影响。此问题已在 npm v7.20.7 及更高版本随附的 @npmcli/arborist 2.8.2 中修补。(CVE-2021-39134)

- 计算依存关系树和管理 npm 命令行界面的 node_modules 文件夹层次结构的库“@npmcli/arborist”旨在保证满足程序包依存关系约定,并保证程序包内容会提取到预期文件夹中。这是通过将程序包内容提取到项目的“node_modules”文件夹中来实现的。如果根项目的“node_modules”文件夹或其任何依存关系因不明原因以符号链接替换,则可允许 Arborist 将程序包依存关系写入文件系统的任意位置。请注意,程序包构件内容中包含的符号链接已被过滤掉,因此必须采用其他创建“node_modules”符号链接的方式。 1. “preinstall”脚本可将“node_modules”替换为符号链接。(可使用“--ignore-scripts”加以阻止。)2. 攻击者可向目标提供 git 存储库,指示其在根目录中运行“npm install --ignore-scripts”。这可能会成功,因为“npm install --ignore-scripts”通常无法在项目目录之外进行更改,因此可被视为安全。此问题已在 npm v7.20.7 及更高版本随附的 @npmcli/arborist 2.8.2 中修补。有关包括变通方案的更多信息,请参阅引用的 GHSA-gmw6-94gg-2rc2。(CVE-2021-39135)

- 接受任意使用者备用名称 (SAN) 类型(除非专门定义 PKI 以使用特定 SAN 类型)可导致绕过限制名称的中间体。Node.js < 12.22.9、< 14.18.3、< 16.13.2 及 < 17.3.1 的版本接受通常不会定义使用 PKI 的 URI SAN 类型。
此外,当协议允许 URI SAN 时,Node.js 未正确匹配 URI。具有此补丁的 Node.js 版本会在针对主机名检查证书时禁用 URI SAN 类型。此行为可通过 --security-revert 命令行选项恢复。 (CVE-2021-44531)

- Node.js < 12.22.9、< 14.18.3、< 16.13.2 及 < 17.3.1 的版本会将 SAN(使用者备用名称)转换为字符串格式。验证连接时,它会使用此字符串对照主机名检查对等证书。字符串格式会在证书链中使用名称限制时受到注入漏洞影响,从而允许攻击者绕过这些名称限制。Node.js 版本已修复此包含有问题的字符的转义 SAN,用以防止注入攻击。此行为可通过 --security-revert 命令行选项恢复。 (CVE-2021-44532)

- Node.js < 12.22.9、< 14.18.3、< 16.13.2 及 < 17.3.1 未正确处理多值相对可分辨名。例如,攻击者可构建包含解释为多值相对可分辨名的单值相对可分辨名的证书主题,以便注入允许绕过证书主题验证的通用名称。受影响的 Node.js 版本不接受多值相对可分辨名,因此本身不易受到此类攻击。但是,使用节点的有歧义证书主题演示的第三方代码可能容易受到攻击。 (CVE-2021-44533)

- 用于计算模平方根的 BN_mod_sqrt() 函数中包含一个缺陷,可导致其无限循环非质数模数。当在内部解析包含压缩形式的椭圆曲线公钥或具有以压缩形式编码的基点的显式椭圆曲线参数时,将会使用此函数。可以通过构建具有无效显式曲线参数的证书来触发无限循环。由于证书解析发生在证书签名验证之前,因此任何解析外部所提供证书的进程都可能遭受拒绝服务攻击。解析构建的私钥时也可能发生无限循环,因为其中可能包含显式椭圆曲线参数。因此,易受攻击的情况包括:- TLS 客户端使用服务器证书 - TLS 服务器使用客户端证书 - 从客户处获取证书或私钥的主机托管商 - 证书颁发机构解析用户的证书请求 - 解析 ASN.1 椭圆曲线参数以及使用 BN_mod_sqrt( ) 的任何其他应用程序,其中攻击者可控制易受此 DoS 问题影响的参数值。OpenSSL 1.0.2 版本在初始解析证书期间未解析公钥,这就使得触发无限循环变得稍难一些。但是,任何需要证书公钥的操作都将触发无限循环。特别是在证书签名验证期间,攻击者可使用自签名证书触发循环。OpenSSL 版本 1.0.2、1.1.1 和 3.0 会受此问题影响。2022 年 3 月 15 日发布的 1.1.1n 和 3.0.2 版本已解决此问题。已在 OpenSSL 3.0.2 中修复(影响 3.0.0、3.0.1)。已在 OpenSSL 1.1.1n 中修复(影响 1.1.1-1.1.1m)。已在 OpenSSL 1.0.2zd 中修复(影响 1.0.2-1.0.2zc)。(CVE-2022-0778)

- 缓冲区溢出可在 X.509 证书验证中触发,在名称限制检查中更是如此。请注意,这会在证书链签名验证之后发生,并且需要 CA 签署恶意证书,或者要求应用程序在未能构建到受信任颁发者的路径的情况下继续证书验证。攻击者可以构建恶意电子邮件地址,使堆栈上四个由攻击者控制的字节溢出。此缓冲区溢出可能会导致崩溃(造成拒绝服务)或远程代码执行。许多平台实现了堆栈溢出保护,可降低远程代码执行的风险。可根据任何给定平台/编译器的堆栈布局进一步缓解此风险。 CVE-2022-3602 的预先公告将此问题描述为“危急”。基于上述一些缓解因素的进一步分析可将此问题降级为“高危”。仍建议用户尽快升级到新版本。在 TLS 客户端中,这可通过连接到恶意服务器来触发。
在 TLS 服务器中,如果服务器请求客户端认证并连接了恶意客户端,就会触发此问题。已在 OpenSSL 3.0.7 中修复(影响 3.0.0、3.0.1、3.0.2、3.0.3、3.0.4、3.0.5、3.0.6、CVE-2022-3602)。

- 缓冲区溢出可在 X.509 证书验证中触发,在名称限制检查中更是如此。请注意,这会在证书链签名验证之后发生,并且需要 CA 签署恶意证书,或者要求应用程序在未能构建到受信任颁发者的路径的情况下继续证书验证。攻击者可特制证书中的恶意电子邮件地址,以在堆栈上溢出包含“.”字符(十进制 46)的任意数量的字节。此缓冲区溢出可能会导致崩溃(造成拒绝服务)。在 TLS 客户端中,这可通过连接到恶意服务器来触发。在 TLS 服务器中,如果服务器请求客户端认证并连接了恶意客户端,就会触发此问题。(CVE-2022-3786)

- 由于 console.table() 函数的格式化逻辑,允许将用户控制的输入传递给属性参数,同时传递一个具有至少一个属性的普通对象作为第一个参数(可能是 __proto__)是不安全的。原型污染的控制权非常有限,因为它只允许将空字符串分配给对象原型的数字键。Node.js >= 12.22.9、>= 14.18.3、>= 16.13.2 和 >= 17.3.1 的版本对已获分配这些属性的对象使用空原型。(CVE-2022-21824)

- 低于 14.20.0、16.20.0、18.5.0 的 Node.js 版本中存在操作系统命令注入漏洞,这是因为 IsAllowedHost 检查不充分所致,IsIPAddress 在发出 DBS 请求前未正确检查 IP 地址是否无效,从而导致可轻松绕过该漏洞并允许重新绑定攻击。(CVE-2022-32212)

- Node.js 的 http 模块中的 llhttp 解析器(低于 v14.20.1、v16.17.1 和 v18.9.1)未正确解析和验证传输编码标头,可导致 HTTP 请求走私 (HRS)。(CVE-2022-32213)

- Node.js 的 http 模块中的 llhttp 解析器(低于 v14.20.1、v16.17.1 和 v18.9.1)未严格使用 CRLF 序列来分隔 HTTP 请求。这可导致 HTTP 请求走私 (HRS) 攻击。
(CVE-2022-32214)

- Node.js 中 http 模块的 llhttp 解析器(低于 v14.20.1、v16.17.1 和 v18.9.1)未正确处理多行传输编码标头。这可导致 HTTP 请求走私 (HRS) 攻击。
(CVE-2022-32215)

- 在 18.x 之前及 18.40.0 版本的 linux 中,Node.js 存在加密漏洞,导致 openssl.cnf 的默认路径在某些情况下可以被非管理员用户而不是管理员用户访问,这种情况存在于升级至 OpenSSL 3 之前的版本中。(CVE-2022-32222)

- 由于 src/crypto/crypto_keygen.cc 中 SecretKeyGenTraits::DoKeyGen() 的 EntropySource() 发生变更,Node.js 18 中存在弱 WebCrypto keygen 漏洞随机性。这会导致两个问题:1) 不检查返回值,而是假设 EntropySource() 始终成功,但 EntropySource() 可能(有时会)失败。2) EntropySource() 返回的随机数据的加密强度可能不高,因此不适合作为密钥材料。(CVE-2022-35255)

- Node v18.7.0 中 http 模块的 llhttp 解析器未正确处理非以 CLRF 结尾的标头字段,这可能会导致 HTTP 请求走私攻击。(CVE-2022-35256)

- undici 是专为特定 Node.js.`=< undici@5.8.0` 用户从头编写的 HTTP/1.1 客户端,这些用户
在将未审查的输入用作请求标头时(更具体而言,`content-type` 标头内部)容易受到 _CRLF Injection_ 的影响。示例:``` import { request } from 'undici' const unsanitizedContentTypeInput = 'application/json\r\n\r\nGET /foo2 HTTP/1.1' await request('http://localhost:3000, { method: 'GET', headers: { 'content-type': unsanitizedContentTypeInput }, }) ``` 上述片段将在单个“request”API 调用中执行两个请求:1) `http://localhost:3000/` 2) `http://localhost:3000/foo2` 此问题已在 Undici v5.8.1 中修补。作为变通方案,可在发送内容类型标头时使用用户输入审查输入。(CVE-2022-35948)

- undici 是针对 Node.js.`undici` 从头编写的 HTTP/1.1 客户端。当应用程序在“undici.request”的“path/pathname”选项中接受**用户输入**时,Node.js.`undici` 容易受到 SSRF(服务器端请求伪造)的影响。如果用户指定 URL,例如 `http://127.0.0.1` 或 `//127.0.0.1` ```js const undici = require(undici) undici.request({origin: http://example.com, pathname://127.0.0.1}) ``` 它不会将请求作为 `http://example.org//127.0.0.1`(或在使用 `http://127.0.0.1 时作为 `http://example.org/http://127.0.0.1`)处理,而是会将请求作为 `http://127.0.0.1/` 处理并将其发送到 `http://127.0.0.1`。如果开发人员将用户输入传递至“undici.request”的“path”参数,可能导致 _SSRF_,因为其会假设主机名无法变更,但实际上主机名是可以变更的,因为指定的路径参数会与基本 URL 结合。此问题已在“undici@5.8.1”中修复。最佳变通方案是先验证用户输入,然后再将其传递至“undici.request”调用。(CVE-2022-35949)

- 低于 14.21.1、16.18.1、18.12.1、19.0.1 的 Node.js 版本中存在操作系统命令注入漏洞,这是因为 IsAllowedHost 检查不充分所致,IsIPAddress 在发出 DBS 请求前未正确检查 IP 地址是否无效,从而导致可轻松绕过该漏洞并允许重新绑定攻击。https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32212 中对此问题的修复不完整,新的 CVE 将完成修复。(CVE-2022-43548)

- 在 process.mainModule.__proto__.require() 中使用 __proto__ 可绕过策略机制,并且需要 policy.json 定义之外的模块。此漏洞会影响在所有以下可用的稳定版本系列中使用实验性策略机制的所有用户:v16、v18 和 v20。请注意,发布此 CVE 时,该策略是 Node.js 的一项实验性功能 (CVE-2023-30581)

- Node.js 20 中存在特权提升漏洞,该漏洞允许在启用实验性权限模型时加载任意 OpenSSL 引擎,这样可以绕过和/或禁用权限模型。
攻击复杂度很高。但是,当通过兼容的 OpenSSL 引擎调用时,crypto.setEngine() API 可用于绕过权限模型。例如,OpenSSL 引擎可通过操纵该进程的堆栈内存来在主机进程的堆内存中定位 Permission::enabled_,以此禁用主机进程中的权限模型。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。(CVE-2023-30586)

- 当使用无效的公钥借助 crypto.X509Certificate() API 创建 x509 证书时,会发生非预期终止,从而使其在攻击者可强制中断应用程序处理时容易受到 DoS 攻击,这是因为该进程会在访问通过用户代码所提供证书的公钥信息时终止。用户的当前环境将不复存在,这将导致 DoS 情况。此漏洞会影响所有可用的 Node.js 版本 v16、v18 和 v20。(CVE-2023-30588)

- 在 Node v20.2.0 中,http 模块中的 llhttp 解析器未严格使用 CRLF 序列来分隔 HTTP 请求。这可导致 HTTP 请求走私 (HRS) 攻击。CR 字符(无 LF)完全可以在 llhttp 解析器中分隔 HTTP 标头字段。根据 RFC7230 第 3 部分,只应使用 CRLF 序列分隔每个标头字段。此漏洞会影响所有可用的 Node.js 版本:v16、v18 和 v20 (CVE-2023-30589)

- crypto.createDiffieHellman() 返回的 generateKeys() API 函数仅生成缺失(或过时)的密钥,即此函数只会在尚未设置任何密钥时生成私钥,但也需要在调用 setPrivateKey() 后使用此函数计算相应的公钥。不过,文档中已说明此 API 调用会生成私有和公共 Diffie-Hellman 密钥值。记录的行为与实际行为非常不同,这种差异很容易导致使用这些 API 的应用程序中出现安全问题,这是因为 DiffieHellman 可能会被用作应用程序级安全措施的基础,因此会产生广泛的影响。(CVE-2023-30590)

- 使用“Module._load()”可绕过策略机制,并且需要给定模块的 policy.json 定义之外的模块。此漏洞会影响在所有以下可用的稳定版本系列中使用实验性策略机制的所有用户:16.x、18.x 和 20.x。请注意,发布此 CVE 时,该策略是 Node.js 的一项实验性功能。(CVE-2023-32002)

- 使用路径遍历攻击时,“fs.mkdtemp()”和“fs.mkdtempSync()”可用于绕过权限模型检查。此缺陷源于 fs.mkdtemp() API 中缺少检查,其影响是恶意执行者可创建任意目录。此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。(CVE-2023-32003)

- 已在 Node.js 版本 20 中发现一个漏洞,尤其是在实验性权限模型中。此缺陷与文件系统 API 中的缓冲区处理不当有关,导致验证文件权限时绕过遍历路径。此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。(CVE-2023-32004)

- 已在 Node.js 版本 20 中发现一个漏洞,当 --allow-fs-read 标记与非 * 参数一起使用时,此漏洞会影响使用实验性权限模型的用户。出现此缺陷的原因是模型权限不充分,无法通过“fs.statfs”API 限制文件统计数据。如此一来,恶意行为者可以从他们没有显式读取访问权限的文件中检索统计信息。此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。(CVE-2023-32005)

- 使用“module.constructor.createRequire()”可绕过策略机制,并且需要给定模块的 policy.json 定义之外的模块。此漏洞会影响在所有以下可用的稳定版本系列中使用实验性策略机制的所有用户:16.x、18.x 和 20.x。请注意,发布此 CVE 时,该策略是 Node.js 的一项实验性功能。(CVE-2023-32006)

- 使用弃用的 API“process.binding()”即可通过路径遍历绕过权限模型。
此漏洞会影响使用 Node.js 20.x 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。
(CVE-2023-32558)

- 所有以下稳定版本系列的实验性策略机制中都存在权限提升漏洞:16.x、18.x 和 20.x。使用已弃用的 API“process.binding()”可通过要求内部模块绕过策略机制,并最终利用“process.binding('spawn_sync')”运行“policy.json”文件中定义的限制之外的任意代码。请注意,发布此 CVE 时,该策略是 Node.js 的一项实验性功能。(CVE-2023-32559)

- 已在 Node.js 版本 20 中发现一个漏洞,当 --allow-fs-read 标记与非 * 参数一起使用时,此漏洞会影响使用实验性权限模型的用户。出现此缺陷的原因是模型权限不充分,无法通过 fs.watchFile API 限制文件监视。如此一来,恶意执行者便可监控他们没有明确读取权限的文件。此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。感谢 Colin Ihrig 报告此漏洞,同时感谢 Rafael Gonzaga 修复此漏洞。(CVE-2023-30582)

- 在 Node.js 20 中使用带 --allow-fs-read 标记的文件系统读取限制时,fs.openAsBlob() 可绕过实验性权限模型。出现此缺陷的原因是 fs.openAsBlob() API 中缺少检查。此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。感谢 Colin Ihrig 报告此漏洞,同时感谢 Rafael Gonzaga 修复此漏洞。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。(CVE-2023-30583)

- 已在 Node.js 版本 20 中发现一个漏洞,尤其是在实验性权限模型中。此缺陷与在验证文件权限时未正确处理路径遍历绕过有关。
此漏洞会影响使用 Node.js 20 中的实验性权限模型的所有用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。感谢 Axel Chong 报告此漏洞,同时感谢 Rafael Gonzaga 修复此漏洞。
(CVE-2023-30584)

- Node.js 版本 20 中存在一个漏洞,允许使用内置检查器模块 (node:inspector) 绕过由 --experimental-permission 标记设置的限制。通过利用工作线程类创建具有 kIsInternal Symbol 的内部工作线程的功能,如果在工作线程构造函数中附加了检查器,攻击者便可在初始化新的 WorkerImpl 之前修改 isInternal 值。
此漏洞仅会影响在 Node.js 20 中使用权限模型机制的 Node.js 用户。请注意,发布此 CVE 时,该权限模块是 Node.js 的一项实验性功能。感谢 mattaustin 报告此漏洞,同时感谢 Rafael Gonzaga 修复此漏洞。(CVE-2023-30587)

请注意,Nessus 尚未测试这些问题,而是只依据应用程序自我报告的版本号进行判断。

解决方案

所有 Node.js 20 用户皆应升级至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-20.5.1 所有 Node.js 18 用户皆应升级至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-18.17.1 所有 Node.js 16 用户皆应升级至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-16.20.2

另见

https://security.gentoo.org/glsa/202405-29

https://bugs.gentoo.org/show_bug.cgi?id=772422

https://bugs.gentoo.org/show_bug.cgi?id=781704

https://bugs.gentoo.org/show_bug.cgi?id=800986

https://bugs.gentoo.org/show_bug.cgi?id=805053

https://bugs.gentoo.org/show_bug.cgi?id=807775

https://bugs.gentoo.org/show_bug.cgi?id=811273

https://bugs.gentoo.org/show_bug.cgi?id=817938

https://bugs.gentoo.org/show_bug.cgi?id=831037

https://bugs.gentoo.org/show_bug.cgi?id=835615

https://bugs.gentoo.org/show_bug.cgi?id=857111

https://bugs.gentoo.org/show_bug.cgi?id=865627

https://bugs.gentoo.org/show_bug.cgi?id=872692

https://bugs.gentoo.org/show_bug.cgi?id=879617

https://bugs.gentoo.org/show_bug.cgi?id=918086

https://bugs.gentoo.org/show_bug.cgi?id=918614

插件详情

严重性: Critical

ID: 195166

文件名: gentoo_GLSA-202405-29.nasl

版本: 1.1

类型: local

发布时间: 2024/5/8

最近更新时间: 2024/5/8

支持的传感器: Nessus

风险信息

VPR

风险因素: High

分数: 7.3

CVSS v2

风险因素: High

基本分数: 7.5

时间分数: 5.9

矢量: CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P

CVSS 分数来源: CVE-2021-22931

CVSS v3

风险因素: Critical

基本分数: 9.8

时间分数: 8.8

矢量: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

时间矢量: CVSS:3.0/E:P/RL:O/RC:C

CVSS 分数来源: CVE-2023-32002

漏洞信息

CPE: p-cpe:/a:gentoo:linux:nodejs, cpe:/o:gentoo:linux

必需的 KB 项: Host/local_checks_enabled, Host/Gentoo/release, Host/Gentoo/qpkg-list

可利用: true

易利用性: Exploits are available

补丁发布日期: 2024/5/8

漏洞发布日期: 2020/11/17

参考资料信息

CVE: CVE-2020-7774, CVE-2021-22883, CVE-2021-22884, CVE-2021-22918, CVE-2021-22930, CVE-2021-22931, CVE-2021-22939, CVE-2021-22940, CVE-2021-22959, CVE-2021-22960, CVE-2021-3672, CVE-2021-37701, CVE-2021-37712, CVE-2021-39134, CVE-2021-39135, CVE-2021-44531, CVE-2021-44532, CVE-2021-44533, CVE-2022-0778, CVE-2022-21824, CVE-2022-32212, CVE-2022-32213, CVE-2022-32214, CVE-2022-32215, CVE-2022-32222, CVE-2022-35255, CVE-2022-35256, CVE-2022-35948, CVE-2022-35949, CVE-2022-3602, CVE-2022-3786, CVE-2022-43548, CVE-2023-30581, CVE-2023-30582, CVE-2023-30583, CVE-2023-30584, CVE-2023-30586, CVE-2023-30587, CVE-2023-30588, CVE-2023-30589, CVE-2023-30590, CVE-2023-32002, CVE-2023-32003, CVE-2023-32004, CVE-2023-32005, CVE-2023-32006, CVE-2023-32558, CVE-2023-32559