CVE-2026-8162该漏洞存在于 multiparty 库 4.2.3 及更低版本中,这是一个在 Node.js 生态系统中广泛使用的用于解析 multipart/form-data 请求的库。漏洞的核心在于对 Content-Disposition 头部字段中 filename* 参数的不当处理。当攻击者向服务器发送特制的恶意请求时,若 filename* 参数包含格式错误的百分号编码,multiparty 解析器在调用 decodeURI 函数对其进行解码时,会抛出 URIError 异常。由于相关代码逻辑中未包含异常捕获模块,该错误将作为未捕获异常传播,直接导致 Node.js 进程崩溃。这使得攻击者能够在无需用户交互或认证的情况下,远程发起拒绝服务攻击,导致目标服务不可用。鉴于该组件的高使用率,其潜在影响范围较大。
该漏洞属于典型的因输入验证不足和异常处理缺失导致的拒绝服务漏洞。从技术原理上分析,multiparty 库旨在帮助 Node.js 应用程序解析复杂的 multipart/form-data 表单数据,通常用于文件上传场景。根据 RFC 5987 规范,Content-Disposition 头部支持扩展参数 filename*,该参数允许使用字符集和语言标签,并且其值通常包含经过百分号编码的字符。在受影响版本的代码实现中,multiparty 直接使用了 JavaScript 内置的 decodeURI() 函数来解码该参数。
decodeURI() 函数具有严格的输入要求,当遇到不完整的百分号序列(如单独的 '%')或无效的十六进制字符(如 '%zz')时,它会强制抛出 URIError 异常。在正常的防御性编程实践中,此类可能受用户输入影响的函数调用应当被包裹在 try-catch 块中以捕获潜在的运行时错误。然而,multiparty 在此处的实现缺乏这一保护机制。因此,当攻击者构造一个包含恶意编码字符的 HTTP 请求并发送给服务器时,解析器在处理 filename* 参数时会触发异常。由于 Node.js 的单线程事件循环机制,未捕获的异常(Uncaught Exception)被视为致命错误,默认行为是立即终止整个进程。这意味着攻击者只需发送一个数据包,就能瞬间杀掉服务进程,造成严重的服务中断。