En pocas palabras: CVE-2026-87902 es una falla de path traversal sin autenticación en get_page_template(), con CVSS 4.0 de 9.2, que afecta a WordPress desde la versión 4.7.0 (2016) hasta la 7.1.1. WordPress 7.1.2, lanzada el 22 de septiembre de 2026, la corrige.

WordPress 7.1.2, lanzada el 22 de septiembre de 2026, corrige CVE-2026-87902, una vulnerabilidad de path traversal sin autenticación con CVSS 4.0 de 9.2 que afecta todas las versiones del núcleo desde la 4.7.0 (diciembre de 2016) hasta la 7.1.1. Bajo ciertas condiciones de servidor, un atacante sin sesión iniciada puede llegar a ejecutar código remoto.

En 30 segundos

  • CVE-2026-87902 tiene CVSS 4.0 de 9.2, clasificado como CWE-98, y fue reportado por el investigador Robert Ressl.
  • Afecta a WordPress desde la versión 4.7.0 (2016) hasta la 7.1.1, prácticamente una década de lanzamientos.
  • WordPress publicó parches para cada rama activa, desde 7.1.2 hasta 4.7.37, según el análisis de Patchstack.
  • La falla vive en get_page_template(), dentro de wp-includes/template.php.
  • Se convierte en RCE solo si el tema activo tiene una carpeta que empieza con page- y el servidor tiene register_argc_argv activado.

La vulnerabilidad WordPress 9.2 (CVE-2026-87902) es una falla de path traversal no autenticada en el núcleo de WordPress, ubicada en la función get_page_template() del archivo wp-includes/template.php. Permite a un atacante sin cuenta incluir archivos PHP locales fuera del directorio del tema activo, y en servidores con determinada configuración, escalar a ejecución remota de código.

¿Qué es la vulnerabilidad CVE-2026-87902 y dónde vive en el código de WordPress?

CVE-2026-87902 es un path traversal que aparece cuando WordPress arma el nombre de archivo de plantilla a partir del parámetro pagename, sin validarlo antes de usarlo. Está en la función get_page_template(), y según el advisory oficial GHSA-7hp8-65ch-5whp, publicado por johnbillion el 22 de septiembre de 2026, se clasifica como CWE-98 (control impropio del nombre de archivo en un include).

Ponele que WordPress tiene que decidir qué plantilla mostrar para una página. Arma una lista de candidatos y uno de ellos sale directo del parámetro pagename de la URL. Ahí está el problema: hay una rama de código vecina que sí pasa ese valor por validate_file(), la función que WordPress usa desde hace años para bloquear el traversal, y la rama de pagename nunca lo hizo. Un descuido de tres líneas que quedó sin detectar durante casi una década de lanzamientos.

Lo que remata el bug es un detalle de codificación. El sanitizador de URLs de WordPress limpia los puntos literales pero deja pasar los puntos codificados en porcentaje, y después get_page_template() llama a urldecode(), que termina de decodificar la secuencia y la convierte en un ../ funcional. Con eso, el atacante sale del directorio del tema y apunta el include a cualquier archivo PHP legible del servidor. Sobre eso hablamos en tener backups listos ante un ataque de ransomware.

¿Qué versiones de WordPress están afectadas y desde cuándo?

Están afectadas todas las versiones desde la 4.7.0, lanzada en diciembre de 2016, hasta la 7.1.1, es decir prácticamente cada rama que WordPress todavía soporta con parches de seguridad. El CVSS 4.0 asignado es 9.2, con vector AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N, lo que en criollo significa: se explota por red, sin necesidad de privilegios ni interacción del usuario, y el impacto en confidencialidad, integridad y disponibilidad es alto.

¿Cuántos sitios quedan expuestos con ese rango de versiones? Según el análisis de byteiota, publicado el 22 de septiembre de 2026, un 88% de los sitios WordPress corre una versión más vieja que la última disponible. Con WordPress representando cerca del 43% de la web según la misma fuente, la superficie de ataque no es un detalle menor.

¿En qué condiciones el path traversal se convierte en ejecución remota de código (RCE)?

