
CVE-2026-3844 — Subida arbitraria de archivos sin autenticación que deriva en RCE en Breeze Cache (WordPress). CVSS 9.8 CRÍTICO. Escáner masivo + inyector automático de shells con múltiples hilos.
╔════════════════════════════════════════════════════════════╗
║ CVE-2026-3844 ║
║ Breeze Cache <= 2.4.4 Arbitrary File Upload ║
║ Unauthenticated RCE | Authorized Lab Use Only ║
╚════════════════════════════════════════════════════════════╝
CVE-2026-3844 es una vulnerabilidad de subida arbitraria de archivos que afecta a las versiones vulnerables del plugin de WordPress Breeze Cache. Cuando el alojamiento local de Gravatar está habilitado, Breeze puede obtener URLs de avatares y almacenar el archivo descargado en un directorio de caché accesible desde la web sin validar suficientemente el tipo de archivo.
| Campo | Detalle |
|---|---|
| CVE | CVE-2026-3844 |
| Producto | Breeze Cache, WordPress Cache Plugin |
| Proveedor | Cloudways |
| Tipo de vulnerabilidad | Carga de archivos sin restricciones |
| CWE | CWE-434 |
| Severidad | Crítico, CVSS 9.8 |
| Autenticación | No requerida |
| Versiones afectadas | Breeze Cache <= 2.4.4 |
| Versión corregida | 2.4.5 o posterior |
| Ajuste requerido | Host Files Locally - Gravatars habilitado |
Attacker-controlled avatar URL
|
v
WordPress renders an avatar
|
v
Breeze Gravatar local-cache handler
|
v
download_url() fetches the remote file
|
v
File is saved under wp-content/cache/breeze-extra/gravatars/
|
v
Web-accessible uploaded file
El comportamiento vulnerable se encuentra en el flujo de caché de Gravatar de Breeze:
src del avatar es aceptada por el manejador Gravatar de Breeze.download_url() de WordPress.Área vulnerable relevante:
inc/class-breeze-cache-cronjobs.php
fetch_gravatar_from_remote()
Requisitos del objetivo:
<= 2.4.4.Host Files Locally - Gravatars está habilitado.Notas para laboratorio local:
git clone https://github.com/AnggaTechI/CVE-2026-3844.git
cd CVE-2026-3844
python3 --version
No se requieren paquetes Python de terceros. El script utiliza únicamente módulos de la biblioteca estándar de Python.
Ejecutar la herramienta:
python3 exploit.py
Ejemplo de objetivo único:
[*] Target URL or file: http://localhost/lab-wp
Ejemplo de lista de objetivos:
[*] Target URL or file: targets.txt
[*] Threads (default 30): 30
[*] Auto-inject on vulnerable? [y/N]: n
Ejemplo de salida:
[+] Loaded 1 target(s)
[+] Scanning 1 targets with 30 threads
[+] [1/1] localhost/lab-wp -> v2.4.4 gravatar=ON
[+] VULNERABLE: 1/1
[+] Saved: result.txt
El script comprueba si el objetivo parece ser WordPress, lee los metadatos del plugin Breeze y compara la versión detectada con el rango vulnerable.
El script intenta deducir si el alojamiento local de Gravatar está habilitado comprobando las referencias de caché breeze-extra/gravatars de Breeze.
Cuando la autoinyección está habilitada, el script intenta verificar la explotabilidad desplegando un payload de prueba generado y comprobando su marcador.
Para laboratorios locales, el script puede usar acceso directo al sistema de archivos cuando puede identificar la raíz de WordPress. Para pruebas remotas autorizadas, inicia un servidor de payload temporal e intenta desencadenar el flujo de caché de Gravatar de Breeze.
Dependiendo de la configuración de WordPress, los archivos en caché pueden aparecer en una de estas formas:
/wp-content/cache/breeze-extra/gravatars/<filename>
/wp-content/cache/breeze-extra/gravatars/1/<filename>
La primera ruta es habitual en instalaciones normales de WordPress de un solo sitio. La segunda puede aparecer cuando se incluye un ID de blog/sitio.
Utilice esta lista de verificación al probar en un laboratorio WordPress local:
2.4.4 está instalado.Host Files Locally - Gravatars está habilitado.wp-content/cache/breeze-extra/gravatars/.wp-content de WordPress.gravatar=OFF
El plugin puede estar activo, pero Breeze aún no ha generado archivos de caché locales de Gravatar. Visite una página que renderice avatares o llame a una ruta de WordPress que renderice avatares en el laboratorio.
not vulnerable
Las causas más comunes son versiones de Breeze parcheadas, Breeze no instalado, WordPress no detectado en la URL, o que la ruta del objetivo carezca de un subdirectorio como /lab-wp.
Injection failed
La configuración de Gravatar puede estar deshabilitada, el sitio puede no mostrar avatares públicamente, la ruta de caché puede no ser escribible, o la URL del payload remoto puede no ser accesible desde el servidor WordPress.
Este repositorio está destinado a fines educativos, reproducción en laboratorio local y pruebas de seguridad autorizadas. No lo ejecute contra sistemas que no le pertenezcan o para los que no tenga permiso explícito de prueba.