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

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

缺陷编号:wooyun-2015-099933

漏洞标题:小米手机的短信找回功能存在重放攻击风险

相关厂商:小米科技

漏洞作者: Mr.Anderson

提交时间:2015-03-08 10:28

修复时间:2015-06-07 20:20

公开时间:2015-06-07 20:20

漏洞类型:设计错误/逻辑缺陷

危害等级:中

自评Rank:5

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

安全不是粗枝大叶,也不是危言耸听。该漏洞利用条件及其有限,但是如果真的利用成功,风险也是存在的。

详细说明:

综述:
访问小米的手机找回官网http://i.xiaomi.com 可以发起手机找回功能的请求。
该功能和手机配合的时候,默认是通过网络信道(如WiFi,3G,4G等)进行请求/响应。但是,如果将网络信道关闭,则只能通过小米科技的短信网关进行手机找回功能的操作。我发现小米没有对短信的请求命令来源做检查,于是有了如下报告。
攻击方式:
将网络信道完全关闭,如数据通道、WiFi关闭。
1、假设小米手机的账号是18512345678,使用该手机账户登陆http://i.xiaomi.com,关闭原来的小米手机的数据通信和WiFi,并插上另外一张电话卡,假设是13343214321.
2、把18512345678的电话卡插在任一一台非小米科技的手机上,然后在http://i.xiaomi.com上发起手机响铃告警的请求。如果没什么意外,18512345678会收到如下格式的短信:
mfc,n,358912345,1425631167071,E132AA0##【小米】
该格式分析如下:
mfc:控制代码
n:该处为指令集,n (noise) 表示要响铃,其他有指令,如:l(location),e(erase),
358912345:消息的序列号,用来对短信重传进行限制
1425631167071:时间戳
E132AA0:这个应该是服务器生成的Token,用来验证是否由服务器发送。
3、现在把这个短信发给插在小米手机上的13343214321,没错,短信执行了。同时,你的18512345678这台非小米手机还会收到13343214321的返回信息,比如当前运营商啊之类,如果你发的是手机位置的请求,没错,你的手机还会收到当前手机的经度纬度。
====================
感觉小米应该是对这个短信来源有判断,短信网关xml文件如下:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="auto_activate_fail_popup_shown" value="false" />
<null name="last_auto_uplink_sim_id_0" />
<string name="pseudo_device_id">12181fea7c32fcc7</string>
<string name="sms_gw_config_v2">{"mtWe ight":-1,"mo":{"4600[35]":["1069036135578","106902910001"],"4600[16]":["1069036135578","106902910001"],"default":["+447786209730"],"40[45][0-9]+":["+919902379055"],"454[0-9]+":["+85296657317"],"466[0-9]+":["+886931181528"],"525[0-9]+":["+6590247085"],"515[0-9]+":["+639229992145"],"46020":["1069036135578","106902910001"],"4600[0278]":["1069036135578","106902910001"],"502(0|1[0-79])[0-9]*":["33488"]},"uploadPhone_back":[{"global":"+447786209730"},{"chinaUnicom":"106902910001"},{"id":"+919902379055"},{"chinaTelcom":"106902910001"},{"tw":"+886931181528"},{"ph":"+639229992145"},{"chinaMobile":"106902910001"},{"hk":"+85296657317"},{"ml":"33488"},{"sg":"+6590247085"}],"mt":["^[+]447786209730","^1069[0-9]+","^106[95][0-9]+","^[+]85296657317","^9513[0-9]+","^[+]886931181528"],"ac.url":{"460[0-9]+":"https:\/\/cnac.account.xiaomi.com","default":"https:\/\/sgpac.account.xiaomi.com"},"uploadPhone":[{"global":"+447786209730"},{"chinaUnicom":"1069036135578"},{"id":"+919902379055"},{"chinaTelcom":"1069036135578"},{"tw":"+886931181528"},{"ph":"+639229992145"},{"chinaMobile":"1069036135578"},{"hk":"+85296657317"},{"ml":"33488"},{"sg":"+6590247085"}],"idc":{"China":{"userId.min":0,"idc.id":310,"login.url":"https:\/\/account.xiaomi.com","userId.max":1540000000},"Singapore":{"userId.min":1540000000,"idc.id":311,"login.url":"https:\/\/account.xiaomi.com","userId.max":1949999999}},";moWeight";:2}</string>
</map>


但是不知道为什么小米的cloudservice没有做详细检查。
攻击场景:
这个攻击场景很有限,具体方式不表。

漏洞证明:

IMG_2217.jpg


IMG_2218.jpg


修复方案:

版权声明:转载请注明来源 Mr.Anderson@乌云


漏洞回应

厂商回应:

危害等级:低

漏洞Rank:5

确认时间:2015-03-09 20:19

厂商回复:

感谢白帽子提交漏洞。首先,该问题应该不算是重放攻击漏洞,我们的客户端对重放攻击是有防范的,是有时间的校验的。严格来说,此问题应该算是某种极端场景下的中间人劫持。因为某些原因,我们的找回流程没有达到极致的严谨,这方面我们会尽快修复的更好。

正如洞主自己所描述,这种劫持对时机和权限的要求极高,如果攻击者这能有这样的场景,即使不利用此漏洞,也可以对用户造成很大的伤害。

攻击者需要如下场景才可以利用此漏洞(比如获得机主的位置信息):
1. 攻击者有目标手机的小米账户的用户名密码
2. 攻击者要能随意折腾使用目标用户的手机(比如偷走用户的sim卡或者插入自己的sim卡而不被发现)
3. 并且在动完手脚后,目标手机永远不再联网

综上所述,我们认为此漏洞对真实场景中的用户的影响是极其有限,属于低危漏洞,但很有技术含量,赞一下洞主的细心。

最新状态:

暂无