CRLF Injection und HTTP Response Splitting Schwachstelle
Was ist CRLF?
Wenn ein Browser eine Anfrage an einen Webserver sendet, antwortet der Webserver mit einer Antwort, die sowohl die HTTP-Antwortheader als auch den tatsächlichen Inhalt der Website, dh den Antworttext, enthält. Die HTTP-Header und die HTML-Antwort (der Inhalt der Website) werden durch eine bestimmte Kombination von Sonderzeichen getrennt, nämlich einen Wagenrücklauf und einen Zeilenvorschub. Kurz gesagt sind sie auch als CRLF bekannt.
Der Webserver verwendet die CRLF, um zu verstehen, wann ein neuer HTTP-Header beginnt und ein anderer endet. Die CRLF kann einer Webanwendung oder einem Benutzer auch mitteilen, dass eine neue Zeile in einer Datei oder in einem Textblock beginnt. Die CRLF-Zeichen sind eine Standard-HTTP / 1.1-Nachricht und werden daher von jedem Webservertyp verwendet, einschließlich Apache, Microsoft IIS und allen anderen.
Was ist die CRLF Injection Schwachstelle?
Bei einem CRLF-Injection-Angriff fügt der Angreifer sowohl die Wagenrücklauf- als auch die Zeilenvorschubzeichen in die Benutzereingabe ein, um den Server, die Webanwendung oder den Benutzer dazu zu bringen, zu glauben, dass ein Objekt beendet und ein anderes gestartet wurde. Als solche sind die CRLF-Sequenzen keine böswilligen Zeichen, sie können jedoch für böswillige Aktionen, für die Aufteilung von HTTP-Antworten usw. verwendet werden.
CRLF-Injektion in Webanwendungen
In Webanwendungen kann eine CRLF-Injektion schwerwiegende Auswirkungen haben, je nachdem, was die Anwendung mit einzelnen Elementen ausführt. Die Auswirkungen können von der Offenlegung von Informationen bis zur Codeausführung reichen, was sich direkt auf die Sicherheitsanfälligkeit von Webanwendungen auswirkt. Tatsächlich kann ein CRLF-Injection-Angriff sehr schwerwiegende Auswirkungen auf eine Webanwendung haben, obwohl sie nie in der OWASP Top 10-Liste aufgeführt wurde. Beispielsweise ist es auch möglich, Protokolldateien in einem Admin-Panel zu bearbeiten, wie im folgenden Beispiel erläutert.
Ein Beispiel für die CRLF-Injektion in eine Protokolldatei
Stellen Sie sich eine Protokolldatei in einem Admin-Panel mit dem Ausgabestreammuster des IP – Time – Visited-Pfads vor, z. B. das folgende:
123.123.123.123 - 08:15 - /index.php?page=home
Wenn ein Angreifer in der Lage ist, die CRLF-Zeichen in die HTTP-Anforderung einzufügen, kann er den Ausgabestream ändern und die Protokolleinträge fälschen. Er kann die Antwort von der Webs-Anwendung in etwas wie das Folgende ändern:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Die%0d und %0a sind die URL-codierten Formen von CR und LF. Daher würden die Protokolleinträge so aussehen, nachdem der Angreifer diese Zeichen eingefügt hat und die Anwendung sie anzeigt:
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
Daher kann der Angreifer durch Ausnutzung einer CRLF-Injection-Sicherheitsanfälligkeit Einträge in der Protokolldatei fälschen, um seine eigenen böswilligen Aktionen zu verschleiern. Der Angreifer führt buchstäblich Seiten-Hijacking durch und ändert die Antwort. Stellen Sie sich beispielsweise ein Szenario vor, in dem der Angreifer über das Administratorkennwort verfügt und den Parameter restrictedaction ausgeführt hat, der nur von einem Administrator verwendet werden kann.
Das Problem ist, dass, wenn der Administrator bemerkt, dass eine unbekannte IP den restrictedaction Parameter verwendet, wird feststellen, dass etwas nicht stimmt. Da es jetzt jedoch so aussieht, als ob der Befehl vom localhost (und daher wahrscheinlich von jemandem, der Zugriff auf den Server hat, wie ein Administrator) ausgegeben wurde, sieht er nicht verdächtig aus.
Der gesamte Teil der Abfrage, der mit %0d%0a beginnt, wird vom Server als ein Parameter behandelt. Danach gibt es ein weiteres & mit dem Parameter restrictedaction, das vom Server als weiterer Parameter analysiert wird. Effektiv wäre dies die gleiche Abfrage wie:
/index.php?page=home&restrictedaction=edit
Aufteilung der HTTP-Antwort
Beschreibung
Da der Header einer HTTP-Antwort und ihr Hauptteil durch CRLF-Zeichen getrennt sind, kann ein Angreifer versuchen, diese zu injizieren. Eine Kombination von CRLFCRLF teilt dem Browser mit, dass der Header endet und der Body beginnt. Das bedeutet, dass er jetzt Daten in den Antworttext schreiben kann, in dem der HTML-Code gespeichert ist. Dies kann zu einer Cross-Site-Scripting-Sicherheitsanfälligkeit führen.
Ein Beispiel für die HTTP-Antwortaufteilung, die zu XSS führt
Stellen Sie sich eine Anwendung vor, die beispielsweise einen benutzerdefinierten Header festlegt:
X-Your-Name: Bob
Der Wert des Headers wird über einen Get-Parameter namens „name“ gesetzt. Wenn keine URL-Codierung vorhanden ist und der Wert direkt im Header angezeigt wird, kann ein Angreifer möglicherweise die oben erwähnte Kombination von CRLFCRLF einfügen, um dem Browser mitzuteilen, dass der Anforderungstext beginnt. Auf diese Weise kann er Daten wie XSS-Nutzdaten einfügen, zum Beispiel:
?name=Bob%0d%0a%0d%0a<script>alert(document.domain)</script>
Das obige zeigt ein Warnfenster im Kontext der angegriffenen Domäne an.
HTTP Header Injection
Beschreibung
Durch die Ausnutzung einer CRLF-Injection kann ein Angreifer auch HTTP-Header einfügen, die verwendet werden können, um Sicherheitsmechanismen wie den XSS-Filter eines Browsers oder die Same-origin-Policy zu umgehen. Auf diese Weise kann der Angreifer vertrauliche Informationen wie CSRF-Token erhalten. Er kann auch Cookies setzen, die ausgenutzt werden können, indem er das Opfer im Konto des Angreifers anmeldet oder anderweitig nicht ausnutzbare Cross-Site Scripting (XSS) -Schwachstellen ausnutzt.
Ein Beispiel für HTTP-Header-Injection zum Extrahieren sensibler Daten
Wenn ein Angreifer in der Lage ist, die HTTP-Header zu injizieren, die CORS (Cross Origin Resource Sharing) aktivieren, kann er Javascript verwenden, um auf Ressourcen zuzugreifen, die ansonsten durch SOP (Same Origin Policy) geschützt sind, wodurch verhindert wird, dass Websites unterschiedlicher Herkunft aufeinander zugreifen.
Auswirkungen der CRLF-Injection-Schwachstelle
Die Auswirkungen von CRLF-Injections variieren und umfassen auch alle Auswirkungen von Cross-Site-Scripting auf die Offenlegung von Informationen. Es kann auch bestimmte Sicherheitsbeschränkungen wie XSS-Filter und die gleiche Ursprungsrichtlinie in den Browsern des Opfers deaktivieren, wodurch sie anfällig für böswillige Angriffe werden.
Verhindern von CRLF / HTTP-Header-Injektionen in Webanwendungen
Die beste Präventionstechnik besteht darin, Benutzereingaben nicht direkt in Antwortheadern zu verwenden. Wenn dies nicht möglich ist, sollten Sie immer eine Funktion verwenden, um die CRLF-Sonderzeichen zu codieren. Eine weitere gute Best Practice für die Sicherheit von Webanwendungen besteht darin, Ihre Programmiersprache auf eine Version zu aktualisieren, die es nicht zulässt, dass CR und LF in Funktionen eingefügt werden, die HTTP-Header festlegen.
Schwachstellenklassifizierung und Schweregradtabelle
Klassifizierung | ID / Schweregrad |
---|---|
PCI v3.2 | 6.5.1 |
OWASP 2013 | A1 |
OWASP 2017 | A1 |
CWE | 93 |
CAPEC | 105 |
WASC | 24 |
HIPAA | 164.306(a), 164.308(a) |
ISO27001 | A.14.2.5 |
CVSS:3.0 |
CVSS:3.0: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:H
|
Netsparker | Medium |
Leave a Reply