漏洞概要 关注数(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标签: 无
漏洞详情
披露状态:
2013-08-08: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-08-08: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
Chrome/IE 判断和渲染考虑不周导致的一种XSS Filter绕过
内容很简单=。=勿太期待……XSS过滤器必须在页面渲染之前执行的逻辑,使得特殊情况下传入任意标签都可以绕过
详细说明:
如下代码:
http://vicitim/a.html
由于document.write写入的位置在页面结尾,假如攻击者使用如下网址访问页面:
http://vicitim/a.html?<img src=x onerror=alert(6);//
注意这儿传入的是一个不完整的标签,此时页面没有开始渲染(XSS过滤器必须在渲染之前执行,这个逻辑很简单~),XSS过滤器模拟执行得到的页面内容为:
这时由于最后一个标签有误(不完整),所以在XSS过滤器预先判定时,按DOM内容来判断,最后一个也只是#TEXT文本,而不是标签,没有进入过滤流程。
按照动作判定时,最后一个标签不完整,仍然无法执行任何事件,XSS代码并没有触发,XSS过滤器因此判断这个页面安全。问题就出在这儿。
真实渲染的时候,由于XSS代码(HTML文本)出现在页面</html></body>之后,所以浏览器渲染引擎需要扩充<html>的范围为:
问题来了:这时标签会被闭合:
形成了如下标签:
规范化后为:
由于页面此时缺</body>标签封闭,浏览器还会再加一个</body>,最终显示结果为:
alert(6)执行。
漏洞证明:
修复方案:
渲染时应避免和不完整的标签组合成一个新标签
版权声明:转载请注明来源 blast@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