Header-Injection

0 | 9923 Aufrufe
Sie können diese Wikiseite nach der Anmeldung auf Webmasterpro bearbeiten. Helfen Sie mit und verbessern Sie "Header-Injection" mit Ihrem Wissen!

Anzeige Hier werben

Kurze Beschreibung:

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.

Folgen:

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 um so beispielsweise Spam zu versenden (E-Mail-Injektion).

Funktionsweise:

Beispiel: E-Mail Injection

Die Sicherheitslücke besteht darin, dass die in ein Kontaktformular eingegebenen Daten ohne weitere Prüfung an den Mailserver weitergereicht werden. Dem Angreifer kommt dabei zugute, dass die Header (E-Mail)-Informationen zeilenweise am Anfang der E-Mail stehen und einige Programmiersprachen für Webanwendungen selbst keine Überprüfung der Daten beim Versand einer E-Mail vornehmen. Der Vorgang der E-Mail-Injektion besteht darin, einzeilige Eingaben, wie zum Beispiel den Betreff der Anfrage, mit mehrzeiligen Informationen zu füllen. Dabei können beispielsweise weitere Empfänger gesetzt werden, unter Umständen auch als "CC" oder "BCC", selbst wenn der Programmierer der Webanwendung eine Empfängeradresse fest vorgegeben hat.

 
PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
$_REQUEST = array(
    "name_absender" => "of
    Content-Type: text/plain; charset=\"us-ascii\"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: nton an incoln. e d be bucked off befure
    bcc: spamopfer@example.com
    ec36ff5aa45502446284c4f3ce2b3896."
)
?>

Dabei steht $_REQUEST für das Array, das alle Variablen enthält, die dem HTTP-Request mitgegeben wurden. Das ist in diesem Fall nur die Variable name_absender. Diese ist ein String von 215 Zeichen, der sich über neun Zeilen erstreckt. Baut die Webanwendung den Namen des Absenders in den Header einer E-Mail ein, wird die E-Mail ungewollt auch an die angegebene Adresse beim Provider example.com gesendet. Hier handelt es sich noch nicht um das Aussenden von SPAM selbst, sondern um den Test, ob das betreffende Kontaktformular anfällig für die Sicherheitslücke ist. Die Zeile mit den 32 Zeichen wird vermutlich ein Hash-Wert sein, mit dem der Angreifer die URL des ungeschützten Kontaktformulars codiert hat, um sie später zu identifizieren.

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.

In PHP wird seit den Versionen 4.4.2 bzw. 5.1.2 eine Injektion über die header-Funktion automatisch verhindert. Bei der mail-Funktion hingegen muss dies jedoch noch manuell gesichert werden.

Fazit:

Header-Injection kann zu Cross-Site-Scripting oder HTTP-Response-Splitting führen, damit wäre es möglich Schadcode zu übermitteln und die Webseite bzw. den Webserver zu kontrollieren. Durch geeignete Abwehrmaßnahmen, die sorgfältige Prüfung der Benutzereingaben, wird eine Header-Injection gänzlich verhindert und wir alle können uns über weniger Spam Nachrichten freuen.

zurück zur Übersicht Web-Sicherheit


Wikiseite bearbeiten

Diese Seite kann von jedem registrierten Benutzer bearbeitet werden. Bisher haben 2 Personen an der Seite "Header-Injection" mitgewirkt.

Sie haben einen Fehler entdeckt oder möchten etwas ergänzen? Dann können Sie nach der Anmeldung "Header-Injection" hier bearbeiten.

Mitarbeiter