CVE-2011-4691 Google Chrome IFRAME装载信息泄露漏洞

 

CVE-2011-4691

Google Chrome IFRAME装载信息泄露漏洞

 

 

漏洞基本描述

      URL:http://sebug.net/vuldb/ssvid-26080

      发布时间:2011-12-14

      漏洞版本:Google Chrome <= 15.0.874.121

      漏洞描述:

      Bugtraq ID: 51068

      CVE ID:CVE-2011-4691

      Google Chrome是一款流行的WEB浏览器。

      Google Chrome 15.0.874.121及其之前的版本中存在漏洞,在IFRAME加载尝试过程中,没有正确防止在违反同源策略所需的时间里采集数据,远程攻击者构建包含恶意JavaScript代码的WEB页,诱使用户解析,可判断目标用户浏览器缓存中的文件。

      <* 参考

       http://lcamtuf.coredump.cx/cachetime/ 

       http://sip.cs.princeton.edu/pub/webtiming.pdf

      *>

      测试方法:

      http://lcamtuf.coredump.cx/cachetime/

 

总结

      本漏洞是一个危害性不大的隐私泄漏漏洞。可能被别有用心的黑客用来统计用户的站点访问记录。根据我的理解这个漏洞也不是新爆发的,而是根据iframe的一些工作特性来进行触发,与浏览器的缓存机制有关系,这个漏洞IE也是有的。

      由于触发这个漏洞没有涉及很深的技术上的原因(IE有同样的问题,可以见后面的分析),因此该漏洞的修补可能需要浏览器厂商在缓存上进行策略性的修改。

      可以参考文档:http://sip.cs.princeton.edu/pub/webtiming.pdf

 

漏洞基本表现

      正确触发漏洞后,可以用于搜集用户机器上是否访问过某些站点,用于数据统计,暂未发现是否能获取更多的用户信息。

      譬如在测试机上运行漏洞触发脚本后,有如下提示:

      绿色表示访问过某某站点,灰色的表示没有访问(其实我只访问过Google Plus,其他三个可能是GooglePlus访问过或者引导的一些广告页面)。

       

漏洞原理分析

      注:原理主要基于对js脚本的分析。

      1、首先在页面上面创建了一个空白的iframe,把src设置为about:blank,<iframe id=f name=f height=20 width=200 style="opacity: 0.1" src="about:blank"></iframe>。

      2、在js脚本里面建有一个大表,里面是枚举的需要检查的站点信息。类似:

     

      3、然后就是遍历这个表,对每个站点执行检测逻辑。

      4、js代码里面给上面创建的iframe设置一个大表中的URL,然后迅速去获取iframe的属性location.href,这里看代码可能更清楚:

function navigate_to_target()

{

  cycles = 0;

  setTimeout(wait_for_noread, 1);

  urls++;

  document.getElementById("f").src = current_url;

}

 

function wait_for_noread()

{

  try {

    if (frames['f'].location.href == undefined) throw 1;

    if (cycles++ >= TIME_LIMIT) {/*重试3次*/

      maybe_test_next();

      return;

    }

    setTimeout(wait_for_noread, 1);

  } catch (e) {

    confirmed_visited = true; /*这里置用户以前访问过标志*/

    maybe_test_next();

  }

}

      注:注释由magictong添加。

 

      设置1ms后执行wait_for_noread之后(setTimeout(wait_for_noread, 1);),然后把iframe的URL设置为当前正在检测的URL,1ms后,执行if (frames['f'].location.href == undefined) throw 1的时候,如果用户已经有了缓存,frames['f'].location.href的值应该会比较快的获取,然后直接抛一个异常,认为用户访问过这个站点(这里有个问题是如果iframe里的网页和当前页面的url域名不一样时,这个值为出现未定义的状态),实际上代码这个地方有一个3次的递归重试,三次之后如果location.href的值还没有获取到则认为用户没有访问过测试站点。

      代码的写作者应该是判断过这个时间差,执行3次的时间大约是50ms,因此这个地方的判断不一定是绝对正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值