«Active exploitation has been observed targeting the Palo Alto Networks management interface» (se ha observado explotación activa contra la interfaz de gestión de Palo Alto Networks). Con esa línea, el aviso de PHP2Shell para PAN-OS, actualizado el 28 de octubre de 2026, da por confirmados los ataques contra firewalls y Panorama con la administración expuesta a internet, dos días después de que CISA incluyera CVE-2026-109618 y CVE-2026-109619 en su catálogo KEV y de que la firma Dream publicara cómo un operador encadenó esos fallos con Fragnesia para conseguir root en 24 firewalls y llegar al Active Directory de una organización vinculada al Gobierno de EE. UU.
- PHP2Shell (CVE-2026-109618 y CVE-2026-109619) se explota contra la interfaz de gestión de PAN-OS expuesta a internet, según el aviso de Palo Alto actualizado el 28 de octubre.
- CISA lo incluyó en KEV el 26 de octubre, con plazo federal hasta el 29.
- Dream documenta 24 firewalls de un fabricante sin nombrar con root mediante PHP2Shell y Fragnesia (CVE-2026-46300), y un salto al Active Directory de una organización vinculada al Gobierno de EE. UU.
- Hay hotfixes para casi todas las versiones de PAN-OS y Panorama, y seis llegan el 29 y el 30 de octubre.
- Lo urgente es sacar la gestión de internet, parchear primero Panorama y tratar como comprometido cualquier equipo que estuviera expuesto.
Es la tercera pieza que dedicamos a PHP2Shell, después de la del parche de emergencia de PHP del 21 de octubre y la del tercer vector RCE y Mirai del día 24. En aquella escribíamos que nadie había confirmado todavía un servidor comprometido. Esa frase ya no vale.
Lo que Palo Alto ha cambiado en su aviso entre el 27 y el 28 de octubre
El aviso de Palo Alto Networks se publicó el 21 de octubre como evaluación del impacto de dos fallos de PHP en sus productos. La interfaz web de administración de PAN-OS, que incluye la consola HTTPS y el servicio de la API XML, usa PHP, y por eso los firewalls PA-Series y VM-Series y los Panorama virtuales y M-Series entran en el perímetro del fallo sin necesidad de ninguna configuración especial. Las interfaces del plano de datos solo están afectadas si tienen un perfil de administración asociado. GlobalProtect (portal, gateway y Clientless VPN) y el Captive Portal quedan fuera.
El 27 de octubre el fabricante subió la gravedad a crítica y la urgencia a la máxima, con un CVSS-B de 9,2 en CVSS 4.0 para equipos con la gestión accesible desde internet. Hasta entonces la calificaba como alta, con 8,7, que es la cifra que todavía recogía el aviso de INCIBE-CERT en su actualización del 26 de octubre. La frase sobre explotación activa figura en la versión del aviso actualizada el 28 de octubre, y llega sin fecha de inicio, sin número de equipos y sin indicadores. Esa misma ficha calcula 5,2 en CVSS-BT cuando solo un jump box puede alcanzar la interfaz, lo que resume dónde está el riesgo.
Dato | Detalle |
|---|---|
CVE | CVE-2026-109618 y CVE-2026-109619 (PHP2Shell), encadenados en el informe de Dream con CVE-2026-46300 (Fragnesia) |
CVSS y vector | Palo Alto: 9,2 CVSS-B en CVSS 4.0 con la gestión expuesta (CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:A/AU:N/R:U/V:D/RE:M/U:Red). PHP como CNA: 9,2 en CVSS 4.0. NVD en CVSS 3.1: 9,8 y 8,1 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H para el primero). Fragnesia: 7,8 en CVSS 3.1 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) |
Producto | PAN-OS en firewalls PA-Series y VM-Series y en Panorama virtual y M-Series, en la interfaz web de gestión y la API XML |
Versiones afectadas | Ramas 10.2, 11.1, 11.2, 12.1 y 12.2 anteriores a las hotfixes de cada versión menor, y cualquier versión sin soporte |
Versiones corregidas | Publicadas: 12.2.4-h1, 12.1.7-h11, 11.2.16-h1, 11.2.13-h4, 11.2.10-h16 (h17 para cubrir también Brotli), 11.2.7-h23, 11.1.16-h4, 11.1.13-h16, 11.1.10-h36, 11.1.6-h40, 11.1.4-h38, 10.2.18-h13, 10.2.16-h12 y 10.2.13-h27. Previstas el 29 y el 30 de octubre: 12.1.4-h13, 12.1.10-h3, 11.2.4-h23, 11.1.7-h12, 10.2.10-h42 y 10.2.7-h39 |
Explotación activa | Sí. Palo Alto la confirma contra interfaces de gestión expuestas en su aviso actualizado el 28 de octubre de 2026. En el catálogo KEV de CISA desde el 26 de octubre de 2026, con plazo federal hasta el 29 de octubre |
Gravedad | Crítica y urgencia máxima según Palo Alto desde el 27 de octubre de 2026. Baja a 5,2 en CVSS-BT si solo un jump box llega a la interfaz |
CISA añadió los dos identificadores al catálogo KEV el 26 de octubre a nombre del PHP Group, y dio de margen a las agencias federales hasta el 29 de octubre. La ficha de NVD recoge el 9,2 del CNA en CVSS 4.0 y su propia nota de 9,8 en CVSS 3.1 para CVE-2026-109618, frente a 8,1 para CVE-2026-109619. La diferencia entre ambas versiones de CVSS sale de cómo puntúa cada una la complejidad del ataque, porque la 4.0 la marca como alta y añade requisitos previos, y la 3.1 de NVD la deja en baja para el primer fallo.
En la fecha de esta noticia faltaban seis hotfixes. 12.1.4-h13 y 10.2.10-h42 tienen fecha prevista el 29 de octubre, y 12.1.10-h3, 11.2.4-h23, 11.1.7-h12 y 10.2.7-h39 el día 30. Salvo en la rama 12.1, quien esté en una de esas versiones menores tiene ya disponible la alternativa que el aviso propone para su rama, 11.2.16-h1, 11.1.16-h4 o 10.2.18-h13. Una nota de la FAQ conviene tenerla presente, porque 11.2.10-h16 solo corrige PHP2Shell y para cubrir también el fallo del decodificador Brotli de Node.js hace falta 11.2.10-h17. Es el mismo problema que contamos en la pieza sobre Node2Shell en Node.js.
Cómo encadenó el operador PHP2Shell y Fragnesia hasta el root
El informe de Dream, publicado el 26 de octubre, parte de artefactos que sus investigadores recuperaron el día 25, entre ellos un exploit de PHP2Shell propio, no publicado y adaptado al equipo, el exploit de escalada de privilegios del kernel, las listas de objetivos, los registros de explotación y unos 40 scripts de post-explotación. La firma describe un equipo con un servidor de gestión appweb y una versión antigua del intérprete, y lo dice así: «The firewall OS uses PHP 8.0.30 with a high memory limit» (el sistema operativo del firewall usa PHP 8.0.30 con un límite de memoria alto).
El exploit trabaja en cuatro peticiones. La primera agota la memoria con unos 383 MB de POST multipart cargados de nombres de archivo enormes y datos de progreso de sesión. La segunda fuerza una lectura fuera de límites y recibe en la cabecera Set-Cookie un puntero que revela la base de libphp.so en el proceso, el dato que necesita para saltarse ASLR. La tercera repite la presión, unos 500 MB, para dejar una referencia obsoleta en http_session_vars. La cuarta falsifica una entrada de HashTable cuyo destructor apunta a zif_system, la función interna detrás de system(), y ejecuta comandos como el usuario nobody.
Ahí entra Fragnesia. El usuario nobody estaba confinado por SELinux, así que el operador añadió CVE-2026-46300, un fallo del subsistema XFRM ESP-in-TCP del kernel Linux que permite escribir en la caché de páginas de ficheros de solo lectura. Con él reescribió los 774 bytes de /etc/pam.d/su para que aceptara cualquier autenticación con pam_permit.so, y a partir de ese momento su root ya no pedía contraseña. Las dos fases viajan en la misma petición HTTPS sin credenciales, y la cadena entera, hasta dejar la webshell con root, dura menos de 15 minutos.

