当前位置: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传输中的隐私信息才可对他人用户身份进行劫持。因此风险较低,后续我们会改善手机接口的传输加密。

最新状态:

暂无