主要观点:介绍了Mutation XSS,通过解析HTML以删除不安全元素,但HTML规范的复杂性导致这是一项艰巨任务,易引发安全漏洞。阐述了Mutation XSS的概念、常见形式(如利用解析器差异、标签上下文、命名空间等)、产生漏洞的原因(如解析器错误、特性等)以及利用方法。还通过两个CVE实例(lxml_html_clean库中的漏洞及作者提出的挑战)详细说明了Mutation XSS的利用过程和绕过方法。
关键信息:
- Mutation XSS是滥用解析器,通过复杂规则使清理器解析字符串的方式与浏览器不同,从而导致安全漏洞。
- 常见的产生Mutation XSS的情况包括标签上下文差异(如<title>标签)、解析器错误(如DOMParser在不同脚本状态下对标签的解析差异)、改变输出(如在清理后的安全输出中进行微妙更改)等。
- lxml_html_clean库在处理CSS时存在漏洞,可通过巧妙构造字符串绕过其对
expression()
的检查,在IE7中实现XSS,且在现代浏览器中可利用命名空间等技巧实现全绕过。 - 作者提出的挑战利用了JSDOM的特性和命名空间混淆等技巧,通过精心构造的输入绕过了特定的 sanitizer,同时也遭遇了意想不到的解决方案。
重要细节:
- 解析HTML的步骤包括将输入解析为HTML、遍历DOM树删除不安全元素、将树序列化为HTML字符串,不同上下文和解析器对标签的处理方式不同。
- lxml_html_clean库中对CSS的处理存在问题,如对
expression()
的检查及对<style>
标签的特殊处理。 - 在作者的挑战中,利用
<annotation-xml>
、<textarea>
、<title>
等标签的特性以及命名空间的切换,结合JSDOM的行为差异,实现了XSS绕过。 - 意想不到的解决方案利用了HTML序列化和反序列化的特性,通过嵌套的
<form>
标签和MathML的交互,造成命名空间混淆,从而实现XSS。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。