El path traversal por sí solo permite inclusión local de archivos (LFI), no ejecución de código a voluntad del atacante. Para llegar a RCE hacen falta dos condiciones dándose al mismo tiempo: que el tema activo tenga una carpeta de primer nivel que arranque con page- (como page-templates/, presente en temas legacy como Twenty Twelve y Twenty Fourteen, y en varios temas de terceros), y que el servidor tenga un pearcmd.php legible con register_argc_argv activado.

¿Y qué tan común es esa combinación? Más de lo que nos gustaría. register_argc_argv viene activado por defecto en la imagen oficial de PHP para Docker y en entornos cPanel con PHP menor a 8.5, según Patchstack. PHP 8.5 cambió ese valor por defecto a apagado, lo cual reduce el riesgo de RCE en instalaciones nuevas, pero el LFI sigue activo sin importar la versión de PHP. Te puede servir nuestra cobertura de activar la autenticación en dos pasos.

Subís el sitio, no revisás qué carpetas tiene el tema, no sabés si register_argc_argv está prendido, confiás en que el hosting se encarga de eso, y de repente resulta que tu configuración cumple las dos condiciones justo cuando alguien anda escaneando en busca de sitios vulnerables (spoiler: ya está pasando). Según Patchstack, en las primeras horas después del parche del 22 de septiembre detectaron sondeos de reconocimiento buscando la carpeta page-* en sitios sin actualizar, aunque todavía sin entrega completa de RCE en su telemetría.

¿Qué versiones corrigen la vulnerabilidad y cómo fue el backport?

WordPress corrigió la falla con dos cambios en 7.1.2: aplicó validate_file() a la rama de pagename que nunca lo tuvo, y sumó una función nueva, _wp_is_template_path_allowed(), que obliga a que cualquier plantilla resuelta caiga dentro del directorio del tema, del stylesheet o de theme-compat, sin importar qué código la produjo. Ese segundo cambio dice algo que el advisory no explicita del todo: el equipo de seguridad trató la resolución de plantillas como una categoría entera de problema, no como un bug aislado.

El backport llegó hasta la rama 4.7, algo inusual para el equipo de WordPress. La siguiente tabla resume las ramas principales con su versión parcheada, según el advisory GHSA-7hp8-65ch-5whp:

Rama afectadaVersión parcheada
7.1.0 – 7.1.17.1.2
7.0.0 – 7.0.57.0.6
6.9.0 – 6.9.86.9.9
6.8.0 – 6.8.96.8.10
6.7.0 – 6.7.86.7.9
6.6.0 – 6.6.86.6.9
6.5.0 – 6.5.116.5.12
4.7.0 – 4.7.364.7.37
vulnerabilidad wordpress 9.2 diagrama explicativo

¿Qué tenés que hacer ahora si administrás un sitio WordPress?

Actualizá el núcleo a la versión parcheada de tu rama desde el Escritorio, en Actualizaciones, o descargando el paquete correspondiente desde WordPress.org. Si tenés actualizaciones automáticas en segundo plano activadas, es probable que ya estés en la versión corregida, pero conviene verificarlo en vez de asumirlo. Para más detalles técnicos, mirá configurar cabeceras HTTP de seguridad.

Si no podés parchear en el momento, hay tres chequeos rápidos que dan una idea real de exposición:

  • Revisá la carpeta del tema activo. Si tiene un directorio de primer nivel que arranca con page-, la condición de RCE por tema está cumplida.
  • Chequeá register_argc_argv. Corré php -i | grep register_argc_argv en el servidor; si el resultado es «On», estás en la categoría de riesgo de RCE y conviene apagarlo en php.ini como medida temporal.
  • Buscá si pearcmd.php es accesible. En hosting gestionado y contenedores Docker, PEAR suele venir instalado por defecto, y su presencia completa la cadena de explotación.

Ninguno de estos tres pasos reemplaza al parche. El tema de fondo es que si administrás varios sitios WordPress, la ventana entre que sale un parche crítico y que alguien lo explota se achica cada vez más (acá fueron menos de 18 horas hasta las primeras sondas). Para reducir esa fricción, tiene sentido evaluar un hosting con parches de seguridad gestionados, como el que ofrece donweb.com, en vez de depender de que cada administrador se entere a tiempo.

Qué está confirmado y qué no

