WordPress plugin LFI
El núcleo de WordPress suele estar razonablemente parcheado, pero su superficie real está en los plugins: código de terceros de calidad muy desigual. Una clase de fallo recurrente es la Local File Inclusion, cuando un plugin construye una ruta de fichero a partir de un parámetro de la petición sin sanearlo. El flujo de ataque es enumerar la versión del plugin y buscar el CVE correspondiente.
wpscan --url http://<ip>/ --enumerate ap # enumerar plugins y versiones
searchsploit '<plugin> <version>' # buscar el exploit/CVEEl caso de manual es Site-Editor 1.1.1 (CVE-2018-7422): el parámetro ajax_path del endpoint ajax_shortcode_pattern.php se incluye sin validar, así que apunta a cualquier fichero del disco:
curl "http://<ip>/wp-content/plugins/site-editor/editor/extensions/pagebuilder/includes/ajax_shortcode_pattern.php?ajax_path=/etc/passwd"Una LFI no se queda en leer /etc/passwd. Sirve para filtrar credenciales de ficheros de configuración (wp-config.php, redis.conf, claves SSH, tokens) y, según el contexto, puede escalar a RCE: incluir un fichero que el atacante controle (un PHP subido o escrito por otra vía) hace que lo interprete el servidor web, ejecutándolo con la identidad de ese servicio.
Matiz. No toda inclusión es traversal puro: a veces el parámetro se concatena con un prefijo o sufijo y hay que sortearlo (wrappers php://, null byte en versiones antiguas, secuencias ../). Y la LFI da lectura/inclusión, no RCE por sí sola: la ejecución requiere incluir contenido controlado.
Cómo detectarlo. La firma en el log de acceso es una petición a un endpoint de plugin con un parámetro de ruta que lleva ../ o una ruta absoluta (ajax_path=/etc/passwd), y las peticiones de wpscan (User-Agent característico, enumeración rápida de /wp-content/plugins/*/readme.txt) que suelen precederla. Un WAF con reglas de traversal lo marca. Si escala a RCE, el proceso web (www-data) incluye un .php no legítimo y lanza sh/bash (auditd/Sysmon for Linux). La lectura repetida de wp-config.php desde un endpoint de plugin es el indicio de exfiltración de credenciales.
Defensa. Mantener plugins actualizados y reducir los instalados al mínimo, validar y normalizar toda ruta derivada de la entrada del usuario (lista blanca, no concatenación) y no servir ficheros sensibles desde el webroot. Relacionado con la LFI / path traversal genérica, el RCE por subida de ficheros y la reutilización de credenciales.
Máquinas donde se aplica
- BackdoorHackTheBox
- ReadysProving Grounds Practice
- Symfonos 1 & 2VulnHub