
Exploit und Analyse von CVE-2023-3460, einer kritischen Privilegieneskalation im Ultimate Member WordPress-Plugin, mit Reproduktionsumgebung und Anleitung zur Schadensbegrenzung.
| CVE ID | CVSS-Score | Entdeckt | Betroffenes Plugin | Schwachstellentyp |
|---|---|---|---|---|
| CVE-2023-3460 | 07/04/2023 | Ultimate Member | Unautorisierter Admin-Zugriff |
Diese Studie konzentriert sich auf die CVE¹-2023-3460, eine kritische Schwachstelle, die das Plugin "Ultimate Member" von WordPress betrifft und eine nicht autorisierte Privilegienausweitung ermöglicht. Dieses Plugin ist weit verbreitet und wird für die Verwaltung von Profilen auf WordPress-Websites eingesetzt. Diese Schwachstelle stellt ein erhebliches Risiko dar, da sie es einem Angreifer ermöglicht, Administratorrechte und damit die vollständige Kontrolle über die Website zu erlangen. Aus diesem Grund wurde dieser Fehler vom NIST² auf der CVSS-Skala als kritisch eingestuft und mit 9.1 bewertet.
Die CVE-2023-3460 nutzt einen Fehler in der Verwaltung von Rollen und Berechtigungen durch das Plugin aus. In WordPress wird die Funktion WP_Capabilities³ verwendet, um die Rollen und Berechtigungen der Benutzer zu verwalten. Diese Funktion ermöglicht es Administratoren, spezifische Fähigkeiten für jede Benutzerrolle festzulegen. Eine fehlerhafte Verwendung dieser Funktion kann jedoch zu Schwachstellen bei der Privilegienausweitung führen.
Im Fall von Ultimate Member ermöglicht die Schwachstelle einem Angreifer, die Überprüfung der WP-Fähigkeiten zu umgehen und Administratorzugriff auf die Website zu erhalten. Das Plugin funktioniert, indem es eine vordefinierte Liste von Benutzermetadaten-Schlüsseln verwendet, die von Benutzern nicht manipuliert werden sollten. Dieser Sicherheitsansatz, der auf Blocklisten basiert, ist jedoch oft unzureichend, da er Umgehungsmöglichkeiten offenlässt.
WordPress verwaltet die Rollen und Berechtigungen der Benutzer über eine Struktur namens wp_capabilities. Diese Struktur ist eine serialisierte Darstellung der verschiedenen Rollen und Berechtigungen, die Benutzern gewährt werden. Beispielsweise hat ein Administrator einen anderen Satz von Fähigkeiten als ein Redakteur oder Autor. Diese Fähigkeiten werden in der WordPress-Datenbank als serialisierte Arrays in der Tabelle wp_usermeta gespeichert.
Der Fehler CVE-2023-3460 hat seinen Ursprung in der Implementierung der Rollen- und Berechtigungsverwaltung durch Ultimate Member. Das Plugin arbeitet mit einer vordefinierten Liste von Benutzermetadaten-Schlüsseln, die Benutzer nicht manipulieren sollten. Diese Liste wird verwendet, um zu überprüfen, ob Benutzer versuchen, diese Schlüssel bei der Kontoerstellung zu speichern. Dieser Ansatz ist ein häufiges Sicherheits-Anti-Pattern, bei dem das Blockieren bekannter schädlicher Eingaben (Blocklisten) intuitiv erscheinen mag, sich aber als komplexer als erwartet erweist und oft Raum für Sicherheitsumgehungen lässt.
Hier verwendet Ultimate Member eine unzureichende Überprüfung der bei der Benutzerregistrierung übermittelten Metadaten. Das Plugin verwendet eine Funktion namens is_metakey_banned, um zu überprüfen, ob die vom Benutzer übermittelten Metadaten zulässig sind. Diese Funktion prüft, ob die übermittelten Metadaten in der Liste der gesperrten Metadaten enthalten sind. Ist dies der Fall, gibt die Funktion true zurück und die Benutzerregistrierung wird blockiert. Andernfalls gibt die Funktion false zurück und die Benutzerregistrierung wird zugelassen.
WordPress akzeptiert jedoch bestimmte akzentuierte Zeichen als Standardzeichen. Wenn ein Benutzer Metadaten mit akzentuierten Zeichen übermittelt, erkennt die Funktion is_metakey_banned diese nicht und die Benutzerregistrierung wird zugelassen.
Das Plugin Ultimate Member wird in verschiedenen Umgebungen eingesetzt, von kleinen persönlichen Blogs bis hin zu großen E-Commerce-Websites. Es können keine spezifischen Annahmen über die IT-Sicherheitskenntnisse der Endbenutzer oder Website-Administratoren getroffen werden.
Die Server, die WordPress-Websites hosten, befinden sich in der Regel in sicheren Rechenzentren. Bei persönlichen Websites hängt die physische Sicherheit von der individuellen Umgebung des Benutzers ab.
Es wird angenommen, dass das Plugin Ultimate Member gemäß den offiziellen Anweisungen installiert und korrekt konfiguriert ist. Es wird angenommen, dass die WordPress-Website auf dem neuesten Stand gehalten wird und grundlegende Sicherheitsmaßnahmen vorhanden sind.
7.5 Die Sicherheitsfunktionen
Als Administrator gibt es konkrete Maßnahmen, die ergriffen werden können, um die mit dieser Schwachstelle verbundenen Risiken zu mindern.
Validierung von Benutzereingaben: Serverseitige Validierungen implementieren, um alle Benutzereingaben zu überprüfen, insbesondere solche, die Metadaten wie wp_capabilities ändern. Verwenden Sie reguläre Ausdrücke oder Whitelists anstelle von Blocklisten, um Eingaben zu kontrollieren.
CAPTCHA und Ratenbegrenzung: Integrieren Sie CAPTCHAs und Ratenbegrenzungen in Registrierungsformularen, um automatisierte Angriffe zu verhindern. Clientseitige Überprüfungen: Obwohl clientseitige Validierungen allein nicht ausreichen, können sie helfen, automatisierte Angriffe zu verhindern und die Benutzererfahrung zu verbessern.
Log-Überwachung: Ein System zur Überwachung von Protokollen einrichten, um verdächtige Änderungen an Benutzerrollen oder Versuche der Metadaten-Injektion zu erkennen. Dies kann mit Log-Analyse-Tools erfolgen.
Web Application Firewall (WAF): Konfigurieren Sie eine WAF⁴, um bekannte und unbekannte Angriffe zu blockieren, einschließlich Angriffen durch Einschleusung von Schadcode. Intrusion Detection/Prevention Systems (IDS/IPS)⁵: Implementieren Sie ein IDS/IPS, um Versuche zur Ausnutzung der Schwachstelle zu erkennen.
Überprüfung der Benutzerrollen: Überprüfen Sie regelmäßig die den Benutzern zugewiesenen Rollen, um abnormale Privilegienausweitungen zu erkennen. Einschränkung von Berechtigungen: Begrenzen Sie die standardmäßig an neue Benutzer vergebenen Berechtigungen und verlangen Sie eine administrative Validierung für die Zuweisung hoher Rollen, gemäß dem Prinzip der geringsten Privilegien. Details zu diesem Prinzip finden Sie hier.
Schnelle Anwendung von Updates: Regelmäßige Sicherheitsupdates für Plugins und WordPress selbst durchführen.
Schulen Sie Entwickler in den zuvor genannten bewährten Sicherheitspraktiken und sensibilisieren Sie sie für die Risiken/Auswirkungen einer fehlerhaften Implementierung.
Ein Makefile ist verfügbar, um Ihnen beim Starten der Ausnutzung des Fehlers zu helfen. Sie können es wie folgt verwenden:
make up, um WordPress mit allen notwendigen Installationen zu starten. Nach einer Wartezeit wird ein WordPress-Server gestartet, konfiguriert und die Version 2.6.5 des Plugins Ultimate Member installiert.
Sie können sich dann auf der Seite Login mit den Anmeldedaten admin:password bei WordPress anmelden. Wenn Sie auf die Registerkarte Users gehen, sehen Sie,
dass nur der Benutzer admin vorhanden ist.

