突变 XSS:解释、CVE 和挑战 | Jorian Woltjer

主要观点:介绍了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。
阅读 9
0 条评论