Confirmado: el CVE, el CVSS de 9.2, el rango de versiones afectadas (4.7.0 a 7.1.1), la fecha del parche (22 de septiembre de 2026) y el mecanismo técnico del bug, todo documentado en el advisory oficial de WordPress y confirmado por Patchstack. También está confirmado que hubo reconocimiento activo contra sitios vulnerables en las primeras horas tras la publicación del parche, según la telemetría de Patchstack.

No confirmado, al menos con los datos disponibles hoy: no hay reportes públicos de explotación exitosa con entrega de RCE, solo fingerprinting. Tampoco hay una cifra oficial de cuántos sitios en producción cumplen ambas condiciones (tema con carpeta page-* y register_argc_argv activado) al mismo tiempo. Tomá esa parte con pinzas hasta que aparezca un dato concreto. Esto se conecta con lo que analizamos en aplicar hardening con Patchstack.

Errores comunes al evaluar esta vulnerabilidad

  • Pensar que sin tema «page-*» estás a salvo del todo. El LFI sigue activo igual, aunque no llegues a RCE: un atacante puede leer archivos sensibles del servidor sin necesidad de ejecutar código.
  • Confiar en que las actualizaciones automáticas ya te cubrieron. No todos los sitios tienen ese ajuste activado, y muchos hostings compartidos lo desactivan por default para evitar romper plugins.
  • Descartar el riesgo porque «no tenés PEAR instalado» a propósito. En hosting gestionado y contenedores Docker, PEAR suele estar presente sin que nadie lo haya pedido explícitamente.
  • Actualizar solo el sitio principal y olvidarse de instalaciones secundarias. Subdominios de staging, sitios de prueba o instalaciones viejas que quedaron abandonadas corren la misma versión vulnerable si nadie las tocó.

Preguntas Frecuentes

¿Qué es la vulnerabilidad CVE-2026-87902 de WordPress?

Es una falla de path traversal sin autenticación en la función get_page_template() del núcleo de WordPress, con CVSS 4.0 de 9.2 y clasificada como CWE-98. Permite a un atacante sin cuenta incluir archivos PHP locales fuera del tema activo, y bajo ciertas condiciones, escalar a ejecución remota de código.

¿Qué versiones de WordPress están afectadas por la falla de 9.2?

Todas las versiones desde la 4.7.0, lanzada en diciembre de 2016, hasta la 7.1.1. WordPress publicó parches específicos para cada rama, desde 7.1.2 hasta 4.7.37, según el advisory oficial.

¿Es cierto que se puede ejecutar código remoto sin estar logueado?

El path traversal en sí no requiere login, pero la ejecución remota de código no es automática. Necesita dos condiciones extra: que el tema activo tenga una carpeta que empiece con page- y que el servidor tenga register_argc_argv activado junto a un pearcmd.php accesible.

¿Cómo actualizo WordPress para corregir esta vulnerabilidad?

Desde el Escritorio de WordPress, andá a Actualizaciones y aplicá la versión más reciente de tu rama, por ejemplo 7.1.2 si venías de 7.1.x. Si tu sitio tiene actualizaciones automáticas en segundo plano activadas, es probable que ya esté corregido, pero conviene verificarlo manualmente.

¿Mi tema de WordPress está en riesgo por esta falla?

Depende de si el tema activo tiene una carpeta de primer nivel que arranca con page-, como page-templates/, presente en temas legacy como Twenty Twelve y Twenty Fourteen y en varios temas de terceros. Si esa carpeta existe, el riesgo de escalar de LFI a RCE es real; si no existe, el sitio sigue expuesto al LFI pero no a esa vía específica de RCE.

Conclusión

CVE-2026-87902 no es una vulnerabilidad más del montón: afecta a cada versión de WordPress lanzada desde 2016, no exige credenciales y ya tiene reconocimiento activo en su contra a horas de conocerse el parche. Lo que decide si tu sitio pasa de «vulnerable en teoría» a «vulnerable en la práctica» son dos detalles puntuales de tu configuración, el tema activo y un ajuste de PHP, así que vale la pena chequearlos hoy en vez de esperar a la próxima ventana de mantenimiento. Actualizar a la versión parcheada de tu rama es el único paso que cierra el problema de raíz; todo lo demás son parches temporales mientras llegás a eso.

Fuentes