El diagrama de Dream resume el camino completo. A la izquierda, la petición sin autenticar contra el firewall perimetral. En el centro, el túnel SSH inverso que deja persistencia en el equipo y abre paso al servidor de gestión interno, comprometido con la misma cadena. A la derecha, la cuenta de servicio LDAP descifrada que abre el Active Directory.
Los perfiles de versión retratan al operador. El exploit dependía de offsets exactos de libphp.so y de la geometría de memoria de cada versión, y Dream recuperó 11 perfiles JSON, uno calibrado y ocho provisionales para PHP 8.0.30 y dos provisionales para PHP 7.4.33. Solo el calibrado se había probado contra una máquina virtual real. Para fabricarlos, el atacante tuvo que conseguir el firmware del fabricante, descifrarlo y extraer las bibliotecas de PHP. Fragnesia tampoco es nuevo. Su ficha en NVD data del 23 de mayo de 2026, con 7,8 en CVSS 3.1 como escalada local, y el fallo no figuraba en KEV a 28 de octubre. Un kernel sin parchear cinco meses después en un appliance de red es exactamente lo que esta cadena necesitaba.
De 19.000 firewalls localizados con FOFA a un dominio de Active Directory
El embudo que reconstruye Dream empieza con unos 19.000 firewalls del mismo fabricante con la gestión publicada en internet, localizados con FOFA, el buscador chino de activos de internet, por huellas de certificado y firmas de respuesta HTTP. Un escáner propio de 200 hilos dejó unos 5.000 que respondían con su versión. El operador filtró después por país, solo Estados Unidos, Japón, Taiwán y Corea del Sur, y por las ramas con PHP 8.0.30 para las que tenía perfiles, y se quedó con 240 objetivos. Un lanzador automático los atacó de cinco en cinco, con 30 minutos de tiempo máximo por equipo, y cada éxito dejaba una webshell PHP de 103 bytes en un directorio accesible y una línea en un CSV.
La cronología de Dream sitúa la preparación el 8 de octubre, cuando se configuró la plataforma aiscan con DeepSeek y Kimi, y la explotación entre las 18:14 y las 21:55 UTC del 23 de octubre, con 24 firewalls con root al final de la tanda. El primero que cayó, a las 18:14, pertenecía a la organización gubernamental y se colgó poco después, probablemente por los cerca de 900 MB de tráfico del exploit. El operador lo vigiló con 240 sondas durante dos horas y no volvió. Su configuración ya le había dado la topología interna, con controladores de dominio, el servidor central de gestión de firewalls, un Keycloak para el SSO, un GitLab y las pasarelas VPN.

