Vor ca. zwei Wochen machte mich ein Blogleser darauf aufmerksam, dass mein Blog spamverseucht sei (vgl. vorherigen Post). Inzwischen wird das Thema in der Blogosphäre heiß diskutiert (vgl. z.B. Basic Thinking, PHP Performance, Tom’s Diner und Webrocker). Über Webrocker bin ich auf einen sehr lesenswerten Artikel auf spam.weltretter.de gestoßen.
Daraus geht hervor, dass die Spam-Angriffe auch bei aktuellen WordPress-Versionen vorkommen. Diese Aussage hat mich einerseits in meiner Faulheit, immer noch nicht auf WP 2.3 upgedated zu haben, bestärkt, andererseits zu einer neuen Arbeitshypothese gebracht:
Was, wenn das Sicherheitsleck nicht direkt bei WordPress zu suchen ist, sondern beim verwendeten Browser?
Aufgrund dieser Hypothese habe ich folgende Schritte eingeleitet:
- Ich verwende Firefox für Mac (aktuell Version 2.00.12). Beim WP-Admin-Login hatte ich bisher das Passwort in Firefox gespeichert. Diese Funktion habe ich bei Einstellungen > Sicherheit abgestellt.
- Sodann habe ich mein Administrator-Passwort für WordPress geändert. Es enthält nun sowohl Groß- als auch Kleinbuchstaben, außerdem Ziffern und Sonderzeichen, ist also als relativ sicher einzustufen.
Dieses Prozedere habe ich vor etwa vier Stunden eingeleitet. Seither ist Ruhe im Karton. Gut, vier Stunden ist noch kein sehr repräsentativer Zeitraum. Aber bisher war bereits ca. zwei Stunden nach dem Entfernen des Spams aus dem Post wieder neuer Spam vorhanden.
Daher möchte ich diesen Lösungsansatz hiermit der Öffentlichkeit vorstellen und ihn diskutiert wissen.
24. März 2008 um 18:04 Uhr
Ich vermute das die Angriffe über eine XSS-Lücke ausgeführt werden. Derzeit erhalte ich massig Spamkommentare und Referrer die einen HTML-Code mit Iframe enthalten. Über das Iframe können Seiten angegriffen werden.
Kurz gesagt funktioniert es so: Wenn du als Admin im Blog eingeloggt bist und dann so einen Link anzeigst, wird ein Iframe angezeigt, besser gesagt es ist nicht sichtbar da Höhe und Breite auf 0 gesetzt sind. Über dieses Iframe wird dann bösartiger Code eingeschleust und ausgeführt. Ziel ist es offensichtlich das Cookie des Admins zu klauen und dann dementsprechend Beiträge zu manipulieren.
Bis jetzt kann ich das ganze nur ansatzweise nachverfolgen, ich bin in diesem Punkt kein Experte. Aber es reiocht aus wenn man bei Google nach XSS, Iframe und Session Hijacking sucht. Man findet dann ausreichend Informationen um sich ein Bild davon zu machen was passieren kann wenn ungewollt ein Iframe angezeigt wird.
24. März 2008 um 18:12 Uhr
Ok, auch ein interessanter Hinweis, Danke!
Den Kommentarspam habe ich aber eigentlich gut im Griff, Dank Akismet, Math Comment Spam Protection und Trackback Validator. Bis jetzt (seit Juli ’07) kam da nichts durch. Bleibt also die Frage, wie der Hack zu Stande kam.
24. März 2008 um 19:02 Uhr
Das eigentliche Problem ist ja nicht der Kommentarspam, sondern die Links die angezeigt werden. In den Links befindet sich HTML-Code der ein Iframe anzeigt. Wenn du dir also die Liste mit den Kommentarspams anschaust und die Links nicht richtig gefiltert werden, dann wird das Iframe mit der Breite und Höhe 0 Pixel angezeigt. Für dich also unsichtbar. In der Liste sieht alles normal aus, dummerweise wird alleine durch das Anzeigen der Liste mit den Spams ggf. Schadcode ausgeführt.
Ich hatte das Problem bei mir mit dem Plugin Semmelstatz entdeckt. Bemerkt hatte ich es auch nur deswegen, weil das Iframe versuchte eine nicht existente Seite aufzurufen und dadurch eine Fehlermeldung angezeigt wurde.
Theoretisch kann der Hack also bei jeder Seite im Backend bzw. bei jedem Plugin durchgeführt werden, welches Links ungefiltert anzeigt. Vielleicht gibt es ja auch eine Version von Akismet die Iframes nicht sauber raus filtert.
Da müssten sich mal alle gehackten Blogs zusammen setzen und ein paar Informationen (WP-Version, installierte Plugins, usw) austauschen. Dann kann man eher etwas darüber sagen wie die Spammer die Blogs hacken.
24. März 2008 um 21:47 Uhr
Ok, dann könnte der Übeltäter bei mir auch Semmelstatz sein. Oder Akismet, wer weiß.
Gute Idee! Das sollte aber jemand koordinieren, der wirklich Ahnung von WordPress hat. Ich bin da zu sehr „nur“ Nutzer. Ich wäre aber gerne bereit meine Daten bereitzustellen, um hinter das Geheimnis des Spams zu kommen.
24. März 2008 um 22:08 Uhr
Wie wäre es mit einem Eintrag im WP-Forum
24. März 2008 um 19:48 Uhr
Die XSS-Lücke klingt plausibel. Semmelstatz an sich ist bereits ein beliebtes Plugin, und es gibt gewiss noch mehr Plugins, die einen derartigen Angriff zulassen.
Dabei kann allerdings „nur“ das Cookie geraubt werden. In diesem Cookie ist unter anderem das Passwort verbaut, wenn ein betroffenes Blog also das Passwort seines Arbeitsaccounts ändert, wäre das Cookie fortan ungültig.
So weit ich den Quelltext im Kopf habe, werden Kommentare strikt gefiltert. Ein IFRAME ist standardmäßig gar nicht möglich. Stellt sich noch die Frage, über welche Lücke der reinkommt. Haben da etwa ein paar Hackköpfe einen Weg an der Filterung vorbei gefunden?
24. März 2008 um 22:07 Uhr
Das Cookie benötigen die nur 2-3 Sekunden lang. So lange bis sie ihren POST-Request abgesetzt haben mit dem sie die Seiten bearbeiten. Wenn das Cookie geklaut ist, ist der Spam schon so gut wie im Blog.
24. März 2008 um 22:54 Uhr
Ich empfehle, nicht nur das Kennwort des Administrator-Kontos zu ändern, sondern auch den Namen.
Die Passwort-Verwaltung von Firefox halte ich nicht für das Problem. Ich benutze sie nicht und mein Blog war trotzdem betroffen. Auch Version 2.3.3 übrigens.
25. März 2008 um 09:32 Uhr
Leider lässt sich zumindest der Kurzname ‚admin‘ nicht ändern. Muss ich dazu einen zweiten Benutzer anlegen?
Zugegeben, die Idee mit der Passwort-Verwaltung von Firefox war etwas naiv. 😉 Aber immerhin hat sie hier eine, wie ich finde, sehr fruchtbare Diskussion angestoßen.
25. März 2008 um 13:00 Uhr
Habe den Kommentar gerade erst gesehen. Ja, man muß einen zweiten Benutzer anlegen:
1. zweiten User mit Admin-Status einrichten
2. Als dieser neue Admin einloggen
3. Alten Admin löschen und Artikel dem neuen zuweisen lassen.
25. März 2008 um 13:03 Uhr
Danke für die Anleitung! Werde ich gleich mal probieren …
24. März 2008 um 23:26 Uhr
off-the-record – WP 2.3.3
php-performance – WP 2.2.3 (WP-Version steht nur noch im Feed, weiß nicht ob die korrekt ist)
Ja gut, aber … – WP 2.2.1
Fellow Passenger – WP 2.3.3 (übrigens, „Kurz Notiert II“ ist schon wieder verseucht)
Entweder es ist ein Bug der ab WP 2.2.x vorhanden ist und nach WP 2.3.x mitgeschleppt wurde. Oder aber der Fehler ist unabhängig von der WP-Version.
Vielleicht hier mal so ein paar Infos sammeln, hier steht ja schon einiges.
24. März 2008 um 23:45 Uhr
Ich habe bei mir gerade unter wp-content/1 einen Haufen spamhaltiger HTML-Dateien entdeckt. Die Cracker haben also sogar Schreibzugriff auf das Dateisystem.
25. März 2008 um 00:56 Uhr
Ich würde mal eher darauf tippen das sie die Upload-Funktion von WP benutzt haben. Ansonsten hätten sie den Kram wahrscheinlich woanders hin gepackt.
25. März 2008 um 01:24 Uhr
Die Upload-Funktion sollte eigentlich nur eine Ebene tiefer unter „uploads“ schreiben dürfen. Wie auch immer der Schreibzugriff praktisch zustande kommt, funktioniert er offensichtlich prächtig:
Herr Gugel zeigt über weit über 3000 geknackte WP-Blogs
25. März 2008 um 09:40 Uhr
Diese Form von Spam konnte ich glücklicherweise in meinem Blog nicht beobachten.
25. März 2008 um 12:18 Uhr
Das mit dem WP-Forum ist vielleicht gar keine schlechte Idee. Ich habe da mal meine Konfiguration gepostet. Vielleicht kommt man der Sache so näher.
25. März 2008 um 12:49 Uhr
Elias hat zwar schon einen Post auf „Lumières dans la nuit“ angelegt und zu Angaben in Form von Kommentaren aufgerufen. Aber ich denke auch, dass ein Forum übersichtlicher und nicht zuletzt durch die nachträgliche Editierbarkeit der Posts besser geeignet für solch eine Zusammenstellung ist. Ich habe daher meine Daten dort auch gepostet.