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

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

缺陷编号:wooyun-2015-0124949

漏洞标题:fanwe O2O用户密码可劫持(通用/开源软件jsonp劫持案例)

相关厂商:fanwe.com

漏洞作者: phith0n

提交时间:2015-07-06 17:52

修复时间:2015-10-05 10:14

公开时间:2015-10-05 10:14

漏洞类型:敏感信息泄露

危害等级:高

自评Rank:12

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

TSRC西安沙龙议题之Fanwe o2o。(通用/开源应用中的jsonp劫持案例)

详细说明:

/mapi/Lib/core/common.php中有 fanwe o2o的output函数:

/**
* 输出接口数据
* @param unknown_type $data 返回的接口数据
* @param unknown_type $status 当前状态 0/1
* @param unknown_type $info 当前消息 可选,为空时由客户端取默认提示(默认提示包含成功的默认提示与失败的默认提示)
*/
function output($data,$status=1,$info="")
{
header("Content-Type:text/html; charset=utf-8");
$r_type = intval($_REQUEST['r_type']);//返回数据格式类型; 0:base64;1;json_encode;2:array 3:jsonp
$data[CTL] = MODULE_NAME;
$data[ACT] = ACTION_NAME;
$data['status'] = $status;
$data['info'] = $info;
$data['city_name'] = $GLOBALS['city']['name'];
$data['return'] = 1; //弃用该返回,统一返回1
$data['sess_id'] = $GLOBALS['sess_id'];
if ($r_type == 0)
{
echo base64_encode(json_encode($data));
}
else if ($r_type == 1)
{
echo(json_encode($data));
}
else if ($r_type == 2)
{
print_r($data);
}
else if($r_type == 3)
{
$json = json_encode($data);
echo $_GET['callback']."(".$json.")";
}
exit;
}


这是一个通用的输出函数,所有/mpai下的输出全部由output输出。
我们可以看到,这里当$_REQUEST['r_type']==3的时候,输出格式为jsonp。
所以,如果$data中有敏感信息,即会造成jsonp劫持。
结果当前函数中就存在一个敏感信息:sess_id
$data['sess_id'] = $GLOBALS['sess_id'];
用户登陆后(fanwe o2o 默认用户账号密码都是fanwe,以这个用户为例),可劫持用户的session(http://o2odemo.fanwe.net/mapi/index.php?ctl=syncbind&act=index&login_type=Sina&access_token=ooooo&sina_id=ooooo&r_type=3&callback=wooyun):

QQ20150706-14@2x.png


继续深挖,刚才访问的这个URL(http://o2odemo.fanwe.net/mapi/index.php?ctl=syncbind&act=index&login_type=Sina&access_token=ooooo&sina_id=ooooo&r_type=3&callback=wooyun),实际上就是将账户fanwe绑定了sina_id为ooooo。
那么另外一处,我们可以直接用ooooo进行登录:
http://o2odemo.fanwe.net/mapi/index.php?ctl=synclogin&act=index&login_type=Sina&sina_id=ooooo&access_token=ooooo&r_type=3&callback=wooyun

QQ20150706-15@2x.png


如上图,可以直接劫持用户密码。
写了个POC证明问题。受害者登录http://o2odemo.fanwe.net,再访问该POC即会弹出他的账号、邮箱、密码:
http://mhz.pw/game/tx/fanweo2o.html

QQ20150706-16@2x.png

漏洞证明:

http://mhz.pw/game/tx/fanweo2o.html

QQ20150706-16@2x.png

修复方案:

敏感信息不要输出。

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2015-07-07 10:12

厂商回复:

已确认,但该漏洞主要在首次需要得到用户的帐号密码做首次登录,或者通过其他途径(如病毒)得到其他用户http传输中的隐私信息才可对他人用户身份进行劫持。因此风险较低,后续我们会改善手机接口的传输加密。

最新状态:

暂无


漏洞评价:

评论

  1. 2015-07-06 17:55 | 紫霞仙子 ( 普通白帽子 | Rank:2027 漏洞数:279 | 天天向上 !!!)

    沙发

  2. 2015-07-06 17:59 | 疯狗 认证白帽子 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    好案例,jsonp的基本都是黑箱的,终于有个百盒的

  3. 2015-07-06 18:00 | myhalo ( 普通白帽子 | Rank:281 漏洞数:55 | 所属团队:TSafe)

    关注

  4. 2015-07-06 20:59 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    这次选 通用型 了没

  5. 2015-07-06 21:00 | phith0n 认证白帽子 ( 普通白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @px1624 选了>.<

  6. 2015-07-07 12:34 | phith0n 认证白帽子 ( 普通白帽子 | Rank:656 漏洞数:107 | 一个想当文人的黑客~)

    @fanwe.com不用得到用户账号密码做首次登陆,只要让用户访问我的POC即可。看来官方还是不了解jsonp的危害呀。。。

  7. 2015-07-08 10:00 | 魔鬼的步伐 ( 实习白帽子 | Rank:63 漏洞数:16 | 一步两步,是魔鬼的步伐)

    给个中等可以了,需要交互,变相的csrf 么,不过官方的回复貌似没有搞懂这个原理