Saltar al contenido
ProgramaciónExplicación

PHP2Shell: las dos fallas críticas de PHP, explicadas

PHP2Shell son dos fallas de PHP con puntuación 9.2 que pueden permitir que una sola solicitud tome el control de un servidor web. Cómo funcionan, quién está expuesto y qué las corrige por completo.

Por

6 min de lectura

XLinkedIn

Traducido automáticamente del original en inglés, que Claire Whitmore verificó y editó. Prevalece la versión en inglés. Cómo trabajamos

PHP's GitHub security advisory GHSA-w8hw-w9fx-j79w, titled RCE via OOM corruption and marked Critical, listing patched versions 8.2.35, 8.3.36, 8.4.27 and 8.5.12.

En cifras

CVSS v4.0 score PHP gives each flaw
9.2
date CISA listed both flaws as exploited
Oct 26
internet-exposed hosts running PHP, per one Shodan search
1.9M+

PHP2Shell es el apodo de dos fallas de seguridad en PHP, el lenguaje de programación que hace funcionar WordPress, Drupal y muchos otros sitios web. Se identifican como CVE-2026-109618 y CVE-2026-109619, y PHP corrigió ambas el 21 de octubre de 2026. PHP califica cada una con 9.2 sobre 10 y dice que un atacante sin cuenta puede usarlas a través de internet.

La situación se agravó el 26 de octubre. Ese día, la Agencia de Ciberseguridad y Seguridad de Infraestructuras de EE. UU. (CISA) añadió ambas fallas a su catálogo de errores que se sabe que están siendo explotados, según Tenable. Las agencias civiles federales deben corregirlas a más tardar el 29 de octubre.

Qué es PHP2Shell y quién lo descubrió

PHP2Shell es un solo nombre para dos errores distintos. Las versiones difieren sobre quién lo acuñó. El Insikt Group de Recorded Future dice que Wiz Research encontró las fallas y les puso nombre, en colaboración con la firma de seguridad Calif y con OpenAI. Tenable atribuye el nombre a un video de la cadena de exploits compartido por el investigador Kirill Firsov, quien dio el crédito a LCFR de Calif.io.

La PHP Foundation reconoció, entre otros, a Calif, OpenAI y Wiz. Calif y Wiz dijeron que usaron modelos de IA en la investigación. Según Tenable, Calif afirma que la ruta de código afectada más antigua se remonta a PHP 5.4.0.

Cómo funcionan las dos fallas

Ambos errores están en el código que PHP ejecuta al principio y al final de cada solicitud web. Ese código se ejecuta antes de que el propio código de un sitio, como un plugin de WordPress, tenga ocasión de actuar.

Un servidor web mantiene un grupo de procesos PHP de larga duración llamados workers. Cada worker responde a una solicitud, hace limpieza y toma la siguiente. Esa reutilización significa que los restos de una solicitud pueden afectar a la siguiente.

CVEEtiqueta de PHPQué sale mal
CVE-2026-109618Corrupción por OOMPHP se queda sin memoria mientras construye los datos internos de una solicitud. El paso de limpieza trata entonces los datos a medio construir como válidos.
CVE-2026-109619Estado global obsoletoLos datos de una solicitud siguen apuntando a memoria que ya se liberó. La siguiente solicitud en el mismo worker puede usarlos antes de que PHP los restablezca.

OOM son las siglas de out of memory, es decir, sin memoria. Ambas fallas implican lo que los programadores llaman un error de use-after-free (uso después de liberar): el programa sigue usando un trozo de memoria después de devolverlo. Un atacante que controle lo que acaba en esa memoria puede dirigir el programa.

Recorded Future dice que los errores incluyen un use-after-free en el código que lee los datos de progreso de subida de la sesión. Es una función de PHP para seguir la subida de archivos. Está en PHP desde la versión 5.4.0 y viene activada por defecto, según Recorded Future, que cita datos de VirusTotal. Un error relacionado filtra memoria del worker. Según Wiz, eso puede exponer contraseñas, tokens de inicio de sesión, claves de API y certificados de las solicitudes de otras personas.

Quién está expuesto a PHP2Shell

PHP dice que toda instalación que atienda solicitudes web puede estar afectada. Menciona PHP-FPM, Apache con mod_php, php-cgi, FrankenPHP y LiteSpeed, que son las principales formas en que un servidor web ejecuta PHP. PHP considera que mod_php, que ejecuta PHP dentro del propio servidor web Apache, es el de mayor riesgo. Allí, una sola solicitud sin inicio de sesión puede desencadenar un exploit demostrado antes de que se ejecute cualquier código de la aplicación.

Un ataque no funciona en todas partes. Field Effect, una firma de seguridad, dice que el éxito depende de la versión de PHP, el sistema operativo, el servidor web, la configuración de los workers y la disposición de la memoria. “No parece fiable de forma universal en todos los entornos afectados”, escribió la firma.

Aun así, los investigadores han demostrado tomas de control completas de aplicaciones populares. Según Tenable, Calif confirmó la ejecución de código sin inicio de sesión en versiones concretas de WordPress, Drupal, Joomla y Magento. Trail of Bits obtuvo shells, es decir, control del servidor por línea de comandos, en MediaWiki, Symfony, Laravel y phpBB.

