通过子域名来窃取全局共享的Cookie,间接绕过Uber的单点登录认证

本文讲的是通过子域名来窃取全局共享的Cookie,间接绕过Uber的单点登录认证

Uber使用Amazon CloudFront CDN的本意本来是为终端用户提供低延迟性和高传输速度,增加用户的客户的体验,但没想到,其子域名saostatic.uber.com却被黑客控制以窃取全局共享的Cookie,并间接绕过Uber的单点登录认证。

此外,Uber最近在auth.uber.com上部署了单点登录(SSO)系统,该系统基于所有* .uber.com子域之间的共享Cookie。

因此,利用子域进行攻击可能会让黑客绕过Uber的整个的基于SSO系统的身份验证过程,从而让他们访问受保护的所有* .uber.com子域名,例如vault.uber.com,partners.uber.com,riders.uber .com等。 Uber为了解决子域控制的漏洞,总共设置了五千美元的奖金。

重新审视单点登录的安全性

一般来说,SSO系统分为以下三种类型:

1.OAuth:安全性主要基于在身份提供者配置的服务提供商的白名单回调URL,以及通过“state”参数进行CSRF保护。缺陷通常是通过打开的重定向链,例如通过OAuth令牌窃取身份验证并绕过Airbnb。

2.SAML & friends:安全性基于在服务和身份提供者之间使用预先交换的加密密钥签名的XML消息。缺陷通常是XML签名会被黑客绕过,例如OneLogin身份验证绕过了以前位于Uber的WordPress网站。

3.子域之间的共享(会话)Cookie:安全性基于所有子域的完整性,在SSO系统发布的共享会话cookie中,任何子域上的任何漏洞都是致命的。因此,缺陷通常是RCE,曝光的调试日志,子域控制和子域上的朋友,例如。通过子域控制验证绕过Ubiquity的单点登录。

专家们认为,虽然OAuth和SAML & friends最近在安全方面有所改善,但还是存在很多问题。而子域之间的共享(会话)Cookie更是一种过时的技术,它被设计成强制要求将SSO系统用作与SSO系统所基于的TLD相同的子域的任何内容。由于SSO系统的安全性是基于子域的完整性,反而给了攻击者大量的攻击机会。

绕过Uber的SSO

Uber曾经使用OAuth作为* .uber.com子域名的SSO系统,这可以从@ngalog最近公开披露报告中看出,简而言之,就是CSRF + Open Redirect = Account Takeover。不过最近,黑客们已经根据* .uber.com的子域中的共享会话Cookie更改到SSO了。如果你现在浏览到任何需要身份验证的uber.com子域名时,都将被重定向到auth.uber.com。一旦你登录并访问另一个子域,就可以透过SSO系统auth.uber.com公开地登录,SSO系统在登录一次后会为每个* .uber.com子域发布临时会话cookie。

专家们在这个SSO系统中发现一个漏洞,允许* .uber.com上的任何受攻击的子域公开地显示并窃取由auth.uber.com为任何 uber.com子域名发出的有效会话cookie,不过前提是受害者已经验证过一次SSO。

 Uber确实采取了一些对策来防止这种攻击,但是这些措施都被黑客成功地绕过,也就是说任何受到攻击的* .uber.com子域可以用于执行相同的攻击。

控制子域名

虽然子域名 saostatic.uber.com是通过DNS CNAME指向Amazon Cloudfront CDN的,但主机名却未被注册。这样,黑客就能完全控制这个域名了,并有效地将子域名作为PoC,来托管了一个简单的HTML文件:

如何绕过认证

在Uber的SSO系统中,auth.uber.com作为用户信息登录平台,为https://*.uber.com(“domain = uber.com”cookie属性)提供临时共享会话Cookie,并向riders.uber.com,partners.uber.com,central.uber.com,vault.uber.com,developer.uber.com等子域提供身份信息。

从下面的Uber SSO登录图中可以看到的,这些使用身份信息的子域会在其结束时立即销毁传入的临时共享会话cookie,以防万一发生信息泄露,例如为其他身份服务商进行的身份验证:

因此,共享会话cookie“_csid” 被窃取只能在发生在上图中的步骤9-12之间,这4个步骤之间的反应时间是非常短的(仅仅够自动浏览器重定向)。虽然利用这么短的时间来发起攻击可能很难,但允许共享会话cookie能在第12步之后在浏览器的cookie存储中进行活动。但问题是,如果受害者已经从https://riders.uber.com(上图中, 12步之后的哪个步骤)登录,当接收到来自auth.uber.com中有效的新生成的共享会话cookie“_csid”的请求时,就被简单地忽略并保持可用。因此,它在浏览器中保持活动状态,直到其Cookie存储被清除。攻击者只需要把上图中的第3步作为步骤13进行重播,并以https://saostatic.uber.com的其他隐藏请求结束窃取会话cookie:

因此,一旦攻击者从https://riders.uber.com得到受害者的“_csid”共享会话cookie,他们就可以在后台浏览器中伪造正常的登录流程,并在步骤9中替换发出的“_csid”cookie的值,从而伪装成受害者登录,以下就是攻击者伪装的Uber SSO登录示意图:

