Ich interessiere mich gerade für Webtraffic und Spiders und bastele dazu an einem "realtime Monitor", den man auf das Logfile des Webservers ansetzen kann. Passend dazu kam gestern über FriendFeed ein Link von Charleno Pires zu einem Artikel bei IBM developerWorks® mit dem Titel "Working with Web server logs" in python.
Wenig erstaunlich macht der Autor Uche Ogbuji erst einmal einiges recht ähnlich, doch im zweiten Teil des Artikels nimmt er die Daten und packt sie in Webseiten zur Darstellung. Dabei macht er einen kapitalen Fehler und übernimmt alles ungeprüft. Da die Daten zu "localpath", "referrer", "user-agent" und natürlich auch zu "ident" oder "cookie" vom Client kommen, kann da ziemlich Übles drinstehen (was den Server beim Loggen auch gar nicht interessiert), wie z.B. Folgendes, was sich letzt' in einem meiner Logfiles fand:
a.b.c.d - - [25/Sep/2009:20:42:21 +0200] "HEAD / HTTP/1.1" 200 - "<script>alert(new Date());</script>" "Foxconn D910.0.3.53 FS_D910.0.2.48_DTC"
Wie man sieht, wurde hier - statt einer URI - im Referrer-Feld Javascript-Code übergeben. Übernimmt man diesen nun ungeprüft in eine Webseite mit einer Referrer-Auswertung, so wird beim Betrachten mit aktiviertem Javascript ein Popup mit der aktuellen Uhrzeit aufgehen.
Neben diesem eher sehr harmlosen Beispiel gehen damit auch andere Sachen, bis hin zu übelsten XSS-Angriffen.
Das Problem ist aber nicht nur auf Darstellung im Web/HTML beschränkt, auch mit einer reinen Textdarstellung in einer ANSI/VTxxx kompatiblen Konsole (xterm, putty, ...) lassen sich Logfile-Einträge überschreiben, indem die Darstellung mit entsprechenden Steuersequenzen manipuliert wird. Manche Terminal-Emulationen erlauben sogar die Modifikation der Cut-Buffer und/oder Funktionstasten, andere haben Funktionen für Record und Playback für Macros.
Generell gilt immer:
Nichts, was das Internet anliefert, ist vertrauenswürdig.
Comments
No comments