购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 PayPal委托授权漏洞

在漏洞赏金平台上,高赏金的漏洞每年都有。2019年73月,国外漏洞赏金平台HackerOne上报告了一个PayPal用户API相关的漏洞。

3.2.1 委托授权漏洞基本信息

委托授权漏洞与用户的委托授权场景相关,平台截图与漏洞描述如图3-3所示。

●图3-3 HackerOne平台PayPal漏洞记录

关于这个漏洞的细节,在这里带领读者一起近距离地分析看看。

漏洞类型:API1-失效的对象级授权。

漏洞难度:高。

报告日期:2019-7-30。

信息来源:https://hackerone.com/reports/415081。

漏洞发生在paypal.com站点,在PayPal的业务中,其账号可分以下两类。

企业账号(Business Account),也叫商业账号,具有PayPal高级账号的所有功能权限,主要面向企业管理用户。

子账号(Secondary Account),也叫辅助账号,主要是方便企业账号管理下属员工,方便设置不同的管理功能,比如只能查看余额、只能退款、只能提现等。

企业账号通过委托授权子账号来管理账号上的资金,比如企业内的出纳和会计,在PayPal平台对应于不同的子账号,具备不同权限和功能,出纳可以转账和提现,会计可以查询和稽核。反之,则无法操作。

3.2.2 委托授权漏洞利用过程

从上文的背景描述可以了解到,在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美元的奖励。

3.2.3 委托授权漏洞启示

现在再来回顾一下整个攻击过程,如图3-4所示。

●图3-4 委托授权攻击过程

从过程中可以看出,整个攻击链上有关键性的两步。

■ 子账号id值的可枚举 ,导致从当前企业账号可以切换到被攻击对象的企业账号下的子账号。

■ 权限的扩大 ,从查看被攻击对象的企业账号下的子账号的功能,权限扩展到子账号密码修改功能。

在OWASP API安全Top 10中,这属于典型的失效的对象级授权问题。作为系统开发者,除了要增强id值的随机性(防止简单的数字值被枚举)外,在对象的权限访问控制上,也要校验企业账号与子账号的绑定关系,这种绑定关系的校验,不仅是信息查看、账号绑定之类的功能,还要包含密码修改等相关操作。

对于此类场景下相关联性的校验和身份鉴别,在金融业务中非常常见。比如对于用户身份的鉴别,当用户在ATM机或网银转账时,每次转账都需要重新输入转账密码,这就是一种保护性设计。而不像其他电子商务网站中的业务办理,登录后就不再需要输入密码。网银的每一笔转账都需要密码,是因为密码的保管具有私密性,只有银行账号的所有者才知道密码,每次验证密码的过程其实是对用户身份的一次确认过程。比如在银行系统中,同一个自然人账号下会有多个银行账户,比如借记卡账户、储蓄卡账户,当某人在网银自己给自己账户转账时,需要校验自然人的身份是否一致,这也是使用关联关系来验证的一种保护性设计。 UYU04I1H3jpewY5ZETN2ZU5T2Qi2dcW58Dqbiv3FK9hFmhmbMxJarL/nlbkQKeUO



3.3 API KEY泄露漏洞

因API KEY泄露导致的API安全问题,在业界非常普遍,下面这个漏洞就是因API KEY保护不当而被泄露导致个人信息泄露。

3.3.1 API KEY泄露漏洞基本信息

2010年以来,个人信息泄露问题越来越成为互联网关注的重点。甚至,有专家学者认为,信息泄露问题将可能成为压垮互联网发展的最后一根稻草,这也从另一侧面反映出当前个人信息泄露的严重程度。在这个案例中,将给读者讲解密钥泄露如何导致个人信息泄露。

漏洞类型: API2-失效的用户身份认证。

漏洞难度: 中。

报告日期: 2020-2-5。

信息来源: https://medium.com/@spade.com/api-secret-key-leakage-leads-to-disclosure-of-employees-information-5ca4ce17e1ce。

因为隐私问题,漏洞赏金猎人Ace Candelario在公开资料中将被攻击企业化名为redacted.com,在子域名收集的过程中意外发现了某个域名对应的主页面上,main.js文件包含API KEY,通过此密钥信息连接API接入点,从而获取了企业的员工信息。信息泄露过程如图3-5所示。

●图3-5 信息泄露过程示意图

3.3.2 API KEY泄露漏洞利用过程

在收集到的子域名中,Ace Candelario发现了一个叫smh.internal.redacted.com的子域名,其功能是从Google重定向以对员工登录进行身份验证。用户若想登录该页面,则需要一个有效的员工电子邮件账号,类似于XXX@redacted.com。

在查看页面源代码后,他发现了一个JavaScript文件main.js,让他感到惊喜的是JavaScript文件并没有混淆压缩,仅仅通过检查特定的关键字,如公司名称redacted、域名(隐藏域或内部子域名)、文件扩展名或明显的API路径、'secret'、'access[_|-]'、'access[k|t]'、'api[_|-]'、'[-|_]key'、'https:'、'http:'等,就找到了Base64编码的身份验证凭据,即HR系统API KEY。其中main.js内容如图3-6所示。

●图3-6 main.js文件内容示意图

通过API文档的阅读,快速验证JavaScript文件中泄漏的API KEY是否仍在工作。并通过curl命令,可以轻松地从API接口获取员工列表。另外,还可以查看、删除、更新所有的员工信息。

当然,漏洞提交后也很快通过官方的审核,并获取了2000美元的奖励。

3.3.3 API KEY泄露漏洞启示

现在再来回顾一下整个攻击过程,如图3-7所示。

●图3-7 API KEY管理不当导致个人信息泄露攻击过程分析

从漏洞过程分析中可以看出,在整个模拟攻击中,通过 main.js文件获取API KEY成了至关重要的一步 。拥有了API KEY之后,才能通过API接口获取员工信息。

从攻击者的角度看,如何创建自己的密钥关键字、通过关键字找到密钥、正确地读懂API文档、及时验证密钥的可用性,这些都是攻击者能力积累的体现。从防御者的角度看,将密钥存放在JavaScript文件中、采用Base64编码、JavaScript文件未混淆压缩都是败笔,方便了攻击者快速地获取密钥信息。 UYU04I1H3jpewY5ZETN2ZU5T2Qi2dcW58Dqbiv3FK9hFmhmbMxJarL/nlbkQKeUO

点击中间区域
呼出菜单
上一章
目录
下一章
×