Seltsame Spam-Attacken
Patrick Andrieu
- sonstiges
"Mein" Formmailer von nsm-cgi.sourceforge.net habe ich so konfiguriert, dass die Mails die ich über ein Kontaktformular erhalte wie folgt aussehen:
Hier die Auswertung des XYZ-Formulars, gesendet von
Name (E-Mail) am Datum um Uhrzeit
---------------------------------------------------
Mitteilung: Text text text text
---------------------------------------------------
IP-Adresse: 255.255.255.255
Referrer: http://www.atomic-eggs.com/formulardatei.blubb
Ich habe zusätzlich einige Sperren eingebaut, bei einigen sendet das Script einen 403. Sieht in etwa so aus:
if ($duverhälstdichwieicheswill) {
&darfstedeinemitteilungsenden;
} else {
print header(-Status => 403); exit;
}
Soweit so schlecht. Heute habe ich eine E-Mail erhalten, die insofern seltsam ist, dass sie so aussah:
Hier die Auswertung des XYZ-Formulars, gesendet von
bdcerdr (bdcerdr@bdcerdr.com) am 10. Juni 2007 um 11:59:42 Uhr
---------------------------------------------------
Jede Menge JavaScript-Code (dessen Anfang fehlt)
und HTML-Quelltext
Mitteilung: Haufen
Links
auf
Pornoseiten
Irgendwann mitten drin ageschnitten
---------------------------------------------------
IP-Adresse: 58.67.60.200
Referrer: http://www.atomic-eggs.com/impressum.html
Abgesehen vom Code zwischen der ersten Dash-Linie und "Mitteilung:", von dem ich mir nicht erklären kann, wie er da rein kommt - aber dazu komme ich später - haben mich folgende Sachen stutzig gemacht:
Also Logs studieren, das gefunden:
58.67.60.200 - - [10/Jun/2007:11:59:30 +0200] "GET /impressum.html HTTP/1.1" 301 258 www.atomic-eggs.com "-" "UA" "-"
58.67.60.200 - - [10/Jun/2007:11:59:32 +0200] "GET /formulardatei.blubb HTTP/1.1" 200 20039 www.atomic-eggs.com "-" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:10:41 +0200] "POST /ordner/script.cgi HTTP/1.1" 403 5 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:10:47 +0200] "POST /ordner/script.cgi HTTP/1.1" 200 18562 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
58.67.60.200 - - [10/Jun/2007:12:18:34 +0200] "POST /ordner/script.cgi HTTP/1.1" 403 5 www.atomic-eggs.com "http://www.atomic-eggs.com/impressum.html" "UA" "-"
UA = Mozilla/5.0 (Windows; U; Windows NT 5.2; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
2 Mal hat der Spammer einen 403 erhalten, einmal (12:10:47 Uhr) einen 200er (was zwar noch lange nicht bedeuten muss, dass die Mail durch ist, in dem Fall war es aber so, sonst hätte ich sie nicht erhalten, s.o.: Das Script zeigt "normalen" Usern bei manchen Fehleingaben auch mal eine Fehlermeldung, deswegen kann 200 als Antwort durchaus OK sein).
Solche Log-Einträgen wie im obigen Ausschnitt habe ich in der heutigen access_log (tägliche Logs) mehrere. Nur zum Glück sind alle weiteren POST-Aufrufe des Scripts mit einem 403 quittiert worden, ein Blick in die mail.log zeigte ebenfalls, dass es dem Spammer nur einmal gelungen ist, diese eine Mail an mich (vielleicht ging sie auch an andere) zu schicken.
Das alles hat dazu geführt, dass ich eine böse Sicherheitslücke im Script endeckt habe (eine ältere, dumme Änderung von mir), die ist jetzt wieder geschlossen.
Meine Frage - abgesehen natürlich davon, ob andere so was in der Form erlebt haben - ist: wie kommt dieser Quelltext in der E-Mail zustanden:
[...]
} else {
document.emailForm.action = "http://www.example.com/index.php?option=etwas&Itemid=siebenstelligezahl"
mehr JavaScript-,
mehr HTML-Code
[...]
Mitteilug: Linkliste
Die URL habe ich aufgerufen und festgestellt, dass dieser Quellcode in der von mir erhaltenen E-Mail eben ein Teil des Quelltexts dieser Seite ist (sie bietet ebenfalls ein Kontaktformular an). Wie kommt der Code in die Mail rein, wie kommt er außerhalb von "Mitteilung"? Gefakte Formseite mit gefaktem Referrer abgeschickt?
Viele Grüße aus Frankfurt/Main,
Patrick
Die URL habe ich aufgerufen und festgestellt, dass dieser Quellcode in der von mir erhaltenen E-Mail eben ein Teil des Quelltexts dieser Seite ist (sie bietet ebenfalls ein Kontaktformular an). Wie kommt der Code in die Mail rein, wie kommt er außerhalb von "Mitteilung"? Gefakte Formseite mit gefaktem Referrer abgeschickt?
Hast du dich mit E-Mail Injection auseinandergesetzt?
http://www.securephpwiki.com/index.php/Email_Injection
Ich werd nicht ganz schlau aus deiner Beschreibung. Könntest du die Mail (im Quelltext, mit Header) hier posten?
Hallo splinter!
Hast du dich mit E-Mail Injection auseinandergesetzt?
Ist mir nicht gänzlich unbekannt.
http://www.securephpwiki.com/index.php/Email_Injection
This is PHP, that's not my home. Der von mir benutzte Formmailer ist in Perl geschrieben. Die E-Mail-Adresse (also meine), an welche die Daten übermittelt werden sollen, steht nur im Perl-Script. Im Formular ist nur ein hidden-Input mit name="blafoo" value="1".
Die Sicherheitslücke, die in der Tat sowas ermöglichte, habe ich heute (halt danach) behoben.
Ich werd nicht ganz schlau aus deiner Beschreibung. Könntest du die Mail (im Quelltext, mit Header) hier posten?
Ungern... Ich mache mir aber Gedanken, in wie weit ich es anonymisieren kann.
Viele Grüße aus Frankfurt/Main,
Patrick