Die Mail-Attacke zerstört nicht die Datenbank oder späht Daten aus, sondern wird dafür benutzt, Spam-Emails zu verschicken. Dreh und Angelpunkt ist die Funktion mail()
von PHP. Diese wird wie folgt aufgerufen:
1 2 3 |
<?php mail($to, $betreff, $nachricht); ?> |
Angenommen, der PHP-Programmierer war vorsichtig und die Variable $to
ist fest gesetzt. Dies tut er, weil er nur Emails an seine eigene Adresse zustellen möchte, um zum Beispiel die Eingaben in einem Webformular zu erhalten. Allerdings soll der Betreff frei wählbar bleiben und wird übergeben.
Das Emailprotokoll besagt, dass eine Email aus verschiedenen Header-Zeilen besteht. Jede neue Zeile beginnt mit einem Zeilenvorschub gefolgt von dem Mail-Kommando und dann seinen Parametern. Auch die Betreffzeile ist ein Kommando.
Nun kann der Angreifer hingehen und den Betreff hinterlistig ändern, beispielsweise in Betreff\nbcc:opfer@somewhere.com
.
PHP wird nun \n
interpretieren und eine neue Zeile nach dem Betreff beginnen lassen. In dieser Zeile steht nun, dass die Email nicht nur an den Entwickler selbst, sondern auch an die Emailadresse opfer@somewhere.com
per BCC gesendet wird. Somit kann in vielen Formularen das Betreff-Feld manipuliert werden, um diese Formulare dazu zu missbrauchen Spam-Emails zu senden.
Gelöst werden kann das Problem, indem man entsprechend auf Zeilenvorschübe filtert. Werden keine Zeilenvorschübe zugelassen, so läuft die Attacke ins Leere.