0
0

Email

Ventas Soporte

Dirección

CABA - Azopardo 770

Piso 9 - Oficina 10

Lunes a viernes de 9 a 18 hs
Atendido por personas reales
Alerta CISA KEV WordPress · CVE-2026-119977 (CVSS 8.1) · RCE TOCTOU

Cómo auditar y mitigar CVE-2026-119977 en WordPress (RCE sin autenticación en wp-content/upgrade) con un Prompt de IA, ModSecurity, Nginx o .htaccess

La vulnerabilidad de alta severidad CVE-2026-119977 (CVSS 8.1, CWE-367) afecta a WordPress Core desde la versión 4.7.0 hasta la 7.1.3 y fue incorporada al catálogo de vulnerabilidades activamente explotadas (CISA KEV). Permite que un atacante remoto sin autenticación logre Ejecución Remota de Código (RCE) explotando una condición de carrera Time-of-Check Time-of-Use (TOCTOU) sobre los archivos temporales de extracción en /wp-content/upgrade/. En esta guía explicamos cómo funciona el ataque, cómo proteger un sitio individual con .htaccess y cómo auditar y blindar todas las instalaciones de WordPress de tu Cloud VPS en segundos mediante un Prompt listo para copiar en Antigravity CLI (agy), MIA, Claude Code o Cursor.

Lectura: 8 min CVE-2026-119977 · CISA KEV (Explotación Activa) Mitigación WAF + Parche WordPress 7.1.4
¿Tu sitio WordPress está alojado en el Web Hosting NVMe o en una Cloud VPS Administrada de MESI? Ya estás 100% protegido automáticamente: nuestro WAF central (ModSecurity) bloquea con Tolerancia Cero cualquier petición HTTP externa dirigida hacia /wp-content/upgrade/ antes de que llegue a PHP, incluso si todavía no actualizaste tu WordPress a la versión 7.1.4. Esta guía está pensada para quienes administran sus propios servidores (Cloud VPS Autoadministradas con acceso SSH) o desean reforzar su .htaccess.

1 Qué es CVE-2026-119977 y cómo funciona la condición de carrera TOCTOU en wp-content/upgrade

Cada vez que WordPress ejecuta una actualización completa del núcleo (Core Upgrade, ya sea manual desde el escritorio o mediante actualizaciones automáticas en segundo plano), realiza el proceso de desempaquetado dentro del directorio público wp-content/upgrade/.

Anatomía del ataque paso a paso (CWE-367)

  1. Extracción en un directorio web predecible: Al descargar el paquete oficial de actualización, WordPress descomprime el árbol completo (incluyendo scripts de instalación y configuración de base de datos de wp-admin/) dentro de una subcarpeta predecible bajo /wp-content/upgrade/.
  2. La ventana de condición de carrera (TOCTOU): Entre el instante en que los archivos PHP del paquete se extraen en el disco y el instante en que WordPress verifica, copia los archivos al directorio raíz y elimina la carpeta temporal, existe una ventana de tiempo (Time-of-Check to Time-of-Use) en la que esos scripts quedan expuestos directamente por HTTP sin el contexto completo de bloqueo de wp-config.php.
  3. El riesgo agravado por actualizaciones interrumpidas: Si una actualización anterior falló por falta de espacio en disco, timeout de PHP o corte de permisos, la subcarpeta descomprimida suele quedar huérfana de forma permanente dentro de /wp-content/upgrade/, convirtiendo una ventana de pocos segundos en una puerta abierta las 24 horas.
  4. Explotación remota sin autenticación: Botnets automatizadas escanean masivamente rutas dentro de /wp-content/upgrade/ buscando alcanzar los instaladores en tránsito para inyectar una configuración maliciosa o ejecutar código PHP arbitrario (RCE) con los permisos del usuario web.
Por qué bloquear /wp-content/upgrade/ por HTTP es 100% seguro: WordPress utiliza /wp-content/upgrade/ únicamente a nivel de sistema de archivos local desde PHP (con funciones como unzip_file() y copy_dir()). Ningún navegador web, visitante, API ni administrador legítimo necesita jamás solicitar una URL bajo https://tudominio.com/wp-content/upgrade/.... Denegar el acceso HTTP público a esa carpeta corta el vector de raíz sin interferir en absoluto con la actualización de plugins, temas o del propio WordPress.

Versiones de WordPress afectadas y ramas oficiales parcheadas

