Tipps zum Verhindern von Spam-Missbrauch der Mailformulare

E-Mail-Injection / E-Mail-Header-Injection

Was ist das?

Der Begriff „E-Mail-Injection“ beschreibt das Ausnutzen einer Sicherheitslücke in einer Webanwendung mit dem Ziel, beliebige E-Mails ohne Wissen oder Einverständnis des Betreibers der Webanwendung zu verschicken. Selbst bei einer fest im Code definierten Empfängeradresse ist dies möglich. Diese Sicherheitslücke entsteht meist durch ungenügend geprüfte Parameter, die an die mail()-Funktion von PHP übergeben werden. Ausgenutzt wird das hauptsächlich von Spammern, die unerkannt massenhaft E-Mails versenden wollen.

Wie finden die Spammer die ungesicherten Formulare?

Ähnlich wie Suchmaschinen schicken auch Spammer eigene „Robots“ durchs Netz, um auf Webseiten nach solchen Formularen zu suchen. Sie unternehmen den Versuch eine Testmail über diese Sicherheitslücke zu verschicken und werten das Ergebnis dieses Tests aus, um ein anfälliges Formular später weiterzuverwenden.

Wie funktioniert das?

Vereinfacht ausgedrückt besteht eine E-Mail aus einem Header- (Kopfzeilen) und einem Body-Teil (dem Nachrichtenteil). Im Header befinden sich u.a. Informationen über den Empfänger, Absender und den Betreff. Im Body der E-Mail steht der eigentliche Mailinhalt. Diese beiden Teile werden durch eine leere Zeile voneinander getrennt.

Wenn jetzt ein Kontaktformular einer Webseite Eingaben vom Benutzer, wie den Betreff oder den Absender, ohne Überprüfung auf Zeilenumbrüche an die mail()-Funktion weitergibt, dann kann ein Angreifer seine eigenen Header-Informationen (z.B. andere Empfänger, eigenen E-Mail-Text) einschleusen. Hier hilft es auch nicht, wenn das Eingabefeld des Webformulars nur eine Eingabezeile bereitstellt. Es ist problemlos möglich Zeilenumbrüche miteinzufügen.

Ein Angreifer benutzt jetzt eines der Felder, die ungeprüft übergeben werden, um eine komplette E-Mail inklusive Header-Informationen, Leerzeile zum Abtrennen des Body-Teils und eigenem E-Mailinhalt einzufügen. Der Rest der ursprünglichen E-Mail wird an die Spam-Mail mit angehangen, ist teilweise auch noch sichtbar, jedoch gibt es für Spammer auch Methoden die übriggebliebene, eigentliche Information aus der E-Mail für den Empfänger des Spams zu verbergen.

Was tut man dagegen?

Sämtliche Informationen, die in den E-Mail-Header gelangen werden (wie z.B. Absender oder Betreff) benötigen keine Zeilenumbrüche. Genau diese Zeilenumbrüche möchte der Angreifer aber einfügen. Man wehrt den Angriff also am Besten ab, indem man das Vorhandensein von Zeilenumbrüchen in diesen Feldern vor dem Abschicken der E-Mail prüft.

Für JPBerliner besteht die Möglichkeit, das JPBerlin Mehlform zu benutzen, um Spam zu vermeiden. Sofern jedoch in einer selbstentwickelten Webanwendung das Mailen sicher gemacht werden soll, müssen die Header-Informationen überprüft werden. Dazu bieten sich folgende Funktionen an:

function removebreaks($value) {
return trim(preg_replace(‚=((||0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i‘, null, $value));
}
function checkbreaks($value) {
return $value === removebreaks($value);
}

Die Funktion removebreaks nimmt einen Wert entgegen und schneidet alles hinter einem Zeilenumbruch ab, inklusive des Umbruchs. Zurückgeliefert wird der bereinigte Wert.

Mit checkbreaks lässt sich überprüfen, ob ein Zeilenumbruch vorhanden ist. Damit checkbreaks funktioniert, muss auch die Funktion removebreaks vorhanden sein. checkbreaks liefert die Werte true oder false zurück.

Es bleibt jedem Entwickler selbst überlassen, ob er die Eingaben lieber säubern möchte oder unsaubere Eingaben mit einer Fehlermeldung ablehnt – das Ablehnen von unsauberen Daten ist jedoch zu empfehlen. Jedem seien an dieser Stelle zwei Grundsätze der sicheren PHP-Programmierung ans Herz gelegt: „Traue keinen Daten die einmal beim User waren“ und „Daten lieber ablehnen als versuchen, sie zu reparieren“.

Weiterführende Links mit detaillierteren Informationen:
E-Mail-Injection auf securephpwiki.com
E-Mail-Injection bei Wikipedia
Um Formulare möglichst spamsicher zu machen, liefert Ned Batchelder eine gute Hilfestellung.

  • 26. Juli 2013

  • 1 Kommentar

1 Kommentar

JPBerlin Mehlform 1.1 | JPBerlin

2013-08-13 18:30:12

[…] einer E-Mail und verhindert somit auch NICHT Spam auf die angegebene Empfänger-Adresse zu senden.. Hier findest Du weiterführende Informationen und Tipps zum Spam-Schutz der […]


Kommentar abgeben

Sie müssen eingeloggt sein um zu kommentieren.