CRLF Injection
CRLFインジェクション
説明
CRLFインジェクションは、攻撃者がレスポンスにCRLFシーケンス(キャリッジリターンおよびラインフィード)を注入することに成功し、レスポンスの本文やヘッダーを操作できるようになる脆弱性です。
CRLFインジェクション攻撃には以下が含まれます。
- HTTP Response Splitting
Webアプリケーションによって生成されるHTTPレスポンスの操作を目的として、攻撃者がユーザー入力にCRLFシーケンスを挿入する攻撃です。これにより、悪意のあるコンテンツの注入や誤解を招くレスポンスの作成など、さまざまな結果が生じる可能性があります。
- HTTP Header Injection
HTTPヘッダーにCRLFシーケンスを注入する攻撃です。この攻撃はセキュリティ上の問題を引き起こし、攻撃者がヘッダーを追加または変更できるようにすることで、キャッシュポイズニング、セッション固定、または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