Rama de WordPress Core Versiones Vulnerables Versión Mínima Parcheada
WordPress 7.1 (Actual) 7.1.0 a 7.1.3 >= 7.1.4
WordPress 7.0 7.0.0 a 7.0.7 >= 7.0.8
WordPress 6.9 6.9.0 a 6.9.10 >= 6.9.11
WordPress 6.8 6.8.0 a 6.8.11 >= 6.8.12
WordPress 6.7 6.7.0 a 6.7.10 >= 6.7.11
Ramas históricas (4.7 – 6.6) Versiones sin el último release menor >= 4.7.39 (último parche menor de cada rama)

2 Prompt Maestro de IA para auditar, limpiar y blindar todos los WordPress en tu Cloud VPS Autoadministrada

Si tenés una Cloud VPS Autoadministrada con acceso SSH root y usás un agente de IA en terminal —como Antigravity CLI (agy), MIA 24/7 con Gemini, Claude Code o Cursor—, copiá y pegale este prompt para que audite tus logs, elimine carpetas temporales huérfanas, bloquee /wp-content/upgrade/ a nivel servidor web y actualice tus sitios:

Prompt Maestro listo para copiar — Auditoría y Mitigación de CVE-2026-119977
Necesitamos auditar y mitigar **CVE-2026-119977** (CVSS 8.1, CISA KEV, RCE sin autenticación por condición de carrera TOCTOU en `/wp-content/upgrade/` de WordPress Core 4.7.0 a 7.1.3):

1. **Paso 1 (Auditoría de instancias, carpetas huérfanas y logs):**
   - Localizar todas las instalaciones de WordPress del servidor (`wp-includes/version.php`) y listar su ruta y versión actual (`$wp_version`).
   - Revisar si existen subdirectorios o archivos huérfanos dentro de `wp-content/upgrade/` en cada sitio y limpiarlos (dejando la carpeta `wp-content/upgrade/` vacía con sus permisos originales).
   - Buscar en los logs de acceso de Apache/Nginx (`/var/log/apache2/`, `/var/log/httpd/`, `/var/log/nginx/`) si hubo peticiones HTTP dirigidas a `wp-content/upgrade` y reportar cualquier IP sospechosa.
2. **Paso 2 (Bloqueo HTTP en caliente de `/wp-content/upgrade/`):**
   - En cada WordPress, crear o reforzar `wp-content/upgrade/.htaccess` (o la regla equivalente) para denegar todo acceso HTTP directo (`Require all denied` / `Deny from all`) y deshabilitar la ejecución de PHP en ese directorio.
   - A nivel global del servidor web (Apache / ModSecurity o Nginx), agregar una regla que devuelva `403 Forbidden` ante cualquier URI que coincida con `(?i)/wp-content/upgrade(?:/|$)`, validar la sintaxis (`apachectl configtest` o `nginx -t`) y recargar el servicio en caliente sin cortar conexiones (`graceful` / `reload`).
3. **Paso 3 (Actualización de seguridad de WordPress Core):**
   - Actualizar cada instalación vulnerable a su versión parcheada (`>= 7.1.4`, `>= 7.0.8`, `>= 6.9.11`, `>= 6.8.12`, `>= 6.7.11`) usando `wp core update --minor` (respetando el usuario propietario de cada sitio para no alterar permisos) y mostrar el resumen final de versiones y respuesta HTTP `403` al probar `/wp-content/upgrade/`.

¿Cómo ejecutarlo en 1 sola línea por SSH con Antigravity CLI (agy)?

Ejecución directa en consola SSH como root con agy SSH root
agy --dangerously-skip-permissions -p 'Necesitamos auditar y mitigar CVE-2026-119977 (CVSS 8.1, RCE TOCTOU en /wp-content/upgrade/ de WordPress Core 4.7 a 7.1.3). 1) Localizar todos los WordPress (wp-includes/version.php), reportar su versión, limpiar subcarpetas huérfanas dentro de wp-content/upgrade/ y auditar los logs web buscando peticiones a wp-content/upgrade. 2) Bloquear el acceso HTTP directo a /wp-content/upgrade/ (403 Forbidden) tanto globalmente en Apache/ModSecurity o Nginx como en wp-content/upgrade/.htaccess, verificando configtest antes de hacer reload. 3) Actualizar el core con wp core update --minor respetando el usuario propietario de cada sitio y verificar el estado final.'

3 Reglas manuales listas para copiar en .htaccess, Apache / ModSecurity y Nginx

Opción A: Proteger un sitio WordPress individual mediante .htaccess (FTP o Administrador de Archivos)

Si querés agregar una capa adicional en tu propio sitio WordPress sin usar SSH, podés incluir este bloque al principio del archivo .htaccess en la raíz de tu web (/www/.htaccess o public_html/.htaccess):

