
WordPress-Login-XSS nach PHP-Code-Ausführungskette gepatcht
WordPress 7.0.3 patcht CVE-2026-64638, eine Pre-Auth-Login-XSS, die pwn.ai zu PHP-Code-Ausführung verkettete; ältere Branches benötigen ein Upgrade.
Eine WordPress-Login-XSS-Schwachstelle, die ohne Konto, Passwort oder Berechtigung ausgelöst werden kann, wurde in WordPress 7.0.3 behoben, nachdem Forscher von pwn.ai gezeigt haben, dass der Fehler zu PHP-Code-Ausführung auf dem Server verkettet werden kann. Die Schwachstelle wird als CVE-2026-64638 geführt und hat einen CVSS-Score von 8.9, was sie in den hohen Schweregradbereich einordnet. Der Patch wurde am 6. August veröffentlicht und bis zum 4.7-Zweig des Content-Management-Systems zurückportiert, sodass der Fix auch Websites erreicht, die so alte Versionen wie diesen Zweig ausführen. Versionen älter als 4.7 bleiben betroffen, fallen aber außerhalb des aktuellen Backport-Bereichs des Projekts.
Cross-Site-Scripting, meist zu XSS abgekürzt, bedeutet, dass der JavaScript-Code eines Angreifers im Browser einer anderen Person ausgeführt wird, während diese eine Website besucht. Es wird als reflektiert bezeichnet, wenn die bösartige Eingabe in einer Anfrage gesendet und dann in die Seite zurückgespiegelt wird, die das Opfer lädt. Hier liegt der Fehler auf dem WordPress-Login-Bildschirm und laut pwn.ai, die ihn entdeckt und technische Details mit The Hacker News geteilt haben, ist keine Authentifizierung erforderlich. Ein präparierter Benutzername, der an die Login-Seite gesendet wird, landet auf der Fehlerseite für fehlgeschlagene Anmeldungen, und das resultierende JavaScript wird im Browser des Besuchers ausgeführt. Diese Seite erfordert keine weitere Interaktion des Opfers: Sie zu besuchen reicht aus.
Diese Skript-Injektion in Code umzuwandeln, der auf dem Server läuft, ist ein viel längerer Weg. Er erfordert ein Opfer, das bereits als Administrator angemeldet ist und mit einer Seite interagiert, die der Angreifer kontrolliert. In der Demonstration von pwn.ai war diese Interaktion ein gewöhnlicher Klick, genau die Art von Schritt, für die Social Engineering entwickelt wurde. Die Forscher sagten zu The Hacker News, der Angriff funktioniere gegen Standard-WordPress-Installationen und erfordere keine ungewöhnlichen Hosting- oder Deployment-Einstellungen, und sie hätten mehrere Wege von der XSS zur Code-Ausführung, darunter Varianten, die ein Plugin installieren oder ein beliebiges ZIP-Archiv hochladen.
WordPress' eigene Sicherheitsmitteilung vertritt eine vorsichtigere Einschätzung der Ausnutzbarkeit. Sie merkt an, dass die Eskalation zur Remote-Code-Ausführung, also die Fähigkeit, Befehle auf dem Server auszuführen, Bedingungen außerhalb der Kontrolle des Angreifers beinhaltet und erfolgreiches Social Engineering sowie ausdrückliche Interaktion des Opfers erfordert. Die beiden Positionen widersprechen sich nicht. Die Skript-Injektion selbst verlangt nichts vom Ziel, während der Sprung zur Code-Ausführung davon abhängt, dass ein angemeldeter Administrator zu einem Klick verleitet wird.
pwn.ai führt den Fehler auf die Art und Weise zurück, wie WordPress den Benutzernamen aus einem fehlgeschlagenen Anmeldeversuch verarbeitet. Der Wert durchläuft sanitize_user() und wp_strip_all_tags(), wobei letzteres auf PHPs strip_tags()-Funktion angewiesen ist. Eine tag-ähnliche Zeichenkette mit Leerzeichen nach der öffnenden spitzen Klammer kann diesen Parser überleben und als gewöhnlicher Text behandelt werden. Später übergibt WordPress denselben Wert an wp_kses_post(), eine Funktion, die Inhalte gegen eine Liste erlaubter HTML-Elemente filtert, und dieser separate Parser liest die identische Eingabe als erlaubtes HTML. Die beiden Parser sind sich über dieselben Zeichen uneinig, und das Ergebnis sind vom Angreifer kontrollierte lebende DOM-Elemente auf der Fehlerseite für fehlgeschlagene Anmeldungen. DOM-Elemente sind die Bausteine, aus denen ein Browser eine Seite zusammensetzt, sodass der Angreifer effektiv eigene Bausteine in die Seite eingefügt hat, die WordPress anzeigt.
Diese Elemente interagieren dann mit WordPress' eigener user-profile.js, einem Skript zur Profilverwaltung, das auch auf der Login-Seite geladen wird, weil diese Seite Passwort-Zurücksetzungen behandelt. Einige der Profil-Elemente, die das Skript erwartet, fehlen dort. Zwei fehlende Eingaben ergeben beide undefined, was einen Gleichheitscheck bestehen lässt, und die ansonsten undefinierte Variable ajaxurl, die Adresse, die das Skript zur Kommunikation mit der Website verwendet, kann mit einem injizierten DOM-Element überschrieben werden. Der Effekt ist, WordPress' eigenes JavaScript auf eine Same-Origin-REST-Anfrage zu lenken, die der Angreifer ausgewählt hat, wobei Same-Origin bedeutet, dass die Anfrage von der Website selbst zu kommen scheint. Die Forscher nutzen WordPress' REST-JSONP-Unterstützung, um diese Anfrage in JavaScript umzuwandeln, das im Origin der Website ausgeführt wird. Für Deployments, bei denen anonyme REST-Anfragen HTTP 401 zurückgeben, den Code für nicht autorisiert, kann der Parameter _envelope=1 die Ablehnung in eine äußere HTTP-200-Antwort einwickeln, wodurch jQuery, die beteiligte JavaScript-Bibliothek, sie weiter als Skript verarbeiten kann. Die Forscher fanden in ihren Tests außerdem heraus, dass eine nonce-basierte Content Security Policy mit strict-dynamic den von ihnen demonstrierten Pfad nicht blockierte. Eine Content Security Policy ist eine Liste von Regeln, die eine Website an den Browser sendet und angibt, welche Skripte ausgeführt werden dürfen, und ein Nonce ist ein Einmalcode, der ein Skript als vertrauenswürdig kennzeichnet.
Ein von pwn.ai demonstrierter Pfad nutzt die XSS im WordPress-Origin, um das native Application-Password-Genehmigungssteuerelement innerhalb einer angemeldeten Administrator-Sitzung aufzurufen. Application Passwords sind widerrufbare Anmeldeinformationen für den API-Zugriff, sodass dieser Weg nicht erfordert, dass das Hauptpasswort des Administrators gestohlen wird. WordPress erstellt dann eine API-Anmeldeinformation und leitet sie an eine vom Angreifer ausgewählte HTTPS-success_url weiter. Die Forscher nutzten diese Anmeldeinformation für authentifizierten REST-Zugriff, um eine WordPress-Seite mit Same-Origin-JavaScript zu veröffentlichen. Als die beibehaltene Administrator-Sitzung diese Seite öffnete, erhielt ihr Skript das Plugin-Upload-Nonce von WordPress und lud ein vom Angreifer bereitgestelltes ZIP-Archiv hoch. PHP konnte dann direkt aus dem extrahierten Plugin angefordert werden, und das Plugin musste nicht aktiviert werden. Diese Stufe baut auf Paulos Yibelos Same Origin Method Execution-Forschung von 2022 auf, einer Technik, die eine erlaubte JSONP-Eigenschaftskette nutzt, um eine Methode in einem anderen Browserfenster aufzurufen.
Die Forscher nennen die Angriffskette XSS2Shell. Sie sagen, ihr autonomes System habe die Schwachstellenkette entdeckt und reproduziert, nachdem ihm Yibelos SOME-Forschung von 2022 als Ausgangspunkt gegeben wurde, die Arbeit habe fast vier Tage mit Open-Source-Modellen und einem Multi-Agenten-Workflow gedauert, und die Kette sei am 26. Juli reproduziert und am folgenden Tag an WordPress gemeldet worden. Es ist wichtig, wo jedes Glied bewiesen wurde. Die an The Hacker News gelieferten Produktionsnachweise enden bei der XSS. Die Forscher reproduzierten die cookielose Login-Seiten-XSS separat gegen zwei WordPress-7.0.2-Deployments in frischen Chrome-Profilen ohne WordPress-Cookies oder Anmeldeinformationen. Sie versuchten auf diesen Systemen keine Application-Password-Erstellung, keinen Datei-Upload, keine Persistenz und keine PHP-Ausführung. Die vollständige PHP-Ausführungskette wurde separat auf einer sauberen lokalen WordPress-7.0.2-Installation demonstriert. WordPress würdigte das Team von pwn.ai für die Entdeckung und verantwortungsvolle Offenlegung der Schwachstelle, und Stand 7. August berichtet die Sicherheitsmitteilung des Projekts nicht von Ausnutzung in freier Wildbahn.
Was würde eine erfolgreiche PHP-Ausführung in der Praxis bedeuten? Sie würde die in wp-config.php gespeicherten WordPress-Datenbank-Anmeldeinformationen offenlegen, das Anlegen persistenter Administrator-Konten und die Änderung von Inhalten ermöglichen, Dateien und Geheimnisse offenlegen, die für den PHP-Worker lesbar sind, und Betriebssystembefehle mit den Privilegien dieses Workers erlauben. Die Forscher sagen, bekannte WordPress-Härtungsmaßnahmen sollten nicht als vollständige Absicherung gegen die zugrunde liegende XSS betrachtet werden, und dass die Anwendung des Sicherheitsupdates erforderlich ist. WordPress empfiehlt, sofort zu aktualisieren, und Websites, die automatische Hintergrund-Updates unterstützen, sollten das Sicherheitsrelease von selbst erhalten. Besitzer von Websites mit Versionen älter als 4.7 müssen auf ein unterstütztes Release umsteigen, anstatt zu warten, da kein Backport für sie geplant ist. Die Versionsnummer im WordPress-Dashboard zu prüfen und von dort aus jedes verfügbare Update anzuwenden, ist der praktische erste Schritt.
Für Leser, die WordPress-Releases lieber nicht selbst verfolgen möchten, ist AEU Hosting (albhosting.eu) ein Managed-WordPress-Hosting-Dienst, was bedeutet, dass Core-Updates und Website-Sicherheit als Teil des Setups behandelt werden, und die Seite für jeden Plan legt genau fest, was enthalten ist.
So schützen Sie sich
- Öffnen Sie Ihr WordPress-Dashboard und prüfen Sie die Versionsnummer oben; wenn sie nicht 7.0.3 oder neuer ist, installieren Sie sofort das verfügbare Update.
- Wenn Ihre Website eine Version älter als 4.7 ausführt, wird der Fix Sie nicht erreichen, also bitten Sie Ihren Hosting-Anbieter, die Website auf eine unterstützte Version zu migrieren.
- Melden Sie sich aus Ihrem WordPress-Adminbereich ab, wenn Sie mit der Arbeit fertig sind, denn der gefährliche Teil dieses Angriffs erfordert eine offene Administrator-Sitzung.
- Klicken Sie nicht auf Links in unerwarteten E-Mails oder Nachrichten, während Sie in Ihrer Website angemeldet sind, da der Angriff davon abhängt, dass ein Administrator eine Seite öffnet, die er nicht kontrolliert.
- Überprüfen Sie die Benutzerliste in Ihrem Dashboard und entfernen Sie Administrator-Konten, die Sie nicht erkennen, und prüfen Sie Anwendungspasswörter unter Ihrem Profil und widerrufen Sie alle, die Sie nicht erstellt haben.
- Aktivieren Sie automatische Updates oder bitten Sie Ihren Host, Sicherheitsreleases für Sie anzuwenden, damit ein Fix wie dieser ankommt, ohne dass Sie darauf achten müssen.
Schwachstellen & Lösungen
- CVE-2026-64638 The pre-authentication reflected XSS in the WordPress login screen, patched on August 6 in WordPress 7.0.3 with the fix backported through the 4.7 branch. Lösung & Details ansehen →
Begriffe Erklärt
- XSS (cross-site scripting) Eine Art von Angriff, bei dem fremder Code in Ihrem Browser ausgeführt wird, während Sie eine Website besuchen.
- PHP Die Programmiersprache, in der WordPress geschrieben ist und die auf dem Webserver läuft, um die Seiten zu erstellen, die Besucher sehen.
- Administrator Das WordPress-Konto mit der höchsten Kontrolle über eine Website, das Einstellungen ändern, Software installieren und andere Benutzer verwalten kann.
- remote code execution Wenn ein Angreifer es schafft, eigene Befehle auf einem Server auszuführen, statt nur in einem Browser.
- Content Security Policy Eine Reihe von Regeln, die eine Website an Ihren Browser sendet und ihm mitteilt, welche Skripte auf der Seite ausgeführt werden dürfen.
- nonce Ein Einmalcode, der beweist, dass eine Anfrage wirklich von der Website selbst und nicht von woanders kommt.
- JSONP Eine ältere Webtechnik, die es einer Website ermöglicht, Informationen von einem anderen Ort abzurufen, indem sie sie als Skript lädt.