from: https://www.duosecurity.com/blog/duo-security-researchers-uncover-bypass-of-paypal-s-two-factor-authentication
來自Duo Security高級研究團隊Duo Labs的人員,發現有可能繞過PayPal的雙重驗證機制(用PayPal自己的話來說是Security Key機制)。研究人員發現在PayPal的API web service(api.paypal.com)里存在一個認證方面的缺陷,包括PayPal自己官方的移動應用和很多第三方應用都會用到這個API。
截至到這篇文章發布(6月25日),Paypal還只是暫時采取了規避措施,官方也在努力修復此問題。為了讓PayPal的用戶意識到他們賬戶的安全性,我們決定將漏洞公開。
在漏洞研究過程中,我們也要感謝來自EverydayCarry 的Dan的幫助。
攻擊者只需要一個賬戶和密碼就可以繞過PayPal的二次驗證機制,導致PayPal的Security Key機制形同虛設。
PayPal的移動端并不支持二次認證賬戶,所以移動端的應用在登陸的時候會忽略第二步驗證,導致攻擊者可以一步登陸成功。
我們在這里寫了一個POC來說明這個問題,在這個POC里,我們模擬移動端應用直接去請求PayPal API,但是這些賬戶都是沒有通過二次認證的。這個POC與兩個獨立的PayPal API通信,一個負責認證(通過基本的憑證),還有一個負責轉賬。
注意,這個漏洞并不影響web端的接口。但是攻擊者依然可以直接通過API獲取信息,所以影不影響web端無所謂。
這個漏洞主要出在PayPal API的認證上(api.paypal.com),由于此系統主要是通過OAuth來認證和授權的,并沒有強制執行兩步認證,所以出了問題。
從視頻里可以看到,PayPal 的ios客戶端在現實用戶賬戶信息和歷史交易記錄的時候并沒有強制用戶退出。正是這個特性,我們可以看看背后發生了什么。利用Burp截獲PayPal客戶端的請求,我們仔細分析了認證過程,重點關注開啟了雙重認證賬戶和沒有開啟雙重認證賬戶之間的區別。
下面的截圖是一個到api.paypal.com的OAuth 請求。請求body 里面除了其他參數,主要有認證憑證(用戶名和密碼)和一些設備指紋信息。這個請求與PayPal官方開發者文檔中描述的完全一樣,并沒有什么不對的地方。
但是在下面這個截圖里,我們看到上面請求的response ,在這個JSON 里我們看到了一些PayPal web服務url,各種token(主要是跟OAuth相關的),還有雙重認證的屬性。
注意上圖中紅框部分,這里的雙重認證屬性值是true,因此會導致移動應用跳轉到登陸頁并且會彈出錯誤信息,比如提醒設備目前還不支持雙重認證。
android客戶端也是同樣的請求,同樣的錯誤提示。
利用Burp將2fa_enabled屬性值修改為false,
修改了值以后,盡管賬戶并沒有進行第二步認證,但是應用并沒有出錯。盡管漏洞是出在服務端,但是這個問題相當于客戶端已經通過了兩步認證。
回到開始那個認證的請求的response,我們發現JSON里還有一個session id。
我們都知道,這個session id可以用來授權mobileclient.paypal.com,mobileclient.paypal.com這個站點提供了基于SOAP協議的API服務,可以用來做一些賬戶方面的附加功能,包括但不限于轉賬。
現在我們來模擬移動端的轉賬步驟,可以看到,轉賬是客戶端和服務端基于SOAP封裝的請求來進行的。整個過程可以分解為四個步驟,每個步驟都需要一個獨一無二的值。
下面截圖是一個例子,描述了利用上文中的session id來向mobileclient.paypal.com發起請求:
這里我們用py寫了一個POC,模擬移動端去利用這個漏洞。這個腳本的參數包括用戶名、密碼、一個美元賬戶、一個接受賬戶。具體有以下步驟:
下面的截圖是我們利用POC腳本從一個已經開啟雙重認證的賬戶向一個接受賬戶中轉賬了1美元。
下面的截圖是轉賬證明:
我們在6月23號重新測試了這個漏洞,發現PayPal官方已經在著手修復這個漏洞。開啟了雙重認證的賬戶在請求api.paypal.com的時候已經不會返回session_token了,也避免了直接與mobileclient.paypal.com通信。
但是錢包信息依然沒有屏蔽,意味著這個漏洞還是有一些危害。下面這個截圖是我們用POC重新測試的結果,注意session_token已經沒有了。
利用官方的移動客戶端,可以更加明顯的看出PayPal官方已經更改了API服務的認證流程。
在6月24號,我們又測試了這個問題,發現錢包信息已經屏蔽。下面截圖是測試結果,沒有access_token了也就意味著不能在api.paypal.com進行任何操作,包括查看錢包信息。
雖然說現在的廠商推出雙重驗證機制能更好的保護用戶的信息和賬戶安全,但是如果一旦被繞過,這些可能就成為浮云。用戶很有可能會被這些廠商的承諾所麻痹。現在越來越多的用戶信息在互聯網上傳播,通過一個設計安全的雙重驗證機制來提高賬戶安全已經迫在眉睫。
最后我們希望PayPal官方能很好的修復這個漏洞,并且推動移動客戶端和第三方應用也支持雙重驗證機制。