WordPress Plugin WP All Import <= 3.6.7 - Remote Code Execution (RCE) (Authentifiziert)
Datum: 05. November 2023
Exploit-Autor: Việt HÙng (https://github.com/phanthibichtram12)
Anbieter-Website: https://www.wpallimport.com/
Software-Link: https://wordpress.org/plugins/wp-all-import/advanced/ (nach unten scrollen und Version auswählen)
Version: <= 3.6.7 (getestet: 3.6.7)
Getestet auf: WordPress 6.1 (unabhängig vom Betriebssystem, da dieser Exploit KEINEN Payload bereitstellt)
CVE: CVE-2022-1565
BESCHREIBUNG DER SCHWACHSTELLE
Das Plugin WP All Import ist in Versionen bis einschließlich 3.6.7 anfällig für beliebige Datei-Uploads, da der Dateityp über die Datei wp_all_import_get_gz.php nicht ausreichend validiert wird.
Dies ermöglicht es authentifizierten Angreifern mit Administratorrechten oder höher, beliebige Dateien auf den Server der betroffenen Website hochzuladen, was zur Remote-Codeausführung führen kann.
WIE DER EXPLOIT FUNKTIONIERT
1. ZIP-Datei vorbereiten:
- Erstellen Sie eine PHP-Datei mit Ihrem Payload (z. B. Reverse Shell)
- Setzen Sie die Variable "payload_file_name" auf den Namen dieser Datei (z. B. "shell.php")
- Erstellen Sie eine ZIP-Datei mit dem Payload
- Setzen Sie die Variable "zip_file_to_upload" auf den Pfad dieser Datei (z. B. "/root/shell.zip")
2. Mit einem Administratorkonto anmelden:
- Setzen Sie die Variable "target_url" auf die Basis-URL des Ziels (NICHT mit einem Schrägstrich / beenden)
- Setzen Sie die Variable "admin_user" auf den Benutzernamen des Administratorkontos
- Setzen Sie die Variable "admin_pass" auf das Passwort des Administratorkontos
3. Die wpnonce mit der Methode get_wpnonce_upload_file() abrufen:
- Es gibt tatsächlich 2 Arten von wpnonce:
- Der erste wpnonce wird mit der Methode get_wpnonce_edit_settings() innerhalb der Klasse PluginSetting abgerufen.
Dieser wpnonce erlaubt es uns, die Plugin-Einstellungen zu ändern (siehe Schritt 4)
- Der zweite wpnonce wird mit der Methode get_wpnonce_upload_file() innerhalb der Klasse PluginSetting abgerufen.
Dieser wpnonce erlaubt es uns, Dateien hochzuladen
4. Prüfen, ob der Sicherheitsmodus des Plugins aktiviert ist, mithilfe der Methode check_if_secure_mode_is_enabled() innerhalb der Klasse PluginSetting
- Wenn der Sicherheitsmodus aktiviert ist, wird der ZIP-Inhalt in einem Verzeichnis mit zufälligem Namen abgelegt.
Der Exploit deaktiviert den Sicherheitsmodus.
Durch das Deaktivieren des Sicherheitsmodus wird der ZIP-Inhalt im Hauptverzeichnis abgelegt (siehe Variable payload_url).
Die Methode, die zum Aktivieren und Deaktivieren des Sicherheitsmodus aufgerufen wird, ist set_plugin_secure_mode(set_to_enabled:bool, wpnonce:str)
- Wenn der Sicherheitsmodus NICHT aktiviert ist, lädt der Exploit die Datei hoch, aktiviert den Sicherheitsmodus danach jedoch NICHT.
5. Datei mit der Methode upload_file(wpnonce_upload_file: str) hochladen:
- Nach dem Upload antwortet der Server mit HTTP 200 OK, aber das bedeutet nicht, dass der Upload erfolgreich abgeschlossen wurde.
Die Antwort enthält JSON, das wie folgt aussieht:
{"jsonrpc":2.0","error":{"code":102,"message": Bitte verifizieren Sie, dass die hochgeladene Datei eine gültige ZIP-Datei ist."},"is_valid":false,"id" :"Kennung"}
Wie Sie sehen, wird ein Fehler mit Code 102 gemeldet, aber nach meinen Tests wurde der Upload abgeschlossen
6. Den Sicherheitsmodus wieder aktivieren, falls er aktiviert war, mithilfe der Methode switch_back_to_secure_mode()
7. Den Payload mit der Methode activate_payload() aktivieren:
- Sie können die Methode zum Aktivieren des Payloads selbst festlegen.
Der Grund für diese Wahl ist, dass dieser Exploit KEINEN Payload bereitstellt.
Da Sie einen benutzerdefinierten Payload verwenden können, möchten Sie ihn möglicherweise per HTTP-POST-Anfrage statt per HTTP-GET-Anfrage aktivieren, oder Sie möchten Parameter übergeben
WARUM DEAKTIVIERT DER EXPLOIT DEN SICHERHEITSMODUS?
Laut dem PoC dieser Schwachstelle von WPSCAN können wir hochgeladene Dateien abrufen, indem wir die Seite "Verwaltete Importe" besuchen.
Ich weiß nicht warum, aber nach dem Hochladen einer beliebigen Datei konnte ich die hochgeladene Datei auf dieser Seite nicht sehen (vielleicht wird eine Pro-Version benötigt?).
Ich musste eine alternative Lösung finden, und das habe ich getan, indem ich diese Option ausgenutzt habe.
WPSCAN-Seite: https://wpscan.com/vulnerability/578093db-a025-4148-8c4b-ec2df31743f7
UPDATE vom 06. November 2022
Während meiner Tests stellte ich fest, dass ich eine ungültige XML-Datei hochlud und die Datei deshalb nicht auf der Seite "Verwaltete Importe" angezeigt wurde.
Wie auch immer, diese Methode zum Deaktivieren des Sicherheitsmodus ist etwas "unsichtbarer", da der Upload nicht auf der Verwaltungsseite angezeigt wird.
Wenn Sie den Upload auf der Verwaltungsseite sehen möchten, sind mehr Schritte erforderlich.
GIBT ES PROBLEME BEIM EXPLOIT?
Damit der Exploit effektiv funktioniert, beachten Sie bitte Folgendes:
- Überprüfen Sie die target_url und die Administrator-Anmeldedaten
- Überprüfen Sie den Pfad der ZIP-Datei und den Namen des Payloads (sie können unterschiedlich sein)
- Wenn Sie lokal testen, versuchen Sie, verify_ssl_certificate auf False zu setzen
- Sie können print_response(http_response) verwenden, um weitere Untersuchungen durchzuführen