
Prueba de concepto y análisis técnico de CVE-2026-12227, un LFI no autenticado en el plugin Visual Composer de WordPress (<=45.16.0) que permite la inclusión de archivos y RCE.
CVE-2026-12227 es una vulnerabilidad crítica (CVSS 9.8) de Inclusión Local de Archivos (LFI) no autenticada en el plugin Visual Composer Website Builder para WordPress, que afecta a todas las versiones hasta la 45.16.0 inclusive. El fallo se encuentra en el parámetro vcv-template, que permite a un atacante incluir y ejecutar archivos arbitrarios en el servidor. Esto puede provocar la exposición de datos sensibles, la elusión de controles de acceso o incluso la Ejecución Remota de Código (RCE) completa si el entorno del servidor está mal configurado.
CVE-2026-12227
9.8/10
Plugin Visual Composer Website Builder (hasta la versión 45.16.0)
Causa raíz: La vulnerabilidad se clasifica como CWE-98: Control Inadecuado del Nombre de Archivo para Sentencias Include/Require en Programas PHP (a menudo denominada Inclusión Remota de Archivos PHP). Proviene de un fallo lógico en el archivo PageTemplatesController.php, específicamente dentro de la función viewPageTemplate(), que se engancha al filtro template_include de WordPress con prioridad 11 sin ninguna comprobación de autenticación.
El problema central es un fallo de "validar-luego-mutar":
Validación (sobre la entrada sin procesar): El código primero llama a la función validate_file() de WordPress sobre el valor sin procesar proporcionado por el usuario del parámetro vcv-template. Esta función está diseñada para rechazar rutas que contengan secuencias literales de salto de directorio como ... En esta etapa, la entrada maliciosa theme:.theme:./.theme:./.theme:./wp-links-opml.php no contiene ningún .. literal, por lo que pasa la validación.
Mutación (después de la validación): Inmediatamente después de la validación, el código comprueba si el tipo de plantilla es vc-custom-layout y si el valor contiene la cadena theme:. Si es así, realiza str_replace('theme:', '', $current['value']), lo que elimina todas las apariciones de theme: del valor.
Sink: El valor mutado se pasa entonces a locate_template(), que resuelve la ruta e incluye el archivo. Debido a que las cadenas theme: fueron eliminadas, las secuencias de salto de directorio fragmentadas se fusionan, creando una ruta válida como ../../../../wp-links-opml.php que nunca fue validada en su forma final.
Superficie de Ataque: Vector de Ataque: Red (AV:N) — la vulnerabilidad es alcanzable directamente a través de HTTP/HTTPS.
Autenticación: No requerida (PR:N) — es una vulnerabilidad no autenticada. Cualquier atacante remoto puede desencadenarla sin una cuenta válida.
Interacción del Usuario: No requerida (UI:N).
Componente Afectado: El plugin Visual Composer Website Builder para WordPress.
Parámetro Vulnerable: El parámetro vcv-template, utilizado junto con el parámetro vcv-template-type.
Condición de Activación: El plugin debe estar instalado y activo en un sitio de WordPress, y una página de front-end debe estar construida con Visual Composer (es decir, debe existir un enlace permanente normal).
Notas de Explotación: Impacto: El fallo permite a un atacante no autenticado incluir y ejecutar archivos locales arbitrarios en el servidor. Debido a que los archivos PHP incluidos se ejecutan, esto puede llevar a la Ejecución Remota de Código (RCE), permitiendo un compromiso total de la confidencialidad, integridad y disponibilidad del servidor.
Técnica de Explotación: Los atacantes pueden explotar esto creando un valor vcv-template malicioso que utilice el prefijo theme: para eludir la validación, como se describe en la causa raíz. Por ejemplo, una solicitud podría verse así: POST /?vcv-template-type=vc-custom-layout&vcv-template=theme:.theme:./.theme:./.theme:./wp-links-opml.php.
Escalada a RCE: Aunque el LFI en sí mismo es crítico, lograr RCE a menudo depende del entorno del servidor. Un método común es incluir un archivo que ya haya sido subido al servidor (por ejemplo, un archivo de imagen aparentemente inofensivo que contenga código PHP incrustado) o aprovechar otras malas configuraciones del servidor.
Disponibilidad de PoC: Múltiples exploits de prueba de concepto están disponibles públicamente, incluyendo un script de Python y una plantilla de Nuclei, que pueden usarse para validación en un entorno de laboratorio autorizado
[*] Código Python Proporcionado Arriba
Versión de parche: 45.16.1