E-Mail-Injektion bezeichnet das Ausnutzen einer Sicherheitslücke in einer Webanwendung, die es einem Angreifer erlaubt, über ein ungeschütztes Kontaktformular ohne Wissen und Einverständnis des Betreibers E-Mails zu verschicken. Das Hauptinteresse des Angreifers ist der Versand von Spam. Der Begriff wurde von der Sicherheitslücke SQL-Injection abgeleitet.
Funktionsweise
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-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.
Verbreitung
Bis 2004 war die Lücke zwar bekannt, wurde aber nur vereinzelt ausgenutzt. Seit 2005 häufen sich die Meldungen, dass Search-Bots – ähnlich denen einer Suchmaschine – in großem Umfang Formulare auf Webseiten mit der Brute-Force-Methode auf eine Verwundbarkeit hinsichtlich dieser Sicherheitslücke überprüfen. Es ist zu erwarten, dass die hierbei gesammelten Informationen in naher Zukunft zum Versand von Spam in größerem Umfang eingesetzt werden.
Beispiel
Der nachstehende Code zeigt die Daten eines solchen HTTP-Requests auf ein Kontaktformular einer in PHP geschriebenen Webanwendung.
$_REQUEST = Array {
["name_absender"]=> string(215) "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: charleslegbe@aol.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 AOL 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.
Abwehrmaßnahmen
In Internet-Foren wird über geeignete Abwehrmaßnahmen diskutiert. Vermeintlich schützende Maßnahmen, wie das gezielte Aussperren eines bestimmten Search-Bots anhand der von ihm verwendeten E-Mail-Adresse, das Abprüfen des Referrers bei der Verarbeitung der Eingaben oder des ausschließlichen Akzeptierens von Eingaben über HTTP-POST aus dem Kontaktformular, können leicht umgangen werden.
Eine wirksame Maßnahme ist das Unterbinden von Zeilenumbrüchen in Variablen, die später in den Header der E-Mail eingefügt werden sollen. Ob dabei ein mehrzeiliger String auf die erste Zeile gekürzt oder bei der Feststellung von Zeilenumbrüchen die Verarbeitung des Programmes unterbrochen wird, ist dem Programmierer freigestellt.