这里的问题是GET服务提供商riders.uber.com会在步骤3中添加GET param state=CSRFTOKEN和本地作用域状态cookie,并在步骤11中进行验证。由于目前研究者还无法从受害者的浏览器中获取这些值,而只能利用“_csid”共享会话cookie,所以要做整体的分析就很困难。

另外,攻击者可以从https://riders.uber.com获取正确的CSRFTOKEN值和附带的状态cookie值,使用的方法就是在其末尾启动一个正常的登录方案,例如在后台浏览器中或通过简单的脚本。然后,他们可以在步骤3中将https://riders.uber.com生成的auth.uber.com URL在后台浏览器中定向到受害者的浏览器,以生成并窃取这些值的“_csid”共享会话cookie,并在步骤9中再次将“_csid”共享会话cookie注入到后台的浏览器登录中。这样,受害者就会在其浏览器中有效地为攻击者的伪装登录生成“_csid”临时会话令牌。不过,这仍然允许以以下方式进行删除,从而避免受害者被冒充,不过,研究人员仍然认为受害者已经登录到auth.uber.com并访问受攻击者控制的网页:

PoC

建议大家先观看以下的在PoC演示视频:

视频中假设的是https://saostatic.uber.com是在受害者的浏览器中提供有效的SSL证书,但现实情况并非如此:

1.打开受害者的浏览器并到https://riders.uber.com浏览,在被重定向到https://auth.uber.com之后,请使用受害者的凭证登录,以便你再次在https://riders.uber.com仪表板上查看。

2.在受害者的浏览器中打开第二个浏览器标签,并到https://saostatic.uber.com/prepareuberattack.php浏览。由于视频中只是模拟该域具有有效的SSL证书,所以实践中你要接受可能收到的任何证书警告。页面加载完成后,你将看到一个URL,“Cookie:”字符串和一个“Set-Cookie:”字符串。由于攻击者的网络服务器会收集所有的信息,所以该网络服务器需要伪装成受害者的身份登录,这样一切都被自动窃取了。

3.打开攻击者的浏览器并设置拦截代理工具来拦截请求和响应,到prepareuberattack.php页面输出显示的URL浏览并拦截此请求。现在复制在prepareuberatt.php上显示的“Cookie:…”字符串,并将其粘贴到请求标头中。

4.响应应该是重定向到https://riders.uber.com/trips,这表示验证已经被成功绕过。最后从prepareuberattack.php页面输出中复制所有“Set-Cookie:”行,并将其粘贴到响应中,然后再将其转发到浏览器,这样可以确保被盗的cookies被永久地注入攻击者的浏览器中。

如果你照着以上步骤来操作,也可以伪装成受害者进行登录。

而在实践攻击情形中,攻击者会隐藏在受害者的浏览器中https://saostatic.uber.com/prepareuberattack.php,例如通过iframe。同样,他们可能不会在结果页面上显示URL和所有的Cookie,而是将其存储在服务器端,准备以隐身的方式滥用身份信息。以上的PoC视频演示了攻击者是如何快速有效利用这一招的。 https://saostatic.uber.com/prepareuberattack.php和https://saostatic.uber.com/uberattack.php页面的代码如下,这是专门为PoC编写的:

第一个文件可以托管在任何地方,第二个文件必须托管在被劫持的子域上,因为它读取并窃取了传入的会话cookie。

通过在这两个PHP文件中简单地将“riders.uber.com”更改为uber.com的任何其他子域,攻击者可以伪装成受害者为这些子域生成有效的会话,例如, vault.uber.com,partners.uber.com,developer.uber.com,…

Uber所采取的预防措施

1.通过将悬垂结构(dangling)的CNAME重新恢复到AWS CloudFront CDN来解决saostatic.uber.com的子域名控制。

2.按照以下优先级顺序解决以下任何一种的身份验证绕过:

2.1将SSO系统恢复到OAuth 2,因为这并不会产生像当前的共享会话SSO系统那样所进行大型攻击的副作用。

2.2实施IP地址检查,在auth.uber.com上发布共享的“_csid”会话cookie时,存储用户的外部IP地址,并验证向* .uber服务提供商呈现此共享会话cookie的用户。由于 *.uber.com具有相同的外部IP地址,所以这样做可以防止如上所述的中继攻击。不过这里还有一个风险,即攻击者可能具有与其受害者相同的外部IP地址,例如在同一个公司网络或无线接入点。

2.3将所有* .uber.com子域包含在你的程序范围内,因为它们有可能完全危及SSO系统,包括高价值目标vault.uber.com,partners.uber.com和riders.uber.com

总之,就是Uber通过删除了悬垂结构的CNAME,并实施IP地址检查,来降低基于cookie的SSO系统风险。

原文发布时间为:2017年7月18日

本文作者:luochicun

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-09-23 12:29:12

通过子域名来窃取全局共享的Cookie,间接绕过Uber的单点登录认证的相关文章

IXwebhosting子域名共享独立IP的方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 我在介绍如何选择站群空间的时候,就介绍过IXwebhosting主机,官网介绍说15个独立IP,实际上可以绑定16个独立IP,因为IXwebhosting使用的是linux系统,支持.htaccess规则,可以灵活实现任何重定向设置,我们一般会设置a.com 301重定向到www.a.com,今天罗平要分享个小技巧,就是IXwebhostin

四万个与RIG漏洞利用套件相关的子域名遭到关闭

根据最近的一项调查显示,曾被犯罪分子用于支持RIG漏洞利用套件的成千上万个非法子域名(通过网络钓鱼攻击所获取的受害者凭证进行注册)日前已经被大范围关停. 其中大多数子域名皆使用GoDaddy作为主域名注册商.GoDaddy与RSA Security以及其它数家安全厂商乃至独立研究人员共同合作,已于今年5月凭借这些恶意登陆页面所使用的大量IP地址将相关子域名进行了关停.这种利用失窃凭证创建子域名的作法被称为域名阴影(domain shadowing). E安全百科:什么是域名阴影技术? 域名阴影的

子域名与子目录哪个更适合做优化?

一个网站又数个或者N个页面,他们分别用url进行标识,我们做网站优化,无非就是让这些url尽可能的取得更好的排名,做过优化的人都知道,url结构对网站优化也是有影响的,那么子域名跟子目录哪个更适合做优化呢?下面我们一起看下 子域名跟子目录的优缺点: 子域名与子目录之间的区别 子域名:lanmu.xx.com,他告诉搜索引擎,这个子域跟其他的是独立的分开的,比如我们常见的,网站门户跟论坛,而子目录 呢:xx.com/lanmu,它代表的是子域中的一个部分,但是它整体还是属于xx.com这个域的.子

配置Nginx子域名泛解析绑定至单独目录

  简单记录: 需求描述 Web 服务器为 Nginx,希望配置泛子域名解析. 其实稍加修改,配置泛域名解析也不是难事. 解决及分析 在 Nginx 的配置文件中做如下配置(示意): server { server_name domain.com www.domain.com *.domain.com ; set $subdomain ''; if ($host ~* (b(?!wwwb).+).domain.com) { set $subdomain -$1; } root /home/use

利用.htaccess绑定子域名到子目录(阿里云虚拟主机可用)

绑定域名 登陆域名管理台(如DNSPod) 把需要绑定的域名解析到你的空间: 登陆虚拟主机/空间管理台(如阿里云) 绑定域名到空间; 首先在本地建个txt文件,复制下面的代码修改替换你要绑的域名和目录,并传到网站主目录下再改成为.htaccess.注:在Windows系统下无法创建只有扩展名没有名字的文件,只能上传后修改. 下面是以 tec.tson.com 绑定到子目录tec为例的.htaccess代码. 1 2 3 4 5 6 7 8 9 <IfModule mod_rewrite.c>

如何高效的进行子域名收集与筛选?

本文讲的是如何高效的进行子域名收集与筛选?, 介绍 当我在寻找Hackerone上的新目标时,我总是会去关注已解决报告的数量,因为这一更高的数字可能意味着你在这里能够发现漏洞的机会比在那些关闭了提交意见的程序上更为容易.正因为这个原因,所以我选择了雅虎! 我们都知道雅虎是大型的国际公司,所以我预计其会有很多子域名,路径和重定向,但从哪里开始呢?这时候就要用到我最喜欢的枚举/强化子域名工具:Sublister(https://github.com/aboul3la/Sublist3r)和Fierc

Sublist3r:子域名快速枚举工具

Sublist3r是一个python版工具,其设计原理是基于通过使用搜索引擎,从而对站点子域名进行列举. 在应用上,它可以帮助渗透测试人员以及漏洞检测人员针对他们的目标域名收集以及获取其子域名.Sublist3r目前支持以下搜索引擎:Google, Yahoo, Bing, 百度以及Ask,而未来将支持更多的搜索引擎.目前,Sublist3r同样也通过Netcraft以及DNSdumpster获取子域名. 而子域名爆破工具subbrute也被融入到Sublist3r中,主要是通过利用brutef

详细介绍如何在GoDaddy中添加子域名(二级域名)

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近本人建站,为了降低成本,采用二级域名.作为一个新来者初次在主域名基础上添加二级域名.为了添加子域名,在网上搜索并查看了一些相关的文章,但是根据这些文章做感觉对不上号,不起作用,于是自己动手摸索了一把,终于把这个问题解决了,成功添加了子域名(二级域名).为了与大家分享一下个人经验,希望你少走一些弯路,节约时间,提高效率,现将其总结如下: 1

★Kali信息收集~3.子域名系列

3.1Netcraft :子域名查询  官网:http://searchdns.netcraft.com/ 输入要查询的域名,即可得知子域名       3.2Fierce :子域名查询 概述: fierce 是使用多种技术来扫描目标主机IP地址和主机名的一个DNS服务器枚举工具.运用递归的方式来工作.它的工作原理是先通过查询本地DNS服务器来查找目标DNS服务器,然后使用目标DNS服务器来查找子域名.fierce的主要特点就是可以用来定位独立IP空间对应域名和主机名.     参数: root