从上文的背景描述可以了解到,在PayPal的在线电子支付系统中, 存在企业账号A下可以设置子账号A1的情况。在此案例中攻击者通过对“查看子账号”功能进行分析,得出URL为 https://www.paypal.com/businessmanage/users/1657893467745278998的参数id值1657893467745278998表示子账号所绑定的企业账号。当用户操作此子账号查看操作时,产生了一个HTTP PUT请求,报文内容如下所示:
通过测试验证,上述PUT请求中第一个id字段值,即1657893467745278998可以替换为任意随机数值;第二个id字段值,即5994224506代表了其子账号id号。 而这第二个id字段只是简单的数值类型,其值是可以枚举的,它的 数值是可递增或递减的。攻击者只需要篡改id值,比如修改为53994224507,再次访问/businessmanage/users时,即可以查看到企业账号下关联的另一子账号的信息。
因为权限控制存在设计缺陷,攻击者只需按照上述操作方式,把相应子账号的密码进行修改,就可以实现完美的账号接管,进行任意未授权的转账操作。
此漏洞上报后,PayPal官方及时地进行了修复,并给予赏金猎人了10500美元的奖励