La brecha de ejecución en la actualización de WordPress: Cómo CVE-2026-119977 compromete servidores durante el parche

El proceso de actualización del núcleo en WordPress desempaqueta archivos usando código heredado. Analizamos el vector de ataque durante la instalación del parche y el bloqueo de wp-content/upgrade.

Fecha de publicación: 2026.11.09

Puntuación de severidad CVSS
8.1 / 10

Clasificación asignada por Wordfence ante explotación activa

Ventana de exposición en laboratorio
2–5 segundos

Tiempo de vida del instalador temporal durante el desempaquetado

Tiempo transcurrido hasta ataques act…
9 minutos

Registrado por cortafuegos perimetrales tras publicarse el parche

Conclusión Clave ·Aplicar la actualización sin restringir el acceso HTTP a wp-content/upgrade mantiene abierta una ventana crítica de ejecución remota de código en paquetes…

El parche oficial publicado para neutralizar la vulnerabilidad crítica en el núcleo de WordPress presenta una paradoja operativa grave: el propio mecanismo de despliegue ejecuta la descompresión mediante el código previo sin parchear. Este desfase de ejecución deja expuesto el directorio temporal de instalación ante solicitudes web externas durante los segundos exactos en que los archivos se descomprimen en disco.

La Agencia de Ciberseguridad y Seguridad de Infraestructura de Estados Unidos (CISA) incorporó la vulnerabilidad CVE-2026-119977 a su catálogo de vulnerabilidades explotadas conocidas (KEV). La superficie de ataque afecta a despliegues desde la versión 4.7 hasta la 7.1.3, abarcando casi dos décadas de deuda técnica heredada desde la arquitectura de actualización introducida en 2008.

La condición de carrera en el descompresor heredado

El proceso de actualización central de WordPress descarga un archivo comprimido y lo extrae dentro de la ruta wp-content/upgrade. Cuando la actualización requiere un paquete completo, dicho archivo contiene el instalador funcional del CMS (wp-admin/install.php). El problema radica en que el servidor web suele tener permisos para servir peticiones HTTP directas contra ese subdirectorio.

En todas las instalaciones que operan con versiones 5.9 o superiores, el código heredado asigna al directorio temporal un nombre derivado directamente del archivo descargado. Al carecer de entropía en la nomenclatura, un atacante externo puede predecir con exactitud la ruta antes de que finalice el proceso de copia.

Mecánica de explotación durante la ventana de actualización

Secuencia temporal del fallo de descompresión en wp-content/upgrade

01 · Paso 01
1. Descarga del paquete

El actualizador baja el zip completo y crea la carpeta predecible con código viejo

02 · Paso 02
2. Exposición del instalador

Los archivos temporales quedan accesibles vía web durante 2 a 5 segundos

03 · Paso 03
3. Inyección y ejecución

El atacante vincula una base de datos externa y ejecuta código con permisos del servidor web

El parche incorporado en la versión 7.1.4 y en las ramas de soporte extendido soluciona el problema asignando cadenas aleatorias al directorio de trabajo e impidiendo que un archivo wp-config.php temporal sobrescriba el archivo de producción. Sin embargo, en el instante exacto en que se aplica esta corrección, la rutina que descomprime los ficheros sigue siendo la versión vulnerable instalada previamente en el servidor.

Si un atacante envía ráfagas continuas de peticiones HTTP dirigidas a la ruta calculada durante esa ventana de descompresión, puede completar el asistente de configuración conectando una base de datos bajo su control. Una vez autenticado en la instancia temporal, el atacante obtiene ejecución de comandos PHP con los privilegios del proceso del servidor web (www-data o equivalente), permitiéndole alterar archivos en la raíz del sitio en producción antes de que WordPress elimine la carpeta transitoria.

Vector de ataque CVE-2026-119977 y contramedida inmediata

Aislamiento de la carpeta de actualización frente al acceso web no autenticado

01 · Superficie expuesta
Directorio wp-content/upgrade accesible

El servidor web entrega archivos PHP desde carpetas de trabajo temporales sin filtrar tráfico externo.

02 · Causa raíz
Ejecución mediante código anterior

El actualizador desempaqueta el código nuevo usando las funciones no parcheadas de la versión previa.

03 · Mitigación técnica
Bloqueo a nivel de capa web

Denegar respuestas HTTP 200 en la ruta de actualización mediante reglas en Nginx, Apache o CDN.

Comparativa de exposición por tipo de paquete y método de actualización

No todas las actualizaciones representan el mismo nivel de exposición. La criticidad depende de si el repositorio entrega un paquete parcial (diferencial) o un paquete completo, y de cómo interactúa el servidor web con el sistema de archivos local.

Vector de despliegueTipo de paquete entregadoPresencia del instaladorNivel de predictibilidadRiesgo durante la actualización
Salto entre ramas (ej. 7.0.7 a 7.1.4)Paquete completoSí (wp-admin/install.php)Alta (nombre basado en archivo)Crítico (ventana abierta para RCE)
Actualización en la misma rama (7.1.3 a 7.1.4)Paquete parcialVariable (solo si hubo cambios en instalador)Alta (versiones 5.9+)Bajo a nulo (salvo desajuste de sumas de verificación)
Instalaciones antiguas (4.4 a 5.8)Paquete completoSíMedia (cadena pseudoaleatoria)Medio (requiere fuga previa de rutas)
Gestión vía WP-CLI (wp core update)Paquete completo o diferencialSíIdéntica a interfaz webCrítico (reutiliza la misma lógica del actualizador)
Despliegue manual desacoplado fuera de webrootExtracción externaNo aplica al servidor webNinguna (fuera de alcance HTTP)Neutro (riesgo mitigado al 100%)

