CVE-2025-66021OWASP 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技术来实现代码执行。