- Header-Injection
-
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).
Inhaltsverzeichnis
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.[1] Bei dermail
-Funktion hingegen muss dies jedoch noch manuell gesichert werden.[2]Einzelnachweise
- ↑ Referenzseite der
header()
-Funktion des PHP-Handbuchs - ↑ Referenzseite der
mail()
-Funktion des PHP-Handbuchs
Weblinks
- HTTP Request Smuggling (englisch)
- HTTP Response Smuggling (englisch)
- ↑ Referenzseite der
Wikimedia Foundation.