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).

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: [email protected]
To: [email protected]
Nachricht

Wenn nun ein Angreifer in das Eingabefeld des Formulars für den Betreff die Zeichenfolge Carriage Return und Linefeed sowie BCC: [email protected], [email protected], … eingibt und das Skript diese Eingaben ungeprüft in die E-Mail-Nachricht übernimmt:

Subject: Spam
BCC: [email protected], [email protected], …
From: [email protected]
To: [email protected]
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.[1] Bei der mail-Funktion hingegen muss dies jedoch noch manuell gesichert werden.[2]

Einzelnachweise

  1. Referenzseite der header()-Funktion des PHP-Handbuchs
  2. Referenzseite der mail()-Funktion des PHP-Handbuchs

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.