
Informe detallado de pruebas de penetración que demuestra una vulnerabilidad de path traversal no autenticado (CVE-2019-11447) en el plugin Simple Backup de WordPress, incluyendo pasos de explotación, análisis de impacto y guía de remediación.
| Elemento | Detalles |
|---|---|
| Título del Documento | Informe de Prueba de Penetración - WordPress Path Traversal |
| Cliente/Examen | HackTheBox Lab - CPTS Exercise 1 |
| Fecha | 22 de agosto de 2026 |
| Evaluador | Fernando Viana (Penetration Tester) |
| Tipo de Evaluación | Gray Box (Externa, Sin Credenciales) |
| Entorno de Laboratorio | 154.57.164.73:30706 |
| Duración del Laboratorio | 1 Hora |
| Objetivos | Identificar y explotar vulnerabilidades para recuperar archivos restringidos |
| Flag Obtenida | HTB{my_f1r57_h4ck} |
Durante esta evaluación de penetración de la aplicación web alojada en 154.57.164.73:30706, se identificó una vulnerabilidad crítica que permite a atacantes no autenticados descargar y leer archivos arbitrarios del sistema de archivos del servidor.
La instalación vulnerable de WordPress contiene un plugin desactualizado (Simple Backup v2.7.10) con una vulnerabilidad de path traversal (CVE-2019-11447) que permite el acceso no autorizado a archivos sin requerir autenticación ni autorización.
Esta vulnerabilidad fue explotada con éxito para recuperar el archivo /flag.txt desde la raíz del servidor, confirmando el compromiso total de la confidencialidad. Un atacante con este acceso podría:
wp-config.php, .env)Se requiere una acción crítica para remediar esta vulnerabilidad de inmediato, ya que representa un riesgo extremo para la seguridad de los datos, el cumplimiento de privacidad (GDPR, HIPAA, PCI-DSS) y la integridad del sistema.
| Severidad | Cantidad | Impacto Empresarial |
|---|---|---|
| 🔴 CRÍTICA | 1 | Brecha total de confidencialidad; acceso no autorizado a archivos |
| 🟠 ALTA | 0 | — |
| 🟡 MEDIA | 0 | — |
| 🟢 BAJA | 0 | — |
| ℹ️ INFORMATIVA | 1 | Versiones de software desactualizadas detectadas |
Tipo de Evaluación: Gray Box (atacante externo, sin credenciales proporcionadas, acceso a red disponible)
Fechas de la Evaluación: 22 de agosto de 2026
Enfoque de Pruebas: Evaluación metódica y no evasiva siguiendo el marco estándar de la industria para pruebas de penetración (PTES):
CVE-2019-11447 | CWE-22: Limitación Incorrecta de un Nombre de Ruta a un Directorio Restringido
El plugin de WordPress Simple Backup (versión 2.7.10/2.7.11, Exploit-DB 39883) contiene una vulnerabilidad de path traversal en su página de administración "Backup Manager". El plugin no sanitiza la ruta de archivo proporcionada a través del parámetro GET download_backup_file, permitiendo a un atacante salir del directorio previsto simple-backup/ mediante secuencias de ruta relativa (../) y descargar cualquier archivo legible por el proceso del servidor web — incluyendo archivos en la raíz del sistema de archivos.
El endpoint vulnerable:
GET /wp-admin/tools.php?page=backup_manager&download_backup_file=../../../../../../../../../../flag.txt
page=backup_manager enruta la solicitud al controlador de la página de administración del plugin; download_backup_file es el parámetro que el código del plugin lee directamente y concatena en una ruta del sistema de archivos sin validación, lo que permite el recorrido de directorios.
7.5 - ALTA (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N)
Brecha de confidencialidad: ⚠️ CRÍTICO
Los atacantes pueden leer cualquier archivo accesible para el servidor web, incluidos:
| Archivo | Impacto | Nivel de riesgo |
|---|---|---|
/wp-config.php | Credenciales de base de datos, salts, claves | 🔴 CRÍTICO |
/.env | Claves de API, secretos, configuración | 🔴 CRÍTICO |
/etc/passwd | Enumeración de usuarios, mapeo del sistema | 🟠 ALTO |
Claves SSH (.ssh/id_rsa) | Movimiento lateral, acceso al sistema | 🔴 CRÍTICO |
/proc/self/environ | Secretos de la aplicación en ejecución | 🟠 ALTO |
| Directorio de cargas de usuarios | Archivos privados, medios | 🟠 ALTO |
Impacto normativo:
El aviso de Exploit-DB (39883.txt, leído mediante searchsploit -x — véase ht4-poc.png) documenta la primitiva delete del plugin desde simple-backup-manager.php:
if(array_key_exists('delete_backup_file', $_GET)){
$this->delete_local_backup_file($_GET['delete_backup_file']);
}
$bk_dir = ABSPATH."simple-backup/";
unlink($bk_dir . $filename);
$filename proviene directamente de $_GET['delete_backup_file'] sin ninguna comprobación de basename() ni de contención de ruta. Al pasar ../pizza.txt se resuelve $bk_dir . $filename como .../simple-backup/../pizza.txt → .../pizza.txt, escapando de la carpeta de backup prevista.
La primitiva de descarga realmente explotada en este engagement (download_backup_file) sigue exactamente el mismo patrón de concatenación sin sanitizar en el mismo plugin, pero devuelve el archivo al solicitante en lugar de eliminarlo — lo que permitió la recuperación de /flag.txt desde la raíz del sistema de archivos (10× ../ desde ABSPATH/simple-backup/).
El Problema:
basename() para eliminar componentes de directoriorealpath() permanezca dentro de ABSPATH."simple-backup/"current_user_can() / autenticación antes de servir el archivo — el handler se ejecuta al cargar el plugin, antes de la propia puerta de autenticación wp-admin de WordPress, por lo que es accesible sin estar autenticadoConexión directa al objetivo mediante el navegador (http://154.57.164.73:30706/). La instalación de WordPress se titula "GETTING STARTED", y una entrada pública del blog en la página de inicio revela el nombre y la versión exactos del plugin en texto plano: "Simple Backup Plugin 2.7.10 for WordPress" — no se requirió ni siquiera herramienta de enumeración para identificar el componente vulnerable.