No es php.net · No es NVD · No es CISA

Seguimiento de vulnerabilidades PHP

Informe no oficial sobre vulnerabilidades de seguridad en PHP

English简体中文日本語DeutschFrançaisNederlandsEspañol

Alerta de seguridad

PHP2Shell: actualice PHP. Es la única solución completa.

CVE-2026-109618 y CVE-2026-109619 son vulnerabilidades críticas en el propio PHP que permiten ejecución remota de código sin autenticación. El proyecto PHP publicó correcciones el 21 de octubre de 2026 para las ramas con soporte 8.2 a 8.5. Reinicie PHP después de actualizar. Un cortafuegos no es un sustituto.

Pasos para corregir

CVE-2026-109619 · GHSA-6wmf-4rv5-p3rp

CVE-2026-109619: ejecución remota de código en PHP por estado global obsoleto

La descripción del proyecto PHP sobre CVE-2026-109619 es breve y concreta: un estado interno ligado a una petición puede persistir después de liberarse su memoria, y una petición posterior en el mismo worker puede usar ese estado obsoleto antes de que la inicialización normal lo restablezca. Calificada como crítica, CVSS v4.0 9.2, la misma puntuación que CVE-2026-109618.

Última actualización

Identificadores. La puntuación 9.2 la usan el proyecto PHP, las agencias asociadas de la CISA y el aviso de la Universidad de Toronto.
CampoDato de las fuentes citadas
CVECVE-2026-109619
Aviso de GitHubGHSA-6wmf-4rv5-p3rp
GravedadCrítica. CVSS v4.0 9.2.
Puntuación NVDCVSS v3.1 9.8 Crítica (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H), puntuación Primary de la NVD, consultada el 22 de octubre de 2026 a través de la API de la NVD.
VectorEl aviso de la Universidad de Toronto asigna a ambas CVE AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H. No encontramos este vector en el texto del anuncio de php.net.
Versiones corregidasLos mismos paquetes que para CVE-2026-109618: 8.2.35, 8.3.36, 8.4.27, 8.5.12.
Tipo de vulnerabilidadUse-after-free es el término de la PHP Foundation, la Universidad de Toronto y el Centro Canadiense de Ciberseguridad (CWE-416). El título en php.net es «RCE via stale global state».

Qué falla, al nivel de la información del fabricante

Según la PHP Foundation, un error fatal en el lugar equivocado puede dejar un estado interno que apunta a memoria de una petición anterior. Una petición posterior en el mismo worker puede entonces usar esa memoria liberada. La Foundation indica que el use-after-free y una caída del worker están confirmados, y que quien informó del fallo demostró ejecución remota de código contra una aplicación real en Apache con mod_php. La descripción del NCSC británico coincide con la frase de php.net.

El aviso de la Universidad de Toronto cita el progreso de subida de sesión, activado por defecto, como una vía confirmada. Según la recomendación provisional de PHP, session.upload_progress.enabled=0 bloquea las vías de sesión confirmadas, pero no otras variantes. Desactivarlo es una mitigación, no una corrección. No describimos cómo una petición alcanza la ventana del error fatal.

mod_php y PHP-FPM

Expel indica, citando a PHP, que PHP demostró esta CVE contra PHP-FPM cuando el propio código de la aplicación puede llevarse a un error fatal. La exposición de FPM depende de la aplicación y la configuración; aun así, PHP considera expuestas las instalaciones FPM. mod_php sigue siendo la configuración que el proyecto PHP califica de mayor riesgo. El Centro Canadiense de Ciberseguridad lo repite: un exploit demostrado en mod_php permite que una petición sin autenticación active el fallo antes del código de la aplicación.

Corrección

No hay un parche separado. Instale las versiones del 21 de octubre y reinicie cada worker. Para PHP 8.5, el proyecto cita además fatal_error_backtraces=0 como medida provisional, que solo bloquea la vía confirmada mediante backtraces de errores fatales. Ocultar los diagnósticos con error_reporting, display_errors o el operador @ no ayuda, según php.net. Google Cloud cita para el par de 5.4 a 8.5.11 como vulnerables; cómo encaja eso con las ramas realmente parcheadas figura en la página de versiones.

Por qué el fallo necesita dos peticiones en el mismo worker

El aviso completo de PHP describe el fallo como un par. Primero, una operación deja un puntero a la memoria de una petición en un estado global del worker (errores, sesión, objetos o extensiones) y se interrumpe antes de borrarlo, por ejemplo por un error fatal, un require fallido, un tiempo de ejecución agotado o falta de memoria. Después el worker libera esa memoria, atiende la siguiente petición, y algo que se ejecuta antes del arranque normal usa el puntero viejo. Las dos mitades deben caer en el mismo worker; más workers y el reciclado frenan un ataque, pero no lo impiden.

De dónde salen los ajustes tempranos, según el SAPI

Un disparador confirmado es un aviso o una deprecación emitidos mientras PHP aplica ajustes por petición antes del arranque, aunque el mensaje nunca se muestre ni se registre. Silenciar errores no sirve. Que exista ese camino depende de cómo llegan los ajustes a PHP:

Pasos adicionales del aviso si aún no puedes parchear

Fuentes

Los enlaces externos salen de este sitio. No alojamos código de explotación.

  1. News archive 2026: security advisory, 21 October 2026 — PHP project (php.net)
  2. Today’s PHP security release, and how we’re strengthening PHP security — The PHP Foundation
  3. GHSA-6wmf-4rv5-p3rp — CVE-2026-109619 — PHP (GitHub Security Advisory)
  4. Security advisory: critical unauthenticated RCE in PHP (“php2shell”) — University of Toronto Information Security
  5. Notice: php2shell, critical PHP vulnerabilities (status as of 21 October 2026, 20:00 UTC) — Expel
  6. Critical vulnerabilities in PHP require immediate patching (21 October 2026) — CISA
  7. Critical security issue affecting PHP — UK NCSC
  8. Responding to core PHP vulnerabilities CVE-2026-109618 and CVE-2026-109619 — Google Cloud
  9. CVE-2026-109619 — NVD
  10. AL26-026 — Critical vulnerabilities impacting PHP — Canadian Centre for Cyber Security
  11. PHP vulnerability CVE-2026-109619 (reproduces PHP’s advisory) — Inphinit (PHP framework documentation)