El segundo firewall de esa organización había agotado su tiempo en la tanda y se atacó por separado a las 10:09 UTC del 24 de octubre (12:09 en la España peninsular). En menos de 90 minutos el operador montó un túnel SSH inverso de 8 puertos hacia los controladores de dominio, la VPN y un proxy SOCKS5, lo hizo persistente con un servicio systemd y un gancho en rc.local, y a las 11:35 UTC comprometió con la misma cadena el servidor de gestión, el 25.º equipo de la lista. Desde ahí descifró la contraseña de la cuenta de servicio LDAP con la clave maestra del equipo, enumeró usuarios y grupos e intentó un password spraying en un dominio con lockoutThreshold=0, es decir, sin bloqueo de cuentas. También probó a crear cuentas de usuario y de máquina como backdoor, a extraer la clave de firma SAML de Keycloak y a saltarse su autenticación. El patrón recuerda al del implante PEERSTITCH en FortiGate, donde el servidor de gestión también era el premio.
Dream separa con cuidado lo que sabe de lo que no. Confirma la extracción de la credencial LDAP y la enumeración del directorio, y no puede decir si el spraying encontró contraseñas, si las cuentas backdoor se llegaron a crear o si salió la clave SAML, porque esos resultados se quedaron en el disco del servidor de gestión. Sobre el estado actual, la firma concluye que «The persistent tunnel into the US government organization is likely still running» (el túnel persistente hacia la organización del Gobierno de EE. UU. probablemente sigue activo). Los otros 22 firewalls quedaron aparcados con su webshell y sin más actividad.
Lo que el informe de Dream no permite afirmar
Dream no nombra al fabricante. «For security purposes, we are not disclosing the vendor or the affected versions» (por seguridad, no revelamos el fabricante ni las versiones afectadas), escribe, y añade que lo ha notificado. Que el aviso de Palo Alto hable de explotación activa contra su interfaz de gestión dos días después no autoriza a unir las dos historias, y no lo haremos. Lo que sí comparten es la superficie, una consola de administración con PHP publicada en internet, y la recomendación que se deriva de ella es la misma para cualquier marca.
Lo que sí está medido es el volumen. El panel del Delft Threat Intelligence Lab, de la Universidad Técnica de Delft, contabilizaba a las 12:47 UTC del 28 de octubre 72.343 peticiones de explotación desde 659 IP de 305 sistemas autónomos y 73 países entre el 21 y el 28 de octubre, con 174 direcciones que enviaron código o un dropper y una hora punta el 26 de octubre a las 14:00 UTC, con 8.179 peticiones. La captura muestra también que la primera petición llegó a las 08:37 UTC del 21 de octubre, 5,4 horas antes del parche de PHP. El propio laboratorio advierte de que no sabe cuántos de esos intentos funcionan.

La distancia entre intento y shell se está cerrando. Trail of Bits publicó en X una demostración de PHP2Shell con shell en MediaWiki, Symfony, Laravel y phpBB, y aseguró haber confirmado exploits contra versiones de PHP 8.2 a 8.5 anteriores al parche. La cadena de Dream va contra una rama aún más vieja, la 8.0, que el proyecto PHP ya no mantiene, y que en un appliance solo corrige el fabricante.
Our demo shows PHP2Shell giving a shell on MediaWiki, Symfony, Laravel, and phpBB.
— Trail of Bits (@trailofbits) October 26, 2026
We’ve confirmed exploits work on pre-patch releases of PHP 8.2–8.5. If you haven’t updated, assume attackers can compromise your server, and that exploitation will only get easier. https://t.co/XVCG1pRThv pic.twitter.com/6BMOwrSujk
Tampoco hay atribución. «We do not attribute this activity to a named threat actor» (no atribuimos esta actividad a un actor con nombre), dice la firma, que apunta a una operación de nexo chino por la elección de objetivos, el uso de FOFA y de la herramienta de túneles iox, los modelos DeepSeek y Kimi, las marcas de tiempo en UTC+8 y los prompts en chino de los registros de aiscan. En la infraestructura había Claude Code instalado, pero Dream admite que no tiene pruebas directas de que la IA escribiera el exploit o los scripts, aunque la estructura y los comentarios de esos 40 ficheros lo sugieren.
Conviene leer esto con la cautela que ha pedido la propia semana. El 23 de octubre Unit 42 vinculó a PHP2Shell una intrusión con IA agéntica contra una agencia gubernamental europea y el 25 la retiró, porque no podía confirmar que el acceso inicial viniera de esos CVE. La nota de Unit 42 lo explica en una frase, «unable to confirm that initial access is associated with the specific PHP2Shell CVEs» (no podemos confirmar que el acceso inicial esté asociado a los CVE concretos de PHP2Shell). El informe de Dream se apoya en artefactos del propio operador, con registros y listas, y es más sólido que una inferencia desde la víctima, pero la víctima no ha confirmado nada en público.
Hotfixes, firmas y registros que revisar en PAN-OS y Panorama
No hay recuento público de interfaces de gestión de PAN-OS expuestas en España a fecha de esta noticia, y el aviso de INCIBE-CERT del 26 de octubre seguía marcando la explotación como no definida. Con 19.000 equipos de un solo fabricante localizables desde FOFA, la ausencia de cifras locales no es motivo para esperar.
Antes de la lista, estos comandos de la CLI de PAN-OS devuelven la versión instalada, las direcciones con permiso para llegar a la gestión y los perfiles de administración que puedan estar asociados a interfaces del plano de datos.
show system info | match sw-version
configure
show deviceconfig system permitted-ip
show network profiles interface-management-profile
exit- Saca hoy de internet la interfaz de gestión de cada firewall y de cada Panorama. Limita el acceso con permitted-ip a un jump box o a la VLAN de administración y quita los perfiles de administración de cualquier interfaz del plano de datos orientada a internet.
- Actualiza a la hotfix de tu versión menor o a la alternativa que el aviso da para tu rama (12.2.4-h1, 11.2.16-h1, 11.1.16-h4 o 10.2.18-h13, y en 12.1 la 12.1.7-h11 para las versiones de 12.1.5 a 12.1.7). En 11.2.10 instala la h17 y no la h16. Actualiza primero Panorama, porque comprometerlo da acceso a la configuración de todos los firewalls gestionados.
- Si te toca una de las hotfixes previstas para el 29 o el 30 de octubre, activa ya los Threat ID 543004 y 97622 a 97625 con la versión de contenido 9162 o posterior. Solo protegen la gestión si su tráfico pasa por un puerto del plano de datos, se descifra y tiene Threat Prevention aplicado, como explica el aviso.
- Revisa los registros de amenazas desde el 17 de octubre en busca de esas firmas con origen público, y los registros de sistema en busca de inicios de sesión de administración y cambios de configuración sin ticket. Haz la búsqueda en el SIEM, porque quien tiene root en el equipo puede limpiar los registros locales.
- Si el equipo estuvo expuesto antes de parchear, trátalo como comprometido. Rota las credenciales que guarda (administradores, cuenta de servicio LDAP, RADIUS, claves de API, PSK de VPN), renueva certificados y claves privadas, incluidas las de alta disponibilidad, y revisa en el Active Directory cuentas de usuario y de máquina creadas desde el 23 de octubre.
- Comprueba en el dominio que lockoutThreshold no está a 0 y que ms-DS-MachineAccountQuota no sigue en su valor por defecto, las dos condiciones que el operador de Dream intentó aprovechar.
- Notifica cualquier indicio a INCIBE-CERT si eres empresa o ciudadano y al CCN-CERT si eres administración pública.
Unit 42 publica esta consulta XQL para buscar en los registros de amenazas de los NGFW los intentos de explotación entrantes desde direcciones públicas. Sirve a quien envía esos registros a Cortex XDR o XSIAM y se puede adaptar a otro SIEM con los mismos campos.
config case_sensitive = false
| dataset = panw_ngfw_threat_raw
| filter sub_type = "vulnerability"
| filter to_zone !~= "internet|untrust|outside|external|wan"
| filter not (incidr(source_ip, "10.0.0.0/8") or incidr(source_ip, "172.16.0.0/12") or incidr(source_ip, "192.168.0.0/16"))
| filter to_string(threat_id) contains "543004" or threat_name ~= "php|multipart|upload.progress|longjmp|CVE-2026-10961[89]"
| comp count() as hits, count_distinct(source_ip) as sources, values(source_ip) as source_ips, values(action) as actions,
values(severity) as severities, min(_time) as first_seen, max(_time) as last_seen
by threat_name, threat_id, dest_ip, nat_dest, dest_port, to_zone
| sort desc hitsPAN-OS no da shell al cliente, pero hay appliances Linux con consola PHP en los que sí se puede entrar como root. En esos equipos, estas dos comprobaciones buscan las huellas que describe Dream, el fichero PAM reescrito y una webshell PHP de 103 bytes creada desde el 8 de octubre. Como Fragnesia escribe en la caché de páginas y no en el disco, la primera hay que lanzarla antes de reiniciar.
grep -n "pam_permit" /etc/pam.d/su
find / -xdev -type f -name "*.php" -size 103c -newermt 2026-10-08 2>/dev/nullLa cadena de Dream no habría pasado del primer paso con la gestión detrás de un jump box. Es lo mismo que repetimos con el zero-day de PAN-OS del 15 de octubre y lo que recoge cualquier guía para auditar el firewall. Esta vez el fallo no necesita credenciales y viene de una dependencia que el cliente no controla. El kernel que lo convierte en root, por su parte, tiene parche desde mayo. Si tu Panorama responde desde internet, ciérralo antes de leer la lista de hotfixes.



No hay comentarios todavía