Das Sicherheitsupdate vom 17. Juli hat die Lücke geschlossen — aber keine einzige Hintertür entfernt, die vorher gesetzt wurde. Seit die US-Behörde CISA die beiden wp2shell-Schwachstellen am 21. Juli als aktiv ausgenutzt eingestuft hat und einen Tag später funktionierender Angriffscode öffentlich wurde, läuft nicht mehr die Angriffswelle, sondern die Aufräumwelle. Dieser Beitrag beschreibt, wie Sie feststellen, ob Ihre Website betroffen ist — und was danach zu tun ist.
Das Wichtigste in Kürze
- Zwei getrennte Fragen: «Ist die Lücke geschlossen?» beantwortet die Versionsnummer. «Wurde ich vorher übernommen?» beantwortet nur eine Prüfung von Dateien, Benutzern und Datenbank.
- Das kritische Zeitfenster liegt zwischen dem 17. Juli 2026 und dem Zeitpunkt, an dem Ihre Website tatsächlich auf 6.8.6, 6.9.5 oder 7.0.2 gehoben wurde.
- Es kursieren mehrere Angriffsmuster mit unterschiedlichen Spuren. Eine einzelne Dateinamen-Liste reicht als Prüfung nicht aus.
- Bei Personendaten: Ein bestätigter Befall kann in der Schweiz eine Meldung an den EDÖB auslösen — nach Artikel 24 DSG «so rasch als möglich», ohne feste Stundenfrist.
Schritt 1: Waren Sie überhaupt angreifbar?
Die Angriffskette wp2shell verbindet zwei Schwachstellen im WordPress-Kern: eine Routen-Verwechslung in der REST-Batch-Schnittstelle (CVE-2026-63030) und eine SQL-Injection in WP_Query über den Parameter author__not_in (CVE-2026-60137). Die Batch-Schnittstelle kam erst mit WordPress 6.9 — deshalb ist der Zweig 6.8 von der Verwechslung nicht betroffen und erhielt mit 6.8.6 nur die Korrektur der SQL-Injection.
| WordPress-Zweig | Angreifbar | Sichere Version |
|---|---|---|
| 7.0.x | 7.0.0 – 7.0.1 | 7.0.2 |
| 6.9.x | 6.9.0 – 6.9.4 | 6.9.5 |
| 6.8.x | nur SQL-Injection | 6.8.6 |
| vor 6.8 | nicht betroffen | — |
Ihre laufende Version steht im Dashboard unter «Aktualisierungen» oder unter «Werkzeuge › Website-Zustand». Entscheidend ist aber nicht nur die heutige Version, sondern seit wann sie läuft. WordPress hat automatische Updates erzwungen, was viele Installationen innerhalb von Stunden geschützt hat. Wo automatische Updates deaktiviert waren, blieb das Fenster offen — teilweise über Tage.
Zur Einordnung der Dringlichkeit: Die beiden Schwachstellen werden unterschiedlich bewertet. Die US-Datenbank NVD führt für CVE-2026-63030 zwei Werte nebeneinander — 9.8 «kritisch» vom zuständigen Vergabeteam WPScan und 7.5 «hoch» von der CISA-Ergänzung. Der Unterschied liegt darin, ob die vollständige Kette oder nur die Routen-Verwechslung bewertet wird. Für die Praxis ist beides dasselbe: sofort aktualisieren.
Warum das Update allein nicht reicht
Das ist der Punkt, an dem die meisten Anleitungen aufhören — und an dem die eigentliche Arbeit beginnt. Ein Angreifer, der die Lücke vor dem Update genutzt hat, ist bereits drin gewesen. Nach der Analyse von Rapid7 verläuft die Eskalation typischerweise so: Über die verkettete SQL-Injection wird ein Administratorkonto angelegt; damit meldet sich der Angreifer regulär an und lädt ein präpariertes Plugin hoch, das ihm dauerhaften Zugriff verschafft.
Beides überlebt das Update. Das Konto bleibt bestehen, das Plugin bleibt liegen. Die Lücke ist geschlossen, die Tür steht weiterhin offen — nur benutzt der Angreifer sie jetzt über einen anderen Weg.
Woran Sie einen Befall erkennen
Hier ist eine Warnung angebracht, die in vielen Checklisten fehlt: Es kursiert nicht ein Angriffsmuster, sondern mehrere. Die öffentlich dokumentierten Spuren unterscheiden sich deutlich — wer nur nach einer bestimmten Datei sucht, übersieht die anderen Varianten. Die folgende Übersicht fasst zusammen, was bislang beschrieben wurde.
| Wo suchen | Beschriebene Spuren |
|---|---|
| Benutzerliste | Administratorkonten nach Mustern wie wpsvc_, wp2_ oder w2s_ mit angehängter Hex-Folge; E-Mail-Adressen auf fremden Domains |
/wp-content/plugins/ | Ordner nach dem Schema <name>-<6 Hex>/<name>-<6 Hex>.php; kleine Dateien um 1,3 KB mit vorgetäuschtem Autor «WordPress.org Community» |
/wp-content/mu-plugins/ | Dateien, die als Sicherheits-Patch getarnt sind — dokumentiert etwa galex_patch.php |
/wp-content/cache/ | PHP-Dateien mit zufälligen Namen im Cache-Verzeichnis, wo normalerweise keine liegen |
Beliebige PHP-Datei unter wp-content | Code, der $_GET['c'] an eine Ausführungsfunktion weiterreicht — das generische Muster hinter den getarnten Varianten |
| Datenbank | Beschrieben wurden manipulierte Einträge mit fixem Datum 2020-01-01 00:00:00 sowie Metadaten mit Verweisen auf fremde Domains |
| Server-Logfiles | Auffällige Zugriffe auf /wp-json/batch/v1 bzw. ?rest_route=/batch/v1 |
Ein guter Startpunkt ist das Logfile Ihres Webservers: Zugriffe auf die Batch-Schnittstelle sind bei einer normalen Unternehmenswebsite selten. Häufen sie sich im Zeitraum vor Ihrem Update, ist das ein deutliches Signal — und der Zeitstempel des ersten auffälligen Zugriffs sagt Ihnen, ab wann Sie in Dateien und Datenbank suchen müssen.
Für den ersten Durchgang gibt es ein quelloffenes Prüfwerkzeug von InstaWP, das gezielt nach den oben beschriebenen Konten und Webshell-Plugins sucht und standardmässig nur liest, ohne zu verändern. Es ersetzt keine gründliche Prüfung, beantwortet aber schnell die Frage, ob die bekannten Muster vorliegen.
Bereinigen oder neu aufsetzen? Die ehrliche Entscheidung
Diese Frage wird zu selten gestellt. Eine Bereinigung ist der Versuch, alles Fremde zu finden — und man weiss nie sicher, ob man alles gefunden hat. Eine Wiederherstellung aus einem nachweislich sauberen Stand ist der sichere Weg, kostet aber die Inhalte seit diesem Zeitpunkt. Die Entscheidung hängt an drei Faktoren:
| Ausgangslage | Empfehlung |
|---|---|
| Backup von vor dem 17. Juli vorhanden, wenige neue Inhalte seither | Wiederherstellen, danach direkt auf die sichere Version heben — der klarste Weg |
| Backup vorhanden, aber viele Inhalte seither entstanden | Wiederherstellen und Inhalte selektiv nachziehen — keine Dateien aus dem befallenen Stand übernehmen |
| Kein verlässliches Backup, klare Spuren gefunden | Bereinigen mit anschliessender unabhängiger Prüfung |
| Shop, Mitgliederbereich oder Personendaten betroffen | Fachliche Begleitung beiziehen — hier hängt mehr dran als die Website |
Wenn Sie diese Entscheidung nicht allein treffen möchten: Wir prüfen die Installation, ordnen den Befund ein und übernehmen Bereinigung und Härtung — siehe WordPress Security & Härtung. Eine unvollständig gesäuberte Website wird erfahrungsgemäss erneut übernommen.
Der Bereinigungsablauf
Die folgenden Schritte richten sich an technisch versierte Betreiber. Legen Sie vorher eine vollständige Sicherung von Dateien und Datenbank an — auch von der befallenen Website, denn sie ist Ihr einziger Beweis, falls später Fragen zum Vorfall auftauchen.
- Website offline nehmen. Wartungsmodus oder Sperre auf Serverebene — solange der Zugang offensteht, arbeiten Sie gegen einen aktiven Gegner.
- Fremde Administratorkonten entfernen. Benutzerliste nach Rolle sortieren und jedes Administratorkonto einzeln bestätigen. Im Zweifel Rolle entziehen statt löschen — löschen kann Inhalte mitnehmen.
- Dateisystem säubern. Über SSH oder FTP
wp-content/plugins/,mu-plugins/,uploads/undcache/nach PHP-Dateien durchsuchen, die Sie nicht selbst angelegt haben. Im Upload-Verzeichnis hat PHP grundsätzlich nichts zu suchen. - Kern aktualisieren. Auf 6.8.6, 6.9.5 oder 7.0.2 heben, sofern noch nicht geschehen. Danach Themes und Plugins.
- Alle Zugänge erneuern. Passwörter sämtlicher Administratoren, das Datenbank-Passwort (mit Nachtrag in
wp-config.php) und die Zugangsdaten des Hostings. - Sitzungen beenden. Neue Sicherheitsschlüssel aus dem offiziellen WordPress-Salt-Generator in die
wp-config.phpeintragen. Damit fliegt jede offene Sitzung heraus — auch die des Angreifers. - Geplante Aufgaben prüfen. Ein Blick auf die Cron-Einträge zeigt Aufgaben, die sich selbst wieder einrichten.
# PHP-Dateien im Upload-Verzeichnis — dort gehoert keine hin
find wp-content/uploads -name "*.php"
# Zuletzt geaenderte PHP-Dateien unter wp-content
find wp-content -name "*.php" -mtime -30 -printf "%T+ %p\n" | sort
# Geplante Aufgaben auflisten (WP-CLI)
wp cron event list
# Administratorkonten auflisten (WP-CLI)
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Die Spalte user_registered ist dabei der schnellste Filter: Ein Administratorkonto, das im Juli 2026 entstanden ist, ohne dass jemand es angelegt hat, beantwortet die Frage nach dem Befall bereits.
Zwei Massnahmen, die die Eskalation brechen
Unabhängig von wp2shell gibt es zwei Einstellungen, die den Weg vom Einbruch zur dauerhaften Übernahme deutlich erschweren. Beide kosten nichts und stören den Normalbetrieb nicht.
Erstens: Installationen und Datei-Änderungen im Backend abschalten. Wer über ein gekapertes Administratorkonto kein Plugin mehr hochladen kann, verliert den bequemsten Weg zur Webshell.
// In wp-config.php — verhindert Editor, Installation und Updates ueber das Backend:
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_MODS', true );
Beachten Sie: DISALLOW_FILE_MODS unterbindet auch reguläre Updates über das Backend. Das ist auf einer betreuten Installation mit Update-Prozess über die Kommandozeile sinnvoll — auf einer selbst gepflegten Website kann es dazu führen, dass Sicherheitsupdates liegen bleiben. Wählen Sie bewusst.
Zweitens: Dem Datenbank-Benutzer unnötige Rechte entziehen. WordPress braucht im Normalbetrieb kein FILE-Recht. Wo es gesetzt ist, kann eine SQL-Injection unter Umständen direkt Dateien auf die Platte schreiben.
-- Als Datenbank-Administrator, Benutzernamen anpassen:
REVOKE FILE ON *.* FROM 'wp_benutzer'@'localhost';
FLUSH PRIVILEGES;
Die weiteren Grundlagen — Zwei-Faktor-Anmeldung, kleine Angriffsfläche, Monitoring — fassen wir in den WordPress-Sicherheitsgrundlagen zusammen. Wie ein Backup aussieht, auf das man sich im Ernstfall wirklich verlassen kann, steht im Beitrag zu automatischen Backups.
Meldepflicht: was das Schweizer Datenschutzgesetz verlangt
Sobald auf der betroffenen Website Personendaten liegen — Kundenkonten, Bestellungen, Formulareingänge, Newsletter-Adressen — stellt sich neben der technischen auch eine rechtliche Frage. Artikel 24 des Schweizer Datenschutzgesetzes verlangt eine Meldung an den EDÖB, wenn eine Verletzung der Datensicherheit voraussichtlich zu einem hohen Risiko für die Persönlichkeit oder die Grundrechte der betroffenen Personen führt.
Drei Punkte werden dabei regelmässig verwechselt:
- Keine 72-Stunden-Frist. Anders als die europäische Datenschutz-Grundverordnung nennt das Schweizer Gesetz keine feste Stundenzahl, sondern verlangt die Meldung «so rasch als möglich».
- Nicht jeder Angriff ist meldepflichtig. Meldepflichtig sind eingetretene Verletzungen — ein abgewehrter oder erfolgloser Angriffsversuch fällt nicht darunter.
- Die Meldung hat einen Mindestinhalt: Art der Verletzung, deren Folgen sowie die ergriffenen oder vorgesehenen Massnahmen.
Der EDÖB stellt dazu einen eigenen Leitfaden und ein Meldeportal bereit. Ob im Einzelfall ein hohes Risiko vorliegt, ist eine juristische Beurteilung — bei sensiblen Daten oder grösseren Beständen lohnt sich fachlicher Rat, bevor entschieden wird. Dieser Abschnitt ordnet die Rechtslage ein und ersetzt keine Rechtsberatung.
Fazit
wp2shell hat gezeigt, wie schnell eine Standardinstallation ohne jedes Zutun des Betreibers angreifbar wird — und wie viel die erzwungenen automatischen Updates aufgefangen haben. Für die meisten Websites ist die Sache damit erledigt. Für die Minderheit, bei der das Update zu spät kam, beginnt die Arbeit erst: Ein Angreifer, der einmal ein Administratorkonto besass, verschwindet nicht durch eine neue Versionsnummer.
Die belastbarste Antwort auf diesen Vorfall ist unspektakulär: zeitnahe Updates, ein geprüftes Backup ausserhalb der Website und jemand, der hinschaut, wenn etwas auffällt. Genau diese Kombination ist der Unterschied zwischen einem ruhigen Nachmittag und einem Totalschaden — und der Kern einer betreuten WordPress-Website.
Die technische Einordnung der Lücke selbst haben wir im Beitrag zur wp2shell-Sicherheitslücke beschrieben.
Häufig gestellte Fragen zur Bereinigung nach wp2shell
Ich habe eine verdächtige PHP-Datei gefunden — was jetzt?
Löschen Sie sie nicht sofort. Sichern Sie zuerst eine Kopie der Datei samt Zeitstempel — sie zeigt Ihnen, wann der Angriff stattfand, und dieser Zeitpunkt bestimmt, wie weit Sie in Datenbank und Benutzerliste zurücksuchen müssen. Erst danach entfernen. Eine einzelne gefundene Datei bedeutet fast nie, dass es die einzige war.
Reicht es, WordPress zu aktualisieren?
Um die Lücke zu schliessen: ja. Um eine bereits übernommene Website zu retten: nein. Das Update entfernt weder ein angelegtes Administratorkonto noch ein hochgeladenes Plugin noch manipulierte Datenbankeinträge. Wenn Ihre Website im Zeitfenster vor dem Update angreifbar war, brauchen Sie zusätzlich eine Prüfung von Dateien, Benutzern und Datenbank.
Mein Hoster sagt, die Website sei automatisch aktualisiert worden. Bin ich sicher?
Wahrscheinlich, aber nicht bewiesen. Entscheidend ist der Zeitpunkt: Erfolgte das Update am 17. oder 18. Juli, ist das Zeitfenster sehr klein. Lag es später, sollten Sie zumindest die Administratorkonten und das Plugin-Verzeichnis prüfen. Die Server-Logfiles zeigen ausserdem, ob es überhaupt Zugriffe auf die Batch-Schnittstelle gab.
Muss ich den Vorfall in der Schweiz melden?
Nur wenn Personendaten betroffen sind und ein hohes Risiko für die betroffenen Personen wahrscheinlich ist. Dann verlangt Artikel 24 DSG eine Meldung an den EDÖB «so rasch als möglich» — ohne feste Frist und nur für tatsächlich eingetretene Verletzungen, nicht für abgewehrte Angriffe. Die Einschätzung des Risikos ist juristisch; bei sensiblen Daten sollten Sie sie nicht allein treffen.
Wie lange sollte ich nach der Bereinigung noch beobachten?
Mindestens einige Wochen. Angreifer hinterlassen häufig mehrere, voneinander unabhängige Zugänge; taucht einer davon wieder auf, war die Bereinigung unvollständig. Sinnvoll sind ein Dateiänderungs-Monitoring, eine Benachrichtigung bei neuen Administratorkonten und ein regelmässiger Blick in die Logfiles.
Quellen
- WordPress.org News — WordPress 7.0.2 (Sicherheits-Release) (17. Juli 2026)
- Rapid7 — CVE-2026-63030: wp2shell, a Critical Remote Code Execution Vulnerability in WordPress Core (2026)
- NVD — CVE-2026-63030 (Bewertungen von WPScan und CISA-ADP)
- The Hacker News — WordPress wp2shell Exploitation Grows as Public Exploit Fuels Mass Scanning (2026)
- InstaWP auf GitHub — wp2shell-scan: Detect & clean up wp2shell compromise (2026)
- EDÖB — Leitfaden betreffend die Meldung von Datensicherheitsverletzungen nach Art. 24 DSG
