
Technische Anleitung zu CVE-2021-29447, einer XXE-Schwachstelle in der WordPress-Mediathek, die authentifizierten Benutzern das Lesen sensibler Dateien durch bösartige WAVE-Uploads ermöglicht. Enthält Ausführungsschritte, Analyse des anfälligen Codes und Patch-Details.
Ein Benutzer mit der Möglichkeit, eine bösartige WAVE-Datei (z. B. ein Autor) hochzuladen, kann ein XML-Parsing-Problem in der Medienbibliothek von WordPress ausnutzen, was zu XXE-Angriffen und möglicherweise zur Offenlegung des Dateisystems führen kann.
XML External Entity (XXE) Schwachstellen
XML bietet die Möglichkeit, benutzerdefinierte Entitäten zu definieren, die im gesamten Dokument wiederverwendet werden können. Dies kann beispielsweise verwendet werden, um Duplikate zu vermeiden. Der folgende Code definiert eine Entität myEntity für die weitere Verwendung.

Der Wert definierter Entitäten kann auch aus einer externen Quelle stammen, auf die durch eine URI verwiesen wird. In diesem Fall werden sie als externe Entitäten bezeichnet:

XXE-Angriffe missbrauchen diese Funktion. Wenn ein Angreifer file:///var/www/wp-config.php als URI angeben würde, könnte er erfolgreich sensible Dateiinhalte preisgeben. Und die Angriffe sind möglich, wenn ein lax konfigurierter XML-Parser auf benutzergesteuerten Inhalten ausgeführt wird.
XXE in WordPress
WordPress verfügt über eine Medienbibliothek, die authentifizierten Benutzern das Hochladen von Mediendateien ermöglicht, die dann in ihren Blogbeiträgen verwendet werden können. Um Metainformationen aus diesen Mediendateien zu extrahieren, z. B. Künstlername oder Titel, verwendet WordPress die getID3-Bibliothek. Einige dieser Metadaten werden in XML-Form geparst. Hier wurde eine mögliche XXE-Schwachstelle gemeldet (Zeile 730).

Die Funktion libxml_disable_entity_loader(true) wurde als veraltet markiert, da PHP 8-Versionen Libxml2 v2.9+ verwenden, das das Abrufen externer Entitäten standardmäßig deaktiviert.
Erstellen Sie eine bösartige WAVE-Datei mit dem folgenden Befehl

Erstellen Sie eine DTD-Datei und fügen Sie diesen Code hinzu. Dadurch können Sie die wp-config.php abrufen, die sensible Daten wie Datenbank-Anmeldeinformationen enthält.

Starten Sie nun einen HTTP-Server

Laden Sie die bösartige .wav-Datei in die WordPress-Anwendung hoch. Nachdem Sie die .wav-Datei hochgeladen haben, sollten Sie die folgende Anfrage in Ihren HTTP-Serverprotokollen sehen. Hinweis: Verwenden Sie zur effektiven Exfiltration von Daten Zlib zum Dekodieren.

Danach erhalten Sie die Datenbank-Anmeldeinformationen. Melden Sie sich bei der Datenbank an und versuchen Sie, den Administrator zu finden

corp-001 ist der Administrator. Knacken Sie seinen Passwort-Hash und melden Sie sich dann als Administrator an

WordPress hat die Schwachstelle in Version 5.7.1 behoben, indem der Aufruf der Funktion libxml_disable_entity_loader() wieder eingeführt wurde, die in PHP 8 veraltet war. Um PHP-Deprecation-Warnungen zu vermeiden, wurde der PHP-Fehlerunterdrückungsoperator @ zum Aufruf hinzugefügt.

https://blog.wpsec.com/wordpress-xxe-in-media-library-cve-2021-29447/
https://nvd.nist.gov/vuln/detail/CVE-2021-29447
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-29447
https://github.com/motikan2010/CVE-2021-29447
https://www.youtube.com/watch?v=pkooNXGHl7c
https://www.youtube.com/watch?v=tE8Smz1Jvb8
https://www.mend.io/vulnerability-database/CVE-2021-29447