跳转至

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