2.4 HackerOne中间网页重定向漏洞

难度:

URL:未公布

报告位置:https://www.hackerone.com/reports/111968/

报告日期:2016年1月20日

支付奖金:500美元

有些网站通过实现中间网页(在用户访问期望的内容之前进行显示和提醒)的方式来抵御开放式重定向漏洞。在你重定向用户到一个URL时,可以显示一个中间网页,其中包含说明用户正在离开他们所在的域的提醒信息。因此,如果重定向网页显示的是虚假的登录页面或者试图伪装成受信任的域,用户都会知道他们正在被重定向。这也是HackerOne在它的大多数离开本站的URL链接(例如,指向已提交报告的链接)中所采用的办法。

尽管你可以使用中间网页提醒的方式避免重定向漏洞,但是网站之间交互的复杂性也能导致有些链接缺失保护。HackerOne使用一个客户服务支持票务系统Zendesk来支撑它的https://support.hackerone.com/子域。以前,当你访问具有/zendesk_session的hackerone.com时,浏览器会直接从HackerOne平台重定向到HackerOne的Zendesk平台,而不需要中间网页提醒,因为包含hackerone.com域的URL是可信链接(除非你通过URL/hc/en-us/requests/new.提交请求,否则HackerOne现在会重定向https://support.hackerone.com到docs.hackerone.com)。然而,任何人都可以创建个性化的Zendesk账号,并传递给/redirect_to_account?state=参数。然后个性化的Zendesk账号可能就会重定向到其他的非Zendesk或HackerOne控制的网站。由于Zendesk允许在账号之间重定向而不需要中间网页提醒,因此用户可能被重定向到一个非受信任网站而不会被进行任何提醒。为了应对这个漏洞,HackerOne将包含zendesk_session的链接看作外部链接,并且在用户点击链接时触发中间告警网页进行提醒。

为了验证这个漏洞,黑客Mahmoud Jamal创建了一个具有子域http://compayn.zendesk.com的Zendesk账号。然后他使用Zendesk主题编辑器(管理者可以通过主题编辑器定制自己的Zendesk网站的外观)在头文件中加上了如下JavaScript代码:

通过使用上面的JavaScript脚本,Jamal引导浏览器去访问http://evil.com。<script>标记表示HTML中的可执行代码,document表示Zendesk返回的整个HTML文档,其中包含了网页的所有信息。document后面的句点和名字是它的属性。属性包含了描述对象或用于修改对象所需要的信息和相应的取值,因此你可以通过使用location属性控制浏览器显示的网页,也可以通过href子属性(这是location对象的一个属性)来重定向浏览器到指定的网站。访问如下的链接将会把目标对象重定向到Jamal的Zendesk子域,这将会使得目标对象的浏览器运行Jamal的脚本并重定向到http://evil.com

因为链接包含了域hackerone.com,中间网页不会显示,用户也不会知道他们访问的网页是不安全的。有意思的是,Jamal最初向Zendesk报告缺失中间网页的重定向问题时,并没有得到重视,这也没有被作为一个漏洞进行标记。很自然地,Jamal继续挖掘,想看一看这一漏洞还可能被怎样利用。最后,他发现了JavaScript重定向攻击的方式,最终获得了HackerOne的认可并得到了一笔奖金。

要点

当你挖掘漏洞时,要关注网站使用的服务。因为每一个服务都代表新的攻击向量。HackerOne漏洞的形成,就是因为HackerOne使用了Zendesk,并且HackerOne的所有重定向又都是被允许的。

另外,虽然你发现了漏洞,但是阅读或响应你的报告的人可能还不能很快清楚地理解该漏洞造成的安全影响。为此,我将在第19章探讨漏洞报告的相关内容,详细描述在报告中应该囊括哪些内容,应该怎样展示漏洞与企业的联系,以及其他信息。如果你能够提前做些工作,并如实、详尽地解释报告的安全影响,这将有助于制定出一个更为平滑的安全解决方案。

同样地,也存在企业并不认同你的情况。如果是这样,就像Jamal一样继续进行挖掘,并看是否能够利用这个漏洞或者结合其他漏洞描述该漏洞造成的安全影响。