Header-Injection ist eine Klasse von Sicherheitslücken in Webanwendungen, welche auftreten, wenn die Header eines Protokolls dynamisch unter Hinzunahme von unzureichend geprüften Benutzereingaben generiert werden.
Header-Injection in HTTP kann z. B. zu HTTP-Response-Splitting und Cross-Site Scripting führen. Bei der dynamischen Erstellung von E-Mails über eine Webanwendung kann ein Header-Injection-Angriff genutzt werden, um andere Empfänger in eine E-Mail einzutragen und so z. B. Spam zu versenden (E-Mail-Injektion).
Beispiel
Eine Website hat ein Formular mit den Eingabefeldern für Betreff und Nachricht, über das Besucher dem Betreiber schreiben können. Ein serverseitiges Skript baut aus den übermittelten Daten dann die E-Mail-Nachricht zusammen und sendet diese an eine vordefinierte Adresse. Die resultierende E-Mail-Nachricht sieht dann z. B. so aus:
Subject: Betreff From: besucher@some.example.com To: webmaster@some.example.com
Nachricht
Wenn nun ein Angreifer in das Eingabefeld des Formulars für den Betreff die Zeichenfolge Carriage Return und Linefeed sowie BCC: user1@another.example.com, user2@another.example.com, …
eingibt und das Skript diese Eingaben ungeprüft in die E-Mail-Nachricht übernimmt:
Subject: Spam BCC: user1@another.example.com, user2@another.example.com, … From: besucher@some.example.com To: webmaster@some.example.com
Spam
So wird die E-Mail ebenfalls als Blindkopie an User1, User2, … versendet.
Da einen Spammer die Antwort des Servers auf das Abschicken des E-Mail-Formulars nicht interessiert, kann er sich hinter IP-Spoofing verstecken. Der Administrator des Servers sieht dann in seinem Logfile, dass jede Spam Mail von einer anderen IP-Adresse verschickt wurde. Der Spammer bleibt so völlig anonym.
Da der Webmaster auch eine Kopie des Spams erhält, wird er diese Sicherheitslücke aber baldmöglichst schließen.
Gegenmaßnahmen
Zum Verhindern einer Header-Injection müssen Benutzereingaben sorgfältig geprüft werden, vor allem auf die je nach Kontext geltenden Metazeichen.
So werden in der Regel die einzelnen Header-Felder durch die Zeilenumbruchsequenz CRLF getrennt. Deshalb gilt es, diese in Benutzereingaben herauszufiltern beziehungsweise zu maskieren. Beim HTTP und SMTP wird zum Maskieren z. B. die URL-Kodierung eingesetzt, beim SMTP zusätzlich noch die Quoted-Printable-Kodierung.
PHP
In der weit verbreiteten Skriptsprache PHP wird seit den Versionen 4.4.2 bzw. 5.1.2 eine Injektion über die header
-Funktion automatisch verhindert, indem nur ein HTTP-Header pro Funktionsaufruf zulässig ist. Bei der mail
-Funktion hingegen muss dies jedoch noch manuell gesichert werden.
Einzelnachweise
Weblinks
- HTTP Request Smuggling (englisch)
- HTTP Response Smuggling (englisch)