Michael Kanda Logo

Schatten-Admin in WordPress

Von Michael Kanda · Fachlich aktualisiert am

Ein Schatten-Admin ist ein Benutzerkonto mit Administratorrechten, das in der WordPress-Benutzerliste nicht angezeigt wird. Angreifer legen es nach einer Kompromittierung an, damit sie auch nach einem Passwortwechsel und einem Plugin-Update weiter Zugriff auf die Installation haben.

Warum das Konto in der Oberfläche fehlt

Versteckte Konten und unerwartete Privilegien haben verschiedene Ursachen. Manipulierter Code kann Benutzer aus der Anzeige filtern; eigene Rollen oder ein Multisite-Kontext können einen Vergleich erschweren. Ein versteckter Angreiferzugang setzt eine vorherige Kompromittierung voraus.

Über einen Filter. Ein kleines Stück Code, meist versteckt in einer Theme-Datei oder einem harmlos benannten Plugin, hängt sich an die Benutzerabfrage und entfernt eine bestimmte ID aus dem Ergebnis. In der Datenbank ist alles normal, nur die Ansicht lügt.

Rollen und Tabellenpräfix prüfen. WordPress liest Berechtigungen über den zur aktuellen Website gehörenden Schlüssel, beispielsweise wp_capabilities. Ein anderer Schlüssel verleiht nicht automatisch Rechte auf dieser Website. In Multisite sind Schlüssel wie wp_2_capabilities legitim. Abweichungen sind deshalb zu erklären, nicht pauschal als Angriff zu bewerten.

Über eine eigene Rolle. Statt „Administrator“ bekommt das Konto eine selbst angelegte Rolle mit denselben Rechten und einem unauffälligen Namen. Wer nur nach Administratoren filtert, findet sie nicht.

Woran man es trotzdem erkennt

Unerklärliche Unterschiede zwischen angezeigten Benutzern, Rollenfiltern und der Datenbank sind ein Anlass zur Prüfung. Seitenaufteilung, aktive Filter und Multisite-Zugehörigkeiten müssen zuerst berücksichtigt werden. Eine abweichende Zahl allein beweist keine Kompromittierung.

Weitere Anzeichen: Anmeldungen zu Zeiten, an denen niemand arbeitet. Beiträge oder Änderungen, die keinem bekannten Konto zuzuordnen sind. Registrierungsdaten, die zeitlich mit einem bekannten Vorfall zusammenfallen. Und Konten mit E-Mail-Adressen auf Wegwerf-Domains.

Die Abfragen, die es sichtbar machen

Der zuverlässige Weg führt an der Oberfläche vorbei. Alle Beispiele nutzen das Standardpräfix wp_ und müssen an die jeweilige Installation angepasst werden.

Erster Anhaltspunkt: Konten, deren gespeicherte Rollenangabe das Wort administrator enthält. Die Textsuche ist keine vollständige Berechtigungsprüfung; benutzerdefinierte Rollen, direkt zugewiesene Fähigkeiten und Multisite-Super-Admins können fehlen:

SELECT u.ID, u.user_login, u.user_email, u.user_registered
FROM wp_users u
JOIN wp_usermeta m ON m.user_id = u.ID
WHERE m.meta_key = 'wp_capabilities'
  AND m.meta_value LIKE '%administrator%';

Weitere Capability-Schlüssel zur manuellen Einordnung, etwa aus Multisite oder früheren Installationen:

SELECT user_id, meta_key, meta_value
FROM wp_usermeta
WHERE meta_key LIKE '%capabilities'
  AND meta_key != 'wp_capabilities';

WP-CLI liefert einen zweiten Blick außerhalb der Benutzeroberfläche. Für ein kompromittiertes System sollte die Prüfung möglichst an einer isolierten Kopie erfolgen. --skip-plugins und --skip-themes reduzieren geladenen Fremdcode; Must-use-Plugins werden dadurch nicht übersprungen:

wp user list --role=administrator --fields=ID,user_login,user_email,user_registered --skip-plugins --skip-themes
wp role list --skip-plugins --skip-themes
wp user list --field=ID --skip-plugins --skip-themes | wc -l

Prüfe bei Abweichungen den Website-Kontext und die Ursache. Eigene Rollen müssen zusätzlich anhand ihrer Fähigkeiten untersucht werden. Auch WP-CLI lädt WordPress-Code und ist auf einer kompromittierten Installation keine unabhängige Vertrauensquelle. Eine direkte Datenbankprüfung ergänzt den Vergleich.

Sauber entfernen

Die Reihenfolge ist wichtiger als die Werkzeuge. Wer mit dem Löschen anfängt, verliert die Spuren, die er zur Ursachensuche braucht.

  1. Sichern. Vollständige Kopie von Dateien und Datenbank, bevor irgendetwas verändert wird. Das ist die Grundlage für alles Weitere und im Ernstfall auch für die Meldung.
  2. Dokumentieren. Benutzername, E-Mail, Registrierungsdatum, letzte Anmeldung, soweit protokolliert, zugehörige Meta-Einträge notieren.
  3. Zugänge und Sitzungen widerrufen. Verdächtige Konten sperren, vorhandene Sitzungen gezielt zerstören und bei Bedarf die Authentifizierungs-Salts erneuern. Ein Passwortwechsel verändert die Grundlage der WordPress-Authentifizierung und macht normalerweise bestehende Cookies des betroffenen Kontos ungültig. Er entfernt aber keine anderen Konten, Anwendungspasswörter oder Hintertüren.
  4. Unbefugte Konten deaktivieren und entfernen. Nach Sicherung und Prüfung der Belege Zugriff unterbinden. Eine Herabstufung zum Abonnenten beseitigt keine kompromittierte Codebasis. Beim Löschen berechtigte Inhalte einem vertrauenswürdigen Benutzer zuweisen.
  5. Reste entfernen. Verwaiste Einträge in wp_usermeta zur gelöschten ID, dazu den Code, der das Konto versteckt hat.
  6. Alle übrigen Zugänge erneuern. Passwörter aller verbleibenden Administratoren, Datenbankbenutzer, FTP- und SSH-Zugänge, API-Schlüssel.

Warum Löschen allein nichts nützt

Ein Schatten-Admin ist ein Symptom. Solange der Einstiegsweg offen ist, kann der Angreifer erneut Konten oder andere Zugänge anlegen. Zu suchen ist also weiter: veraltete Plugins mit bekannter Lücke, hochgeladene Dateien in Verzeichnissen, in denen keine ausführbaren Dateien liegen dürfen, veränderte Kerndateien, geplante Aufgaben, die niemand angelegt hat.

Wer die Ursache nicht findet, hat zwei ehrliche Möglichkeiten: die Installation sauber neu aufsetzen und nur geprüfte Inhalte übernehmen, oder mit dem Restrisiko leben und das dem Betreiber auch so sagen.

Vorbeugen

Benachrichtigungen bei privilegierten Konten und Rollenänderungen erleichtern die Erkennung. Ergänze regelmäßige Prüfungen von Benutzern und Fähigkeiten, aktuelle Software, abgesicherte Administratorzugänge und getestete Backups. Die Prüffrequenz richtet sich nach Risiko und Änderungen; eine monatliche Kontrolle ist keine allgemeine Sicherheitsgarantie.

Zum Aufspüren und kontrollierten Entfernen habe ich ein defensives Werkzeug veröffentlicht: den wp2shell IOC Scanner.

Verwandte Begriffe

Quellen und weiterführende Dokumentation