联系我们联系我们
电子邮箱电子邮箱

挖洞经验 | 看我如何利用SAML漏洞实现Uber内部聊天系统未授权登录

[复制链接]

该用户从未签到

宣百怡 发表于 2017-9-14 10:15:25
203 0



本文讲述了利用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标记内容为:
michael@test
php-saml
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport

noreply@uber.com
Administrator
当把以上这个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 (staging) needs your help:&message=SAML login was unsuccessful because one of the attributes is incorrect.
Please contact your System Administrator.&details=Username attribute is missing&link=/&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 (staging) needs your help:&message=SAML login was unsuccessful because one of the attributes is incorrect.
Please contact your System Administrator.&details=Username attribute is missing&link=/&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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发表新帖

小黑屋|手机版|Archiver|华盟论坛 ( 京ICP证070028号 )

Powered by 华盟网 X 8.0  © 2001-2013 Comsenz Inc.  华夏黑客同盟