IPBUF安全漏洞报告
English
CVE-2026-33672 CVSS 5.3 中危

CVE-2026-33672 Picomatch方法注入漏洞

披露日期: 2026-03-26

漏洞信息

漏洞编号
CVE-2026-33672
漏洞类型
方法注入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Picomatch

相关标签

方法注入正则表达式注入逻辑漏洞PicomatchJavaScript

漏洞概述

Picomatch是一个JavaScript glob匹配器。在特定版本之前,由于POSIX_REGEX_SOURCE对象继承自Object.prototype,攻击者可利用特制的POSIX括号表达式(如[[:constructor:]])引用继承方法名。这些方法被隐式转换为字符串并注入生成的正则表达式,导致glob匹配行为错误,可能绕过基于文件名的过滤或访问控制逻辑。

技术细节

该漏洞源于Picomatch库中`POSIX_REGEX_SOURCE`对象的实现机制。该对象默认继承自`Object.prototype`,因此包含了JavaScript对象原型上的所有方法(如constructor, toString等)。当用户传入包含POSIX字符类的glob模式(例如`[[:constructor:]]`)时,库未能正确过滤,直接将`constructor`等关键字作为正则表达式的一部分进行拼接。由于这些方法在被转换为字符串时通常返回函数源码(如`function Object() { [native code] }`),而非预期的字符类定义,导致生成的正则表达式逻辑发生改变。虽然攻击者无法直接执行远程代码(RCE),但这种不匹配会导致应用程序在文件过滤、验证或访问控制时产生逻辑错误,可能匹配到本应被排除的文件,从而造成安全隐患。

攻击链分析

STEP 1
步骤1:识别目标
攻击者识别出目标应用程序使用了存在漏洞的Picomatch版本来处理用户输入的glob模式。
STEP 2
步骤2:构造Payload
攻击者构造一个包含恶意POSIX括号表达式的字符串,例如`[[:constructor:]]`,该表达式引用Object.prototype上的方法名。
STEP 3
步骤3:发送请求
攻击者将精心构造的Payload作为文件匹配参数发送给应用程序。
STEP 4
步骤4:注入与转换
Picomatch在处理模式时,将引用的方法(如constructor)隐式转换为字符串(函数源码),并将其注入到最终生成的正则表达式中。
STEP 5
步骤5:逻辑破坏
生成的正则表达式逻辑被破坏,导致匹配结果异常。应用程序可能错误地匹配本应被过滤的文件,从而绕过安全检查或访问控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-33672 // Demonstrating method name injection via POSIX bracket expressions const pm = require('picomatch'); // A maliciously crafted glob pattern targeting the 'constructor' property const maliciousPattern = '[[:constructor:]]'; try { // The library attempts to resolve [[:constructor:]] by looking up Object.prototype.constructor // and converting it to a string, injecting it into the regex. // This results in a broken regex or logic bypass. const isMatch = pm(maliciousPattern); console.log("Testing pattern:", maliciousPattern); // Depending on the specific implementation details and the string representation of the method, // this might match unintended strings or throw an error during compilation. console.log("Match result for 'function Object()':", isMatch('function Object() { [native code] }')); // This demonstrates the injection vulnerability } catch (e) { console.error("Error triggered by PoC:", e.message); }

影响范围

Picomatch < 4.0.4
Picomatch < 3.0.2
Picomatch < 2.3.2

防御指南

临时缓解措施
如果无法立即升级,应避免处理不受信任的glob模式。建议通过清理或拒绝包含POSIX字符类(特别是`[[:...:]]`格式)的输入来缓解风险;或者在涉及用户输入时完全避免使用POSIX括号表达式;也可以通过修改`POSIX_REGEX_SOURCE`使用null原型来手动修补库。

参考链接

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