Hinweis: Wenn Sie docker-compose und nicht docker compose haben, können Sie das Makefile entsprechend ändern (Variable DOCKER_COMPOSE= docker-compose).
Anschließend können Sie die Ausnutzung des Fehlers starten:
make exploit
Sie können sich dann auf Login mit den vom Exploit angegebenen Anmeldedaten bei WordPress anmelden und auf der Registerkarte Users beobachten, dass ein neuer Benutzer mit der Rolle Administrator erstellt wurde.

make down, um den WordPress-Server zu stoppen und die Daten zu löschen.
make exploit startet das Skript exploit.py. Dieses Skript arbeitet in mehreren Schritten:
Technische Details des Exploits1. Überprüfung der Schwachstelle: Vor der Ausnutzung prüft das Skript, ob die auf der Zielwebsite installierte Version des Plugins Ultimate Member verwundbar ist, d. h. niedriger als Version 2.6.7.
2. Abrufen des Sicherheits-Nonce: Das Skript ruft ein Sicherheits-Nonce³ von der Registrierungsseite der Zielwebsite ab. Dieses Nonce ist erforderlich, damit die Registrierungsanfrage von WordPress akzeptiert wird. Das Nonce wird durch Analyse des HTML-Codes der Registrierungsseite abgerufen.
3. Ausnutzung der Schwachstelle: Das Skript sendet dann eine POST-Anfrage an die Registrierungsseite, einschließlich eines manipulierten Parameters (wp_càpabilities[administrator]=1). Dieser Parameter verwendet ein akzentuiertes Zeichen (à), um die Sicherheitskontrollen des Plugins zu umgehen und die Daten falsch zu serialisieren, wodurch dem neu erstellten Benutzer die Administratorrolle zugewiesen wird.
4. Bestätigung des Exploits: Nach dem Senden der Anfrage prüft das Skript, ob der Vorgang erfolgreich war, indem es die Antwort des Servers analysiert.
| Bedrohungen | B1 (Vertraulichkeit der Benutzerdaten) | B2 (Integrität der Website) | B3 (Integrität des Plugins Ultimate Member) |
|---|
| M1 Unautorisierter Zugriff | X | X | X |
| M2 Einschleusung von Schadcode | X | X | |
| M3 Datenleck | X | ||
| M4 Rufschädigung | X |
| Name | Link |
|---|
| NIST CVE-2023-3460 | https://nvd.nist.gov/vuln/detail/CVE-2023-3460 |
| Ultimate Member Github | https://github.com/ultimatemember/ultimatemember |
| Version des für die Ausnutzung verwendeten Pakets 2.6.5 | https://wordpress.org/plugins/ultimate-member/advanced/ |
| Patch des Exploits | https://github.com/ultimatemember/ultimatemember/commit/fae47c6065ce07e9a8b44501002fa5b4f16d2456 |
| Review des Exploits | https://thesecmaster.com/how-to-fix-cve-2023-3460-a-privilege-escalation-vulnerability-in-ultimate-member-wordpress-plugin/ |
| OWASP Top 10 Application Security Risks | https://owasp.org/www-project-top-ten/ |