您的位置:首页 > 编程语言 > Go语言

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

2011-12-29 00:15 561 查看
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,因此这个地方的判断不一定是绝对正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: