Ausgewählte Arbeiten

WordPress Incident Response

Die Website sah normal aus. Google sah fünfeinhalb Monate lang Casino-Links.

Eine polnische Rechts- und Buchhaltungskanzlei vermutete einen Hack ihrer WordPress-Websites. Wir haben alles gesichert, den Angriff rekonstruiert, den Spam entfernt und jeden Zugang des Angreifers geschlossen.

WordPress-Seiteneditor mit markierten versteckten Spam-Blöcken und einer Zwei-Faktor-Anmeldung
Mit position:absolute aus dem Bild geschobene Blöcke. Für Besucher unsichtbar, für Suchmaschinen sichtbar.

Der Auftrag: erst verstehen, was passiert ist, dann eingreifen

Die Kanzlei betreibt drei WordPress-Websites auf einem gemeinsamen Hosting-Konto: Unternehmensseite, Leistungsseite und Help Center. Niemand wusste, wie tief das Problem reicht, und niemand wollte eine Bereinigung, die alle Spuren vernichtet.

„Die Seiten sind gehackt, mindestens eine. Sichere sie, prüfe Dateien und Datenbanken. Ändere vorerst nichts.“

01

Was die Untersuchung ergab

5,5 Monate
versteckter Spam auf der Startseite und der Leistungsseite
8 Links
zu Casinos, Kurzzeitkrediten und Krypto-Börsen in 7 versteckten Blöcken
6.000+
Passwortversuche über xmlrpc.php in sechs Wochen
3,8 GB
alte Website-Archive, die jeder per URL herunterladen konnte

02

Der Angreifer meldete sich mit einem echten Admin-Passwort an

Jede Spam-Änderung kam aus einem echten Administratorkonto, nach einer normalen Anmeldung im ersten Versuch. Brute Force lief ebenfalls, aber das Passwort war bereits bekannt. Die beiden sauberen Websites hatten dieselben Administratoren.

  1. 28. Mai

    Erster versteckter Link auf der Startseite.

  2. Juli

    Kredit-, Casino- und Krypto-Links in zwei weiteren Wellen.

  3. 28. September

    Die Leistungsseite erhält einen Block mit litauischen Casino-Links.

  4. 3. November

    Letzte Änderung der Startseite, von einer AWS-IP-Adresse.

  5. 12. November

    Sicherung, Untersuchung und Bereinigung beginnen.

Was wir getan haben, der Reihe nach

  1. 01

    Zuerst sichern

    Dateien, Datenbanken, Zugriffslogs und alte Archive aller drei Websites, rund 10 GB, lokal kopiert, bevor die Analyse begann. Die Datenbanken byte-genau, damit polnische und kyrillische Texte exakt wiederherstellbar bleiben.

  2. 02

    Untersuchen

    WordPress-Core Datei für Datei mit der offiziellen Version verglichen. Plugins, Themes, Uploads und mu-plugins auf Web-Shells geprüft, Datenbanken auf versteckte Blöcke und fremde Admins, Logs auf Anmeldungen und Änderungen. Zusätzlich geprüft, was Googlebot sieht.

  3. 03

    Bereinigen

    30 Spam-Blöcke aus 11 Datenbankeinträgen entfernt, darunter 9 alte Revisionen, damit der Spam nicht per Wiederherstellung zurückkommt. Jede Änderung gegen den Hash des Eintrags geprüft, sichtbarer Text unverändert.

  4. 04

    Türen schließen

    Öffentliche Archive gelöscht, ein gefälschtes Plugin und ein Backdoor-Ordner entfernt, xmlrpc.php gesperrt, Sicherheitsschlüssel rotiert, Datenbank-Passwörter geändert. Eine fremde E-Mail-Adresse für Passwort-Resets an 15 Stellen ersetzt.

  5. 05

    Patchen und härten

    Remote Code Execution in WPML (CVSS 9.9) und beliebiges Dateilesen in Smart Slider 3 Pro mit Einzeiler-Patches geschlossen. Ein abgestürzter Admin-Bereich repariert, Updates neu konfiguriert, 2FA für alle Admins und Redakteure verpflichtend.

03

Unsere Regeln auf einem laufenden Produktivsystem

Beweise vor Bereinigung

Auf dem Server änderte sich nichts, bevor die Sicherung geprüft und die Befunde berichtet waren.

Freigabe für jede Änderung

Jede Änderung wurde vorgeschlagen, vom Kunden freigegeben und erst dann umgesetzt.

Sicherung neben jeder Änderung

Jede geänderte Datei und Tabelle wurde vorher gesichert und lässt sich in Minuten zurückdrehen.

Umkehrbar per Design

Als der Kunde einen entfernten Dateimanager zurückwollte, war er in einer Minute wiederhergestellt.

04

Der gefährlichste Fund lag auf einer „sauberen“ Website

Zwei alte Archive im öffentlichen Web-Root der Hauptseite lieferten jedem HTTP 200, der die URL kannte. Solche Archive enthalten meist wp-config.php mit Datenbank-Passwörtern. Beweisen lässt sich nicht, dass das Admin-Passwort so abfloss, aber es war der wahrscheinlichste Weg. Heute liefern sie 404.

Technische Details

Zugriff über SSH und cPanel UAPI. Gearbeitet wurde mit WP-CLI und direktem SQL über eine latin1-Verbindung, mit byte-genauer Ersetzung und MD5-Prüfung, damit mehrsprachige Inhalte intakt bleiben.

Der Spam war mit position:absolute und Versätzen wie left:-503011px versteckt, dazu weißer oder 8–12 px großer Text. Zwei Kopien waren als escapter HTML-Code eingefügt, Besucher sahen auf der Startseite rohen Code.

Patches: WPML rendert Shortcode-Inhalte des Sprachumschalters nicht mehr als Twig-Template (CVE-2024-6386). Der Export in Smart Slider 3 Pro verlangt jetzt Bearbeitungsrechte und ein Sicherheitstoken (CVE-2026-3098).

Die Zwei-Faktor-Anmeldung nutzt eine Authenticator-App (TOTP) mit Backup-Codes und 30 Tagen Übergangsfrist. Die Admins erhielten eine einseitige PDF-Anleitung mit Screenshots, QR-Codes unkenntlich gemacht.

Die Untersuchung führte ein KI-Coding-Agent per SSH unter menschlicher Kontrolle durch. Der Agent übernahm Log-Analyse, Dateivergleich und Datenbankarbeit. Menschen trafen jede Entscheidung und gaben jede Änderung frei.

Verdacht, dass Ihre WordPress-Website kompromittiert ist?

Wir klären, was passiert ist, bevor etwas gelöscht wird.

Untersuchung anfragen