CRLF Injection
CRLF 注入
描述
CRLF 注入是一种漏洞,攻击者通过该漏洞成功将 CRLF 序列(回车和换行)注入到响应中,从而允许他们操纵响应主体和/或标头。
CRLF 注入攻击包括:
- HTTP Response Splitting
这是一种攻击,攻击者将 CRLF 序列插入用户输入中,旨在操纵 Web 应用程序生成的 HTTP 响应。这可能导致各种后果,例如注入恶意内容或伪造误导性响应。
- HTTP Header Injection
涉及将 CRLF 序列注入 HTTP 标头。这种攻击可能导致安全问题,允许攻击者添加或修改标头,潜在地导致缓存投毒(cache poisoning)、会话固定(session fixation)或其他形式的 Web 应用程序妥协。
- Memcache Injection
一种针对利用 Memcached(一种分布式内存缓存系统)的系统的 CRLF 攻击。攻击者注入 CRLF 序列来操纵存储在 Memcached 中的内容,可能导致缓存投毒、信息泄露或拒绝服务。
- Server-Side Request Forgery:
一种有时涉及 CRLF 注入的更广泛的攻击。在这种情况下,攻击者通过注入包含 CRLF 序列的恶意输入,欺骗服务器向内部资源发出请求。攻击者可利用此漏洞访问敏感信息、在内部系统中进行横向移动或代表服务器执行未经授权的操作。
import flask
from flask import request
from flask import make_response
app = flask.Flask(__name__)
@app.route("/")
def index():
header = request.args.get("header")
username = request.args.get("username")
resp = make_response("Hello: %s" % username)
resp.headers.set(header, username)
return resp
app.run(host="0.0.0.0", port=8080)
GET /?header=GET%20/?name=A:a%0a%0dA:d%0d%0d%0a%0dInjected-Header&username=abc HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0
Referrer: http://localhost/
HTTP/1.1 200 OK
Server: Werkzeug/2.3.7 Python/3.10.12
Date: Tue, 09 Jan 2024 11:03:05 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 10
GET /?name=A:a
A:d
Injected-Header: abc
Connection: close
Hello: abc
建议
- 升级到最新的软件版本:CRLF 注入通常会影响 Web 服务器或反向代理本身,因此建议保持其更新。
- 避免从用户输入设置标头名称:允许用户控制 HTTP 标头名称可能会导致包括 CRLF 注入在内的多种安全问题。
- 用户输入净化:在某些情况下,如果 Web 应用程序将用户输入连接到响应标头或 Cookie 中,则可能实现 CRLF 注入,因此,应对用户输入中的特殊字符进行净化。
GET /?page=login%0D%0ACustom-Header:%20vulnerable HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0
Referrer: http://localhost/
HTTP/1.1 200 OK
Date: Wed, 05 Jan 2024 12:00:00 GMT
Server: Apache/2.4.58 (Unix)
Content-Length: 1234
Content-Type: text/html; charset=UTF-8
Set-Cookie: page=login%0D%0ACustom-Header:%20vulnerable
<body>
链接
标准
- GDPR:
- ART_25
- ART_32
- PCI_STANDARDS:
- REQ_6_4
- REQ_6_5
- SOC2_CONTROLS:
- CC_2_1
- CC_3_4
- CC_4_1
- CC_7_1
- CC_7_2
- CC_7_4
- CC_7_5
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY213
- SECURITY255