官术网_书友最值得收藏!

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機或網銀轉賬時,每次轉賬都需要重新輸入轉賬密碼,這就是一種保護性設計。而不像其他電子商務網站中的業務辦理,登錄后就不再需要輸入密碼。網銀的每一筆轉賬都需要密碼,是因為密碼的保管具有私密性,只有銀行賬號的所有者才知道密碼,每次驗證密碼的過程其實是對用戶身份的一次確認過程。比如在銀行系統中,同一個自然人賬號下會有多個銀行賬戶,比如借記卡賬戶、儲蓄卡賬戶,當某人在網銀自己給自己賬戶轉賬時,需要校驗自然人的身份是否一致,這也是使用關聯關系來驗證的一種保護性設計。

主站蜘蛛池模板: 中江县| 肇东市| 准格尔旗| 东台市| 呈贡县| 东丰县| 咸宁市| 汨罗市| 轮台县| 芮城县| 九江县| 会东县| 民和| 巴彦淖尔市| 西安市| 碌曲县| 龙胜| 出国| 林甸县| 光泽县| 淮阳县| 阿城市| 沙河市| 丰顺县| 彭泽县| 集安市| 西昌市| 内乡县| 滁州市| 宕昌县| 饶平县| 伊金霍洛旗| 曲水县| 射阳县| 沙坪坝区| 郑州市| 红原县| 石景山区| 定南县| 六盘水市| 邳州市|