Un sitio configurado para recibir actualizaciones parciales puede degradar de forma imprevista hacia un paquete completo si los archivos del núcleo no coinciden de manera exacta con las sumas de verificación oficiales de WordPress.org, o si la tarea se interpreta como una reinstalación. En ese momento, el instalador se desempaqueta en el disco local y queda expuesto si el servidor web no cuenta con reglas de restricción específicas.

Las herramientas de automatización como WP-CLI no eliminan este vector de ataque. El comando wp core update invoca las mismas clases subyacentes del núcleo y procesa el paquete a través del mismo subdirectorio temporal dentro de wp-content.

Métricas de telemetría y comportamiento del tráfico malicioso

Las firmas de ataque comenzaron a registrarse en cortafuegos perimetrales solo nueve minutos después de desplegarse las primeras reglas de protección tras la liberación del parche. La persistencia de las solicitudes indica un escaneo automatizado diseñado para aprovechar la ventana de segundos que tarda un administrador o un cron en actualizar el sistema.

Dispersión temporal entre detección de escaneo y ventana de ejecución

Comparativa entre la persistencia del ataque y el tiempo útil de explotación en disco

Ventana de exposición en servidor Persistencia del sondeo de atacantes
Tiempo de actividad observado Ventana de exposición en servidor 2–5 s vs Persistencia del sondeo de atacantes 14,5 h (Sondeo masivo continuo)
2–5 s
14,5 h

El análisis de tráfico muestra nodos atacantes sondeando grupos definidos de dominios de forma ininterrumpida durante periodos de hasta 14,5 horas. El objetivo de este patrón de tráfico es sincronizar una petición POST maliciosa con el instante exacto en que la descompresión del paquete sitúa el archivo install.php en disco.

A pesar de que el aviso de seguridad de WordPress catalogó el problema con un impacto bajo basándose en la brevedad de la ventana de ejecución, los equipos de respuesta a incidentes y Wordfence determinaron una severidad CVSS de 8.1. La automatización del escaneo masivo convierte una ventana teórica de milisegundos en una oportunidad viable de compromiso de infraestructura.

Protocolo de blindaje y desacoplamiento para despliegues empresariales

La mitigación no debe depender exclusivamente de la ejecución del parche automatizado. Para neutralizar el riesgo durante la transición hacia la versión 7.1.4 o ramas equivalentes protegidas, los equipos de infraestructura deben aislar el entorno antes de activar cualquier comando de actualización.

Ruta de mitigación para la actualización del núcleo
¿El servidor web puede bloquear el acceso HTTP a rutas internas?
Configuración de Nginx / Apache / CDN editable
Bloqueo perimetral de wp-content/upgrade

Retorna HTTP 403 Forbidden a cualquier cliente web externo mientras WordPress opera en disco local.

→ Solución recomendada para entornos de producción estándar
Entornos cerrados o sin acceso a capa web
Despliegue manual fuera del directorio raíz

Descarga y descompresión en /tmp, sobreescritura de binarios y migración de base de datos sin tocar wp-config.php.

→ Obligatorio en infraestructuras críticas y despliegues desacoplados

1. Bloqueo de acceso HTTP al directorio de actualización

WordPress gestiona los archivos de wp-content/upgrade directamente desde el sistema de archivos del sistema operativo mediante llamadas POSIX. El servidor web jamás requiere exponer ni despachar contenido estático o dinámico desde esa carpeta hacia la red pública.

En servidores Nginx, se debe insertar una directiva explícita de denegación dentro del bloque principal de configuración del sitio:

location ^~ /wp-content/upgrade/ {
    deny all;
    return 403;
}

Para servidores Apache, la restricción debe configurarse mediante directivas a nivel de host virtual o dentro del archivo .htaccess raíz:

<DirectoryMatch "^.*/wp-content/upgrade/.*">
    Require all denied
</DirectoryMatch>

Esta única regla neutraliza por completo la posibilidad de que un agente externo solicite la ejecución de install.php, sin interferir con las tareas de actualización en segundo plano ni requerir el reinicio de los procesos PHP-FPM.

2. Procedimiento de actualización manual fuera de la raíz web

En infraestructuras donde no sea viable modificar la configuración del servidor web antes del mantenimiento, la actualización debe realizarse de forma desacoplada fuera del árbol de directorios que atiende peticiones públicas:

  • Generar una copia de respaldo completa de la base de datos MySQL/MariaDB y del directorio raíz.
  • Descargar el paquete oficial de WordPress 7.1.4 en un directorio transitorio aislado (por ejemplo, /opt/staging/ o /tmp/).
  • Descomprimir el paquete en dicha ubicación externa, eliminando previamente la carpeta wp-content del paquete descargado para no sobreescribir temas ni extensiones.
  • Sincronizar los archivos del núcleo hacia el directorio de producción mediante herramientas de transferencia de archivos locales (rsync), excluyendo expresamente wp-config.php.
  • Ejecutar la migración del esquema de base de datos a través de la línea de comandos o accediendo a wp-admin/upgrade.php.

Las instalaciones que operen en versiones 4.6 o anteriores carecen de parches oficiales por encontrarse fuera del ciclo de mantenimiento. En estos casos, la actualización manual y la reestructuración completa de los permisos del servidor web resultan imperativas para evitar compromisos persistentes en la infraestructura.

Informes de Referencia Relacionados

Ver categoría completa →
Boletín Semanal

Resumen Semanal de Tecnología y Datos de Negocio

Análisis de software verificado, consideraciones clave y métricas de comercio cada semana.

Cancela tu suscripción en 1 clic cuando quieras. Cero spam.

* Es posible que recibamos una comisión de afiliado por los enlaces en este informe, sin coste adicional para usted ni impacto en nuestros datos.