PHP también se esconde dentro de productos que la gente no asocia con PHP. Field Effect incluye a Palo Alto Networks, Citrix, F5, HPE, NetApp, QNAP y Trend Micro entre los proveedores con productos afectados. Help Net Security informó el 22 de octubre de que Palo Alto dice que todas las versiones de su software PAN-OS y Panorama están afectadas, sin una versión corregida todavía.

Tenable cita una búsqueda en Shodan de Henk Poley que encuentra más de 1,9 millones de hosts expuestos a internet que ejecutan PHP. Ejecutar PHP no hace, por sí solo, que un servidor sea vulnerable.

Qué cambió y cuándo

Fecha (2026)Evento
19 de agostoWiz encuentra la primera falla con herramientas de investigación asistidas por IA
24 de agostoWiz informa en privado de las fallas al equipo de seguridad de PHP
21 de septiembrePHP acusa recibo del informe y empieza a trabajar en las correcciones
17 de octubreLos servidores señuelo de Amazon registran un intento de exploit
20 de octubrePHP anuncia una versión de emergencia para el día siguiente
21 de octubreLos detalles se filtran en internet horas antes de que PHP publique 8.5.12, 8.4.27, 8.3.36 y 8.2.35
23 de octubrePHP divulga CVE-2026-115560, una falla distinta en el progreso de subida
26 de octubreTrail of Bits informa de exploits funcionales; CISA incluye ambas fallas como explotadas

Según la PHP Foundation, PHP había planeado la versión para el 22 de octubre y la adelantó tras la filtración. Cubrimos el aviso previo y después la versión del 21 de octubre a medida que ocurrían. Amazon dijo más tarde que sus honeypots, servidores señuelo creados para atraer a atacantes, detectaron un intento cuatro días antes de la divulgación. No sabe cómo obtuvo el atacante los detalles antes de tiempo.

Al publicar la versión, la PHP Foundation dijo que “no identificó ningún exploit funcional” entre el código que circulaba en internet. Eso cambió en pocos días. Tenable informa de que los honeypots de un investigador con PHP 8.4.26 fueron explotados el 24 de octubre. Trail of Bits tenía exploits funcionales contra PHP 8.2 a 8.5 para el 26 de octubre. Recorded Future aún advierte que “la información disponible no establece el alcance total de la explotación exitosa ni de los compromisos confirmados”.

La falla del 23 de octubre es un problema distinto que las versiones del 21 de octubre no corrigen. PHP la describe como “un vector improbable de ejecución remota de código en el progreso de subida de la sesión”. Según Field Effect, afecta a las aplicaciones que cambian session.serialize_handler mientras el programa se ejecuta, antes de llamar a session_start(), con el progreso de subida activado.

Qué significa esto para los desarrolladores

Actualizar es la única solución completa. Todo lo demás solo gana tiempo.

  • Actualiza y después reinicia cada worker. Las versiones corregidas son 8.5.12, 8.4.27, 8.3.36 y 8.2.35. Tenable señala que un paquete nuevo no parchea los procesos que ya se están ejecutando. Calif dice que el código antiguo permanece en memoria hasta un reinicio.
  • Guarda primero la memoria si un servidor fue sondeado. La guía de Google Cloud, redactada con Mandiant, indica capturar la memoria de los workers antes de reiniciar. Un reinicio borra las pruebas.
  • Trata los cambios de configuración como un parche temporal. La solución provisional de PHP para la primera falla es memory_limit=-1, fijada de forma que las aplicaciones no puedan anularla. Para la segunda es session.upload_progress.enabled=0, más fatal_error_backtraces=0 en PHP 8.5.
  • Revisa el código de sesiones en busca de CVE-2026-115560. Si una aplicación cambia session.serialize_handler antes de session_start(), desactiva el progreso de subida hasta la próxima versión regular de PHP.
  • Vigila los fallos de SimpleXML. Tenable informa de una regresión, la incidencia #24488 de php-src, en 8.4.27 y 8.5.12 que puede hacer fallar algunas aplicaciones SimpleXML. Se fusionó una corrección, pero no se había publicado al 26 de octubre.
  • Mira más allá de tus propios servidores. Los firewalls, los equipos de almacenamiento y las herramientas de seguridad pueden incluir PHP, así que lee el aviso de cada proveedor. Revisa los registros desde el 17 de octubre.
  • Planifica la migración si usas PHP 7.4 a 8.1. Esas ramas solo reciben parches mínimos de código fuente, sin versión oficial. Pregunta a tu distribución o a tu proveedor de soporte por un backport.

Fuentes

  1. PHP2Shell (CVE-2026-109618, CVE-2026-109619): Frequently asked questions about critical PHP remote code execution vulnerabilities - Tenable
  2. PHP2Shell Exploitation: Two Critical PHP Flaws Explained - Recorded Future
  3. PHP2Shell: Critical PHP vulnerabilities patched, update now! - Help Net Security
  4. Another PHP issue identified while vendors report affected products - Field Effect

Artículos relacionados