IPBUF安全漏洞报告
English
CVE-2025-66021 CVSS 6.1 中危

CVE-2025-66021 OWASP Java HTML Sanitizer XSS漏洞

披露日期: 2025-11-26

漏洞信息

漏洞编号
CVE-2025-66021
漏洞类型
XSS
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
OWASP Java HTML Sanitizer

相关标签

XSS跨站脚本OWASPJava HTML SanitizerHTML清理CVE-2025-66021Web安全输入验证

漏洞概述

OWASP Java HTML Sanitizer是一个用Java编写的可配置HTML清理器,允许在Web应用程序中包含第三方创作的HTML,同时防止XSS攻击。该产品广泛应用于需要过滤用户输入HTML内容的Java Web应用中。2025年披露的CVE-2025-66021漏洞影响版本20240325.1,当使用HtmlPolicyBuilder配置清理策略时,如果允许noscript标签和style标签,并且在style标签内使用allowTextIn允许文本内容,攻击者可以构造特殊构造的HTML payload绕过安全过滤。攻击者利用CSS解析的复杂性和HTML清理器的解析差异,注入恶意脚本代码。成功利用此漏洞可窃取用户会话令牌、劫持用户账户、修改页面内容或重定向用户到钓鱼网站。由于该漏洞需要用户交互才能触发(点击链接或查看包含恶意内容的页面),因此攻击复杂度较高,但仍然对使用该库保护用户输入的Web应用构成实质性威胁。

技术细节

该漏洞的根本原因在于OWASP Java HTML Sanitizer在处理noscript和style标签组合时的解析逻辑缺陷。当开发者使用HtmlPolicyBuilder配置如下策略时:允许noscript标签、允许style标签、且在style标签内使用allowTextIn()允许文本内容,此时清理器会对这些标签的特殊组合处理不当。攻击者构造的payload利用了以下技术细节:1) noscript标签在现代浏览器中的解析行为变化,当JavaScript被禁用时,浏览器会将noscript标签内容作为纯文本解析;2) style标签内的文本内容可能被清理器作为CSS规则处理,但清理器未能正确识别和过滤CSS表达式中的恶意代码;3) 通过精心设计的payload结构,可以绕过清理器的正则表达式匹配规则。由于清理器在解析HTML时与浏览器实际渲染时的行为差异,导致看似被过滤的内容在实际浏览器中可能被执行为脚本。攻击者可通过在style标签内嵌入特殊构造的CSS表达式或利用其他CSS相关的XSS技术来实现代码执行。

攻击链分析

STEP 1
步骤1
攻击者识别目标Web应用使用OWASP Java HTML Sanitizer进行输入过滤
STEP 2
步骤2
攻击者分析应用的HTML清理策略配置,寻找noscript和style标签的允许规则
STEP 3
步骤3
攻击者构造包含style标签的XSS payload,利用allowTextIn在style内注入恶意CSS表达式或脚本代码
STEP 4
步骤4
HTML清理器由于解析逻辑缺陷,未能正确过滤恶意内容,将payload写入数据库或响应
STEP 5
步骤5
受害者访问包含恶意内容的页面,浏览器解析时执行注入的脚本代码
STEP 6
步骤6
攻击者通过XSS成功窃取用户Cookie、会话令牌或其他敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import org.owasp.html.HTMLPolicyBuilder; import org.owasp.html.Sanitizers; public class XSSPoC { public static void main(String[] args) { // 配置存在漏洞的HTML清理策略 String unsafePolicy = new HTMLPolicyBuilder() .allowElements("noscript", "style") .allowAttributes("type").onElements("style") .allowTextIn("style") .toFactory() .toString(); // 恶意payload示例 String maliciousPayload = "<noscript><style type=\"text/css\">" + "body{background:url(javascript:alert('XSS'))}" + "</style></noscript>"; // 使用OWASP Sanitizer清理 String safeHTML = new HTMLPolicyBuilder() .allowElements("noscript", "style", "p", "div", "span") .allowAttributes("type").onElements("style") .allowTextIn("style", "p", "div", "span") .allowTextIn("noscript") .build() .sanitize(maliciousPayload); System.out.println("Sanitized output: " + safeHTML); } }

影响范围

OWASP Java HTML Sanitizer 20240325.1

防御指南

临时缓解措施
临时缓解措施:在官方补丁发布前,应立即审查所有使用HtmlPolicyBuilder配置的清理策略,确保未同时启用noscript和style标签的allowTextIn配置。可考虑临时禁用这些标签的允许规则,或使用更严格的标签过滤策略。同时,建议在应用层添加额外的安全检测机制,如对用户提交的HTML内容进行深度分析,检测潜在的CSS表达式和脚本注入特征。此外,部署Content Security Policy (CSP)头部限制脚本执行,即使XSS成功也难以执行恶意代码。对于高风险场景,可考虑完全禁用用户提交HTML的功能,改用安全的富文本格式如Markdown。

参考链接

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