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

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

缺陷编号:wooyun-2012-07404

漏洞标题:Chrome 浏览器 iframe 跨域访问安全漏洞

相关厂商:Google

漏洞作者: Jam

提交时间:2012-05-22 12:11

修复时间:2012-05-22 12:11

公开时间:2012-05-22 12:11

漏洞类型:用户敏感数据泄漏

危害等级:低

自评Rank:1

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

Chrome 浏览器的iframe跨域访问处理存在安全问题,可导致那些使用iframe进行跨域数据传送的网站受到攻击,跨域传送的数据可被恶意网站获取。

详细说明:

测试用的Chrome 浏览器版本:18.0
iframe.contentWindow.name在iframe里的页面切换之后,仍然可以保留以前的内容,此种方法常被用来作JS的跨域数据获取。
正常通过iframe.contentWindow.name跨域数据获取的方法为:
1. www.jamcode.org上的页面中的JS创建一个iframe,src为google.com/test.html
2. google.com/test.html中的JS设置了window.name="数据内容"
3. 然后需要google.com/test.html中的JS*主动*location.replace跳转到jamcode.org/blank.html
这样跳转之后,iframe.contentWindow.name的内容不会丢失,并且,由于跳转完成之后,iframe与宿主页面已同域,www.jamcode.org中的JS就可以获取到iframe.contentWindow.name的内容,完成跨域数据的获取。
Chrome的安全漏洞:
通过iframe.name跨域获取数据的一个必要信任步骤是,必须是iframe中的页面主动跳转到一个和宿主页面同域的页面。但在Chrome中,可以通过宿主页面的JS去设置iframe.src为自己域的一个页面,iframe.contentWindow.name仍然会保留着,导致任意恶意页面可以获取iframe.contentWindow.name上的数据。
利用漏洞的步骤:
1. www.jamcode.org上的页面中的JS创建一个iframe,src为google.com/test.html
2. google.com/test.html中的JS设置了window.name="数据内容"
3. www.jamcode.org在监听到iframe.onload事件之后,JS直接将iframe.src设置成www.jamcode.org/blank.html不必等待iframe中主动跳转,即可将iframe设置成同域的一个页面,并且window.name的数据不会丢失。

漏洞证明:

google.com/test.html页面的代码:

<script>
window.name="uid=xxx; friends=1,23,44;...";
location.replace("plus.google.com/blank.html");
</script>


www.jamcode.org/evil.html的代码:

<script>
var iframe=document.createElement("iframe");
iframe.onload=function () {
iframe.src="/blank.html";
alert(iframe.contentWindow.name);
};
iframe.src="google.com/test.html";
</script>

修复方案:

限制为必须iframe中的页面主动中转才保留window.name的内容

iframe页面变化后即不再保留iframe.contentWindow.name的内容

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


漏洞回应

厂商回应:

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

漏洞Rank:3 (WooYun评价)


漏洞评价:

评论

  1. 2012-05-22 12:12 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    window.name我记得是可以跨域传输的,IE下也是这样

  2. 2012-05-22 12:14 | Pnig0s ( 实习白帽子 | Rank:46 漏洞数:2 | The quiter you are,the more you're able ...)

    @xsser 嗯~window.name可以跨域传输数据而且没任何过滤,带XSS的Payload首选。

  3. 2012-05-22 13:05 | Jam ( 路人 | Rank:3 漏洞数:1 | I'm CJ!)

    @xsser iframe与宿主页面不是同域时,宿主页面是不能跨域访问iframe.contentWindow.name的。Chrome的另一个问题是,将about:blank也视为和当前宿主同域在 漏洞证明 的代码中。www.jamcode.org/evil.html中的JS将iframe.src="about:blank",不必是www.jamcode.org上的某个页面,即可访问到iframe.contentWindow.name遗留下来的数据

  4. 2012-05-22 15:04 | Pnig0s ( 实习白帽子 | Rank:46 漏洞数:2 | The quiter you are,the more you're able ...)

    @Jam 这逻辑。。^^

  5. 2012-05-22 15:14 | Jam ( 路人 | Rank:3 漏洞数:1 | I'm CJ!)

    @Pnig0s 哪不对吗?

  6. 2015-01-09 09:07 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    window.name貌似本来就是在哪个浏览器都可以跨域吧