概述
据了解,Uber的网站系统又爆出了一个漏洞,攻击者或可利用该漏洞随意阅读Uber的内部邮件。而根据Uber公司的漏洞奖励计划,该漏洞价值约为一万美金。
写在前面的话
不久之前,我在对Uber的网站系统进行安全分析时发现了一个域名劫持漏洞,于是我决定继续深入分析一下Uber系统的整体安全性。果不其然,我又发现了一个类似的漏洞。我的同事Abhibandu Kafle表示,Uber公司旗下子域名em.uber.com中的CNAME记录指向的是企业邮件服务SendGrid,而这将有可能导致域名劫持等问题的出现。
由于我个人在此前并没有使用过SendGrid邮件服务,所以我就不打算花时间在这个问题上了。我决定从其他的地方入手,因为我的第六感告诉我Uber的系统中肯定还存在其他的漏洞。在思考了片刻之后我决定开始动手,因为在我看来,如果能从不同的角度来分析某一个系统,则往往能够给研究人员带来新的启发和灵感。但是很明显,男人的第六感通常都是不准的,我实在是找不到其他的漏洞了。于是我做出了一个“重大的”决定,我要注册一个SendGrid账号,然后分析一下Uber和SendGrid之间到底发生了什么。
SendGrid是什么?
SendGrid是一家云邮件管理公司。该公司提供了一个可以帮助企业用户管理和发送电子邮件的平台,SendGrid平台可以为用户的电子邮件提供安全可靠、可扩展的基础服务。除此之外,SendGrid还可以帮助企业用户处理邮件订阅、管理和反馈等事宜。同时,SendGrid还为用户提供了邮件分析服务,为用户提供关于电子邮件的跟踪请求、响应、垃圾邮件报告、无效电子邮件反馈、点击统计以及退订等诸多管理服务。我们之所以在这里要提到这个邮件服务,是因为Uber公司在进行市场运作时一直都在使用SendGrid。
安全客科普:域名劫持
域名劫持是互网络攻击的一种方式,攻击者可以通过攻击域名解析服务器,或伪造域名解析服务器的方法,把目标网站域名解析到错误的地址,从而将用户重定向到其他的站点。
域名劫持一方面可能影响用户的上网体验,因为用户可能会被重定向到伪造的网站,进而无法正常浏览网页。而用户量较大的网站域名被劫持后恶劣影响会不断扩大。另一方面,用户可能会被诱骗到钓鱼网站,然后进行登录等操作,这样将会导致用户泄露隐私数据。
分析过程
基于我最初提出的假设,我首先要对SendGrid的域名处理机制进行了分析,因为我必须了解如何通过SendGrid来声明一个域名。结果我发现,我无法修改域名的信息,这也就意味着我们无法像往常那样直接进行子域名劫持。但是在SendGrid平台的设置选项中,我发现了一个名叫“white-label”(白名单标签)的选项。该功能开启后,SendGrid将只允许电子邮件通过某个经过认证的域名来进行发送。直觉告诉我,这回应该可以利用这个功能来做文章,而这一次直觉并没有欺骗我。
但是当我准备开始的时候,我发现了一个非常“严重”的问题,我竟然忘记了我Uber账号的密码。于是,我不得不将密码重置。但是在重置密码的过程中,我发现Uber所发送的密码重置邮件会提供邮件回复功能,而回复邮件时所使用的域名为@em.uber.com。于是,我就知道了在这个过程中,em.uber.com域名下的某条MX记录肯定被使用到了。根据dnsgoodies.com所提供的MX记录查询结果,该域名下的其中一条MX记录所指向的域名是mx.sendgrid.net。这种因祸得福的感觉让我又精神了起来!
在了解到上述这些信息之后,我就可以利用Uber子域名的MX记录来大做文章了。但是万丈高楼平地起,我觉得我还是得深入了解一下SendGrid服务的工作机制,于是我又google了一番。我发现,我可以在Webhook(一个可以进行邮件拦截的解析服务)中声明使用em.uber.com域名,而Uber并没有在Webhook中使用该域名。此时,我感觉我已经找到了切入点。
接下来,我便上网查询关于Webhook服务的API信息,然后我发现了一个由SendGrid官方提供的python程序。我对这个程序的代码进行了一些修改,因为我需要在终端显示邮件内容。然后将本地http服务器端口设置为5000,并运行这个修改后的python程序。接下来,我需要使用ngrok(一个反向代理,它可以捕获并分析信道上的所有流量数据)来在本地服务器和目标web地址之间建立一个通信隧道。这样一来,Webhook在进行入境邮件解析时就可以获取到收件人的域名了,然后就可以向该域名发送POST请求。
问题比我们想象的要严重
没过多久,我就可以接收到发送至域名em.uber.com的电子邮件了。需要注意的是,这种方式同样适用于Uber其他的子域名。除此之外,由于www.uber.com主页中还使用了Sentry插件(一款崩溃信息报告程序),所以我同样能够通过这种方式获取到所有的Sentry日志,因为这些日志报告是通过电子邮件进行发送的。毫无疑问,这部分信息对于Uber来说是非常重要的,所以我认为这个漏洞应该立刻得到修复。
漏洞的修复
果然不出所料,Uber同样认为这是一个非常严重的安全问题。所以Uber公司的相关技术人员迅速修复了这个漏洞,并还告诉我他们正在与SendGrid的技术人员合作,以确定没有遗留下其他的安全问题。SendGrid公司表示,目前对于各大企业而言,最好的选择就是由各家公司自己来声明SendGrid中需要使用到的邮件域名。
在该漏洞被修复的十天之后,Uber公司根据其漏洞奖励计划给我提供了十万美元的漏洞奖金。
概念验证视频如下:
http://v.youku.com/v_show/id_XMTcxODcyNzc1Mg==.html
下图显示的是我可以添加至Webhook中的域名列表:
总结
Uber是一款全球即时用车软件,该软件现已覆盖了全球六十多个国家和三百多个城市。而Uber的主要目的就是为大家提供更安全、更舒适的出行方式,并改善城市交通。但是近期,安全研究专家在Uber的App和网站系统中发现了很多大大小小的漏洞。虽然Uber公司为这些漏洞的发现者都提供了金额不菲的漏洞奖励,但是这种亡羊补牢的处理方式并不是一个长久之计。当Uber将注意力放在如何在出行方式上造福用户时,是不是也应该花一些精力在信息安全的保护上呢?
致谢
首先,我要感谢Uber公司的安全团队如此大方地给我提供了一万美元的漏洞奖金,他们尽职尽责的工作态度也值得我们赞扬。其次,我还要感谢我的同事Abhibandu,感谢他在这篇文章的撰写过程中给我提供的帮助。