原文:detectify lab

译: Holic (知道创宇404安全实验室)

TL;DR, Internet Explorer 曾经有个这么个 bug,允许攻击者使受害者发送带有恶意 Host 头的请求。文件描述符曾经用它窃取 GitHub 的 OAuth token,我们用它来混淆 Heroku 和Fastly 的 host 路由,使他们能够在他们客户的域名下提供我们的内容。Fastly 和 Heroku 从那以后就已修复了自身的问题。

Internet Explorer/Edge malformed Host-header

Internet Explorer/Edge 的 bug 就像下面这样(从恶意链接)进行重定向。

HTTP/1.1 307 Redirect 
Location: https://www.drupal.org%2f.to.to

这将会导致 Internet Explorer/Edge 发送如下请求至 www.drupal.org

GET /.to.toto/ HTTP/1.1 
Host: www.drupal.org/.to.to

Heroku/Fastly

既然 Heroku 和 Fastly 平台都存在过对 Host 头解析不严的情况。这意味着即使 /字符在 header 中,它们仍然认为 host 是属于 .to.to的子域名。这便使得在此服务上将*.to.to设为你自己的域名是可行的。将.to.to的所有子域名指向恶意内容,然后利用 Internet Explorer/Edge 的 bug,在绑定到 Heroku/Fastly 域名的平台上启动恶意内容服务。

PoC

流程如下所示:

  1. 创建进行恶意重定向的链接发送给受害者
  2. 重定向的链接将会在 Internet Explorer/Edge 上创建畸形 Host 头。解析结果会变为指向 Fastly/Heroku 的原始域(本例是 www.drupal.org)。
  3. Fastly/Heroku 将会处理Host头将其解析为错误的域名,在本例中是通配符 *.to.to
  4. Fastly/Heroku 然后会返回我们的域名中的数据,即使浏览器解析的域名依然是 Fastly/Heroku 的客户所有。

下面可以更清晰的看到域名解析情况:

$ host www.drupal.org 
www.drupal.org is an alias for j.global-ssl.fastly.net.

它正指向 Fastly。 然后我们使用 cURL 创建如下测试请求:

curl -H 'Host: www.drupal.org/.to.to' https://www.drupal.org/

便得到了以下返回信息:

<script>alert(document.domain)</script>

这是因为我们在 Fastly 声明了 *.to.to,提供以我们的PoC为内容的简单应用服务。

现在我们发送下述链接至受害者:

https://avlidienbrunn.se/redirect.php?redirect=https://www.drupal.org%252f.to.to

将会给我们下面的重定向响应:

HTTP/1.1 307 Redirect
Location: https://www.drupal.org%2f.to.to

这将使 Internet Explorer/Edge 浏览器发送如下 Host头:

Host: www.drupal.org/.to.to

与无效化请求相反,这两个服务实际会将 host 头处理为*.to.to的子域名,提供我们可控的内容服务。

这意味着不严谨的 host 解析和 Internet Explorer/Edge 的 bug 将允许我们对使用这两个服务的客户进行内容欺骗。我们可以提供任何我们想要的内容服务,或者甚至根据同源策略( SOP )创建认证请求来劫持当前用户,

微软先前被通知过两次关于 Host 头注入攻击的事,他们修复了一次,但是版本的回归拟合使其再生枝节。

影响

基本所有使用中间无代理的 Heroku 和 Fastly 服务都会受到漏洞影响。而能够利用此漏洞的只有 Internet Explorer 和 Edge 浏览器。在那段时间里,Safari 浏览器出现过类似的问题(对应中文版:Safari URL重定向漏洞利用分析 ),但源是置空的,因此 SOP 限制了我们不能做额外的请求。尽管在 Safari 上内容提取是有效的,解析后的页面只有我们自己的内容,这就使得 Safari 的 bug 没有太大意义了。

漏洞时间线

  • June 16 – Reported to both Fastly and Heroku
  • June 21 – Triaged by Fastly
  • June 28 – Patch is deployed by Fastly
  • June 30 – Triaged by Heroku
  • July 7 – Additions to the patch added
  • September X – Host header injection in Internet * Explorer/Edge patched by Microsoft
  • October 20 – Final patches added by Heroku

Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/85/