Bloqueo de /wp-content/upgrade/ en el .htaccess raíz Apache .htaccess
# Mitigación CVE-2026-119977: Bloquear todo acceso HTTP a /wp-content/upgrade/
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^wp-content/upgrade(/|$) - [F,L,NC]
</IfModule>

Opción B: Regla global de Tolerancia Cero en Apache + ModSecurity (WAF)

Si administrás un servidor Apache con ModSecurity para múltiples sitios, esta regla en Fase 1 bloquea en el acto con 403 Forbidden cualquier petición hacia /wp-content/upgrade/ (incluso si el atacante intenta evadirla con codificación URL o barras repetidas //):

Regla ModSecurity Fase 1 contra CVE-2026-119977 modsecurity.conf
# Mitigación CVE-2026-119977: Bloqueo de acceso HTTP a /wp-content/upgrade/
SecRule REQUEST_URI|REQUEST_FILENAME "@rx (?:/|^)wp-content/upgrade(?:/|$)" \
    "id:10018,phase:1,deny,status:403,log,t:none,t:urlDecodeUni,t:normalizePath,t:lowercase,\
     msg:'Ataque mitigado: Intento de exploit WordPress Core Upgrade TOCTOU CVE-2026-119977'"

Opción C: Bloqueo en servidores con Nginx

Si tu Cloud VPS corre Nginx (como servidor principal o proxy inverso), agregá esta directiva dentro de tu bloque server {} y ejecutá nginx -t && systemctl reload nginx:

Bloqueo de /wp-content/upgrade/ en Nginx nginx.conf / sites-enabled
# Mitigación CVE-2026-119977 en Nginx
location ~* /wp-content/upgrade(/|$) {
    deny all;
    return 403;
}

Alojá tu WordPress en infraestructura ya blindada o sumá a MIA 24/7 en tu servidor

En MESI nuestros planes de Web Hosting NVMe ya cuentan con mitigación WAF activa contra CVE-2026-119977, y con MIA siempre online con Google Gemini tenés tu propio ingeniero de seguridad 24/7 auditando y parcheando tus VPS:

Hosting Profesional NVMe (WordPress Blindado)

WAF ModSecurity con protección activa contra CVE-2026-119977, doble autenticación en /wp-admin, PHP 8.4 FPM aislado y backups diarios en .snapshots.

$10.900 ARS/mes + IVA

MIA (IA + Cloud VPS 24/7)

Tu agente con Gemini siempre online en su propio Cloud VPS: auditoría de CVEs, parches automáticos, monitoreo 24/7 y desarrollo a pedido.

$43.230 ARS/mes + IVA

Cloud VPS 2

2 vCPU, 2 GB RAM, 30 GB SSD Enterprise RAID10 e IP dedicada. Disponible en modalidad autoadministrada (con acceso SSH root) o administrada.

$22.000 ARS/mes + IVA

Cloud VPS 4

4 vCPU, 4 GB RAM y 60 GB SSD Enterprise RAID10. Ideal para múltiples tiendas WooCommerce, agencias y agentes de IA por consola.

$43.230 ARS/mes + IVA

Preguntas frecuentes sobre CVE-2026-119977 en WordPress

¿Bloquear /wp-content/upgrade/ en .htaccess o ModSecurity rompe las actualizaciones automáticas de WordPress o de plugins como Elementor y WooCommerce?

No. Cuando WordPress actualiza el núcleo, un plugin o un tema, el proceso ocurre internamente en el servidor mediante funciones de sistema de archivos de PHP (unzip_file y WP_Filesystem), sin realizar peticiones HTTP externas hacia /wp-content/upgrade/. Por lo tanto, devolver 403 Forbidden a las peticiones HTTP entrantes hacia esa ruta es completamente transparente para el funcionamiento de WordPress.

¿Qué hago si dentro de mi carpeta wp-content/upgrade/ veo carpetas viejas como wordpress-6.x-temp?

Si no hay ninguna actualización corriendo en este instante, cualquier subcarpeta dentro de wp-content/upgrade/ es el residuo huérfano de una actualización anterior que se interrumpió. Debés eliminar esas subcarpetas internas dejando el directorio wp-content/upgrade/ vacío, ya que dejar archivos de instalación descomprimidos allí es el escenario más peligroso frente a CVE-2026-119977.

¿Los sitios alojados en el Web Hosting de MESI ya están protegidos aunque tengan una versión anterior de WordPress?

Sí. En nuestra plataforma de Web Hosting la regla id:10018 del WAF ModSecurity intercepta en Fase 1 cualquier solicitud HTTP hacia /wp-content/upgrade/, bloqueando la petición con 403 y poniendo en cuarentena a la IP atacante antes de que llegue a tocar el motor PHP de tu sitio.

¿Dudas? Chateá con nosotros