Bitácora técnica

php2shell (CVE-2026-109618 / 109619) no se puede evaluar con php -v: dónde divergen los números de versión entre FPM, Docker y las distribuciones

Publicado: 2026-10-22 · Autor: GRAMSHIFT

Versiones de CLI y FPM, etiquetas de Docker, backports de las distribuciones y qué comprobar en un hosting compartido

php2shell (CVE-2026-109618 / 109619) no se puede evaluar con php -v: dónde divergen los números de versión entre FPM, Docker y las distribuciones

Esta página se ha traducido con IA a partir del original en japonés. Si hay alguna diferencia, prevalece la versión original en japonés: 日本語

Si el PHP que atiende las peticiones web (PHP-FPM, el mod_php de Apache, php-cgi, FrankenPHP, LiteSpeed) es anterior a 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12, le afectan CVE-2026-109618 y CVE-2026-109619, conocidas como php2shell. La solución es actualizar a una de estas versiones (o, en paquetes de distribución, al paquete corregido) y reiniciar los procesos. Lo que hay que comprobar no es el php -v local, sino «el PHP que realmente sirve la web» y «la versión del paquete instalado».

Este artículo se centra en cuatro puntos en los que juzgar solo por el número de versión lleva a una conclusión equivocada. Todas las cifras y datos de estado son a fecha de 2026-10-22, y las fuentes de cada apartado se enumeran al final.

Qué se sabe a fecha de 2026-10-22

ElementoDetalles
CVECVE-2026-109618 (GHSA-w8hw-w9fx-j79w) / CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp)
GravedadAmbas con CVSS v4.0 9.2 (Crítica) en el aviso de PHP
Versiones corregidas8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 (publicadas el 2026-10-21)
Versiones afectadasLas anteriores a las versiones corregidas indicadas arriba (según los avisos de GitHub)
AlcanceCualquier PHP que atienda peticiones web. El aviso menciona PHP-FPM, mod_php, php-cgi, FrankenPHP y LiteSpeed, y describe mod_php como el de mayor riesgo. En los avisos de GitHub, la explotación se ha demostrado para mod_php, mientras que FPM y FrankenPHP figuran como «no demostrado» o «condicional». No demostrado no significa seguro, así que actualiza a una versión corregida sea cual sea la forma en que ejecutes PHP
8.1 y anterioresSin actualizaciones del proyecto PHP. Se han publicado backports mínimos del código fuente para 7.4 / 8.0 / 8.1, y algunas distribuciones y proveedores de LTS pueden ofrecer correcciones
8.2Fin del soporte el 2026-12-31 (según las notas de la versión 8.2.35)

El aviso de PHP afirma que «la única solución completa es actualizar». Las mitigaciones para el periodo previo a la actualización se tratan más adelante en este artículo.

Trampa 1: php -v y el PHP expuesto a la web pueden ser distintos

php -v ejecutado por SSH informa de la versión del PHP de CLI. Las peticiones web las atienden procesos de PHP-FPM o mod_php cargado en Apache, que son binarios y paquetes distintos. Si has instalado un PHP más reciente solo para la CLI, ejecutas varias versiones en paralelo o un pool de FPM apunta a otra versión, el lado web puede seguir siendo antiguo aunque php -v muestre una versión corregida.

Hay varias formas de ver la versión real del lado web.

# FPM en Debian / Ubuntu (con nombre por versión)
php-fpm8.3 -v

# FPM en sistemas de la familia RHEL
php-fpm -v

# Comprobar si mod_php está cargado en Apache
apachectl -M | grep -i php

El método más fiable es hacer que el PHP que realmente se ejecuta vía web informe de su propia versión. Coloca un archivo temporal con un nombre difícil de adivinar y bórralo en cuanto lo hayas comprobado.

<?php echo PHP_VERSION, ' ', PHP_SAPI;

Si PHP_SAPI es fpm-fcgi, PHP se ejecuta con FPM; apache2handler significa mod_php; cgi-fcgi significa CGI. Evita dejar phpinfo() expuesto, ya que por sí mismo filtra información.

El reinicio es otro paso que se pasa por alto con facilidad. Aunque se sustituya el paquete, los procesos de php-fpm o Apache que ya están en marcha pueden seguir ejecutando el código antiguo. Algunas configuraciones se reinician automáticamente al actualizar paquetes; otras no. Tras actualizar, reinicia FPM / Apache y vuelve a comprobar la versión del lado web con los métodos anteriores.

Trampa 2: con Docker, no se puede juzgar por el nombre de la etiqueta

La imagen oficial de php tiene «etiquetas móviles» como 8.3 y 8.3-fpm, cuyo contenido se sustituye, y etiquetas fijas como 8.3.30, que fijan la versión.

  • Aunque una etiqueta móvil pase a una versión corregida en Docker Hub, tu copia local sigue siendo la imagen antigua hasta que vuelvas a hacer pull. Los contenedores en ejecución también siguen usando la imagen antigua hasta que se recreen. Un Dockerfile con FROM php:8.3-fpm seguirá construyéndose sobre la base antigua si esta permanece en la caché de compilación.
  • Una etiqueta fija se queda antigua para siempre hasta que cambies tú el número.

Puedes comprobar si se han publicado las etiquetas de las versiones corregidas mediante la API de Docker Hub.

curl -s "https://hub.docker.com/v2/repositories/library/php/tags?name=8.3.36&page_size=100"

Estos son los resultados de consultar cuatro líneas de versiones el 2026-10-22 (horas en UTC).

Versión corregidaEtiquetas encontradasCuándo aparecieron las etiquetas basadas en Debian (-fpm, -apache, etc.)Etiquetas basadas en Alpine
8.5.1254 (incluida RC1)2026-10-21 18:59–22:132026-10-21 22:12–10-22 01:05
8.4.2754 (incluida RC1)2026-10-21 22:09–22:112026-10-21 22:09–10-22 03:58
8.3.36272026-10-21 22:04–22:062026-10-21 22:04–10-22 03:56
8.2.35272026-10-21 21:59–22:012026-10-21 22:00–10-22 00:58

Al comprobarlo aparecieron tres puntos en los que juzgar por los números puede inducir a error.

  1. «Actualizado recientemente» no significa «corregido». La etiqueta fija 8.3.35 se reconstruyó durante el 2026-10-21, pero el PHP_VERSION de su interior seguía siendo 8.3.35. Fíjate en la versión del interior, no en la marca de tiempo de actualización.
  2. Digests distintos pueden tener el mismo contenido. 8.3 y 8.3.36 tenían digests de etiqueta distintos (el valor del índice multiarquitectura), pero la imagen amd64 era idéntica y ambas tenían PHP_VERSION=8.3.36. Igualmente, en 8.3-fpm / 8.3.36-fpm, 8.4-apache / 8.4.27-apache, latest / 8.5.12, 8.5-fpm y 8.2-fpm, el PHP_VERSION de la imagen amd64 era una versión corregida.
  3. No hay imágenes oficiales corregidas para 8.1 y anteriores. 8.1-fpm se actualizó por última vez el 2025-12-31.

Para comprobar tus imágenes locales y los contenedores en ejecución:

# Versión de PHP de una imagen descargada localmente
docker image inspect php:8.3-fpm --format '{{range .Config.Env}}{{println .}}{{end}}' | grep PHP_VERSION

# Volver a hacer pull y recrear los contenedores
docker compose pull
docker compose up -d

# Si construyes tu propia imagen, vuelve a descargar la base y luego compila
docker compose build --pull

# Versión dentro de un contenedor en ejecución
docker compose exec app php -r 'echo PHP_VERSION, PHP_EOL;'

Sustituye app en el último comando por el nombre de tu propio servicio. Cada imagen oficial se construye con un único PHP_VERSION, así que la versión de CLI dentro de un contenedor coincide con la versión de FPM / Apache de ese contenedor (la Trampa 1 se aplica cuando PHP está instalado directamente en el host).

FrankenPHP incorpora PHP, por lo que la versión de FrankenPHP y la versión de PHP incorporada son números distintos. Las notas de la versión de FrankenPHP 1.13.2, publicada el 2026-10-21, indican que las imágenes de Docker se compilaron con PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 y los binarios estáticos con PHP 8.5.12.

Trampa 3: los paquetes de las distribuciones están «corregidos con números antiguos»

Ubuntu y RHEL portan solo las correcciones a versiones antiguas (backporting). El número que muestra php -v sigue siendo antiguo, así que una comprobación numérica del tipo «inferior a 8.3.36, luego vulnerable» marcará como vulnerable un sistema ya corregido. Y a la inversa, tampoco puedes tranquilizarte por el número. Decide según la versión del paquete y el tracker de seguridad de cada distribución.

Paquetes corregidos que figuraban en cada tracker a fecha de 2026-10-22 (iguales para ambos CVE):

DistribuciónPaqueteVersión corregidaFuente
Ubuntu 22.04 (jammy)php8.18.1.2-1ubuntu2.28USN-8948-1
Ubuntu 24.04 (noble)php8.38.3.6-0ubuntu0.24.04.13USN-8948-1
Ubuntu 26.04 (resolute)php8.58.5.4-0ubuntu1.5USN-8948-1
Ubuntu (stonking)php8.58.5.9-0ubuntu2.1USN-8948-1
Ubuntu 14.04 / 16.04 / 18.04 / 20.04php5 / php7.0 / php7.2 / php7.4Disponible mediante Ubuntu Pro (incluido Legacy Support)USN-8948-2
Debian 12 (bookworm)php8.28.2.35-1~deb12u1DLA-4848-1
Debian 13 (trixie)php8.48.4.27-1~deb13u1DSA-6574-1
RHEL 10php / php8.48.3.36-1.el10_2 / 8.4.27-1.el10_2Red Hat
RHEL 9php (predeterminado)8.0.30-8.el9_8.1Red Hat
RHEL 9módulo php 8.2 / 8.38.2.35-1.module+el9.8.0… / 8.3.36-1.module+el9.8.0…Red Hat
RHEL 8módulo php 7.4 / 8.27.4.33-8.module+el8.10.0… / 8.2.35-1.module+el8.10.0…Red Hat

Esta tabla muestra directamente por qué los números no bastan. El PHP corregido de Ubuntu 24.04 es una versión que empieza por 8.3.6, muy inferior al 8.3.36 de upstream. El PHP predeterminado de RHEL 9 está corregido y sigue en 8.0.30, aunque upstream ya no publica correcciones para 8.0. Debian ha pasado a los mismos números que upstream (8.2.35 / 8.4.27).

Algunos paquetes aún no están corregidos (a fecha de 2026-10-22).

  • El módulo php 8.4 de RHEL 9 figura como «afectado, sin corrección».
  • Debian forky (testing) tiene php8.4 8.4.26-1, marcado como «vulnerable». El php8.4 de sid (unstable) es 8.4.27-1 y está corregido.

Comandos de ejemplo para comprobar tu propio servidor:

# Debian / Ubuntu: versión instalada y versión disponible
apt-cache policy php8.3-fpm libapache2-mod-php8.3

# Ubuntu: si este CVE está corregido en este servidor
pro fix CVE-2026-109618
pro fix CVE-2026-109619

# Familia RHEL: si existe una actualización que corrija este CVE, y la versión instalada
dnf updateinfo list --cve CVE-2026-109618
rpm -q php-fpm php-cli

Adapta el nombre del paquete (php8.3-fpm, etc.) a tu entorno. Compara la versión mostrada con la «versión corregida» de la tabla anterior o del tracker; si es igual o superior, la corrección está aplicada. Después completa el reinicio y la comprobación del lado web descritos en la Trampa 1.

Si instalas PHP desde un repositorio de terceros en lugar de los paquetes propios de la distribución, debes seguir las actualizaciones de ese repositorio. El aviso de PHP señala que rpms.remirepo.net, mantenido por voluntarios, no tendría actualizaciones el día de la divulgación, y recomienda cambiar a los paquetes de la distribución o a compilaciones propias.

Trampa 4: en hosting compartido y entornos gestionados no puedes actualizar PHP tú mismo

En hosting compartido y entornos PHP gestionados, es el proveedor quien sustituye el entorno de ejecución de PHP. Aquí tampoco basta el número: si el proveedor compila PHP por su cuenta o hace backport de las correcciones, el número de versión puede seguir siendo antiguo.

Hay tres cosas que puedes hacer tú mismo.

  1. Comprobar la versión del lado web. Usa el archivo temporal de la Trampa 1 para mostrar PHP_VERSION y PHP_SAPI y bórralo enseguida. Si el panel de control tiene un selector de versión de PHP, anota también qué versión tienes seleccionada.
  2. Leer el aviso del proveedor y preguntarle si no hay ninguno. Pregunta: «¿En qué versiones de PHP de mi plan se aplicarán las correcciones de CVE-2026-109618 y CVE-2026-109619, y cuándo (o ya se han aplicado)?». Preguntar por el número de CVE y no por el número de versión te dará una respuesta que también cubre los backports.
  3. Si has seleccionado una versión sin soporte, actualiza. El proyecto PHP no publica correcciones para 8.1 y anteriores, y el soporte de 8.2 termina el 2026-12-31. Salvo que el proveedor haya hecho backport de las correcciones, cambiar de versión es el camino seguro.

Estado por proveedor de hosting (a fecha de 2026-10-22)

En el hosting compartido, lo normal es que el proveedor actualice el entorno de PHP, y los avisos de muchos proveedores indican que «no se requiere ninguna acción por parte de los usuarios». Los usuarios tienen dos cosas que hacer: consultar el aviso oficial de su proveedor y, si han seleccionado una versión antigua de PHP en el panel de control, decidir si cambian a la versión que recomienda el aviso (una con versión corregida publicada).

La tabla siguiente resume únicamente lo que consta en las páginas oficiales de cada proveedor (anuncios e información de mantenimiento), parafraseando la redacción de sus avisos. Los avisos se actualizan a medida que avanza el trabajo, así que confirma siempre el estado real en la página oficial citada.

Proveedor / servicioPuntos clave del aviso oficialFecha/hora del avisoFuente
エックスサーバー«Para PHP 8.2–8.5, se ha completado la aplicación del parche de corrección en todos los servidores afectados». Para versiones anteriores, el aviso dice que «los parches de corrección están listos para algunas versiones y se aplicarán de forma secuencial a medida que se complete la verificación», y que se está trabajando también en otras versiones antiguasSegún consta a las 10/22 6:45 (la página se actualizó hasta las 13:15)メンテナンスの進捗状況
シン・レンタルサーバーLa página de anuncios muestra el mismo «progreso del mantenimiento» que Xserver, pero no encontré ninguna declaración que trate específicamente el estado de PHP de Shin Rental Server (consulta con el soporte)-お知らせ
ConoHa WING«Estamos aplicando parches de seguridad manteniendo la versión de PHP que utiliza actualmente». El aviso indica que, en general, los usuarios no necesitan cambiar de versión, pero que puede ser necesario un cambio para PHP 5.x y 7.x. El administrador de archivos y el webmail están suspendidos temporalmente como precaución; la visualización de los sitios web y el envío y la recepción de correo continúan con normalidad10/22【重要】PHPの脆弱性への弊社対応について
さくらのレンタルサーバ«Hemos completado nuestra respuesta a la vulnerabilidad para todas las versiones de PHP seleccionables desde nuestro panel de control». Indica que «no se requiere ninguna acción urgente por parte de los clientes» y recomienda pasar en adelante a la última versión con soporte. El aviso dice que el webmail se atendió a las 10/22 13:45 y que phpMyAdmin sigue en proceso10/22 (actualizado a las 13:45)PHPの脆弱性(CVE-2026-109618、CVE-2026-109619)への対応状況について
ロリポップ!Un aviso de mantenimiento preventivo previo a la publicación de las versiones corregidas (el sitio del servicio, las páginas de usuario, etc. se suspenderán por turnos; los sitios pueden suspenderse o restringirse sin previo aviso). A fecha de 10/22, no encontré ningún aviso que anuncie la finalización de la corrección de PHP (consulta con el soporte)10/21【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
ヘテムル«Para PHP 8.x y PHP 7.4, hemos aplicado las versiones corregidas oficiales»; para las demás versiones, «hemos realizado correcciones propias basadas en la corrección oficial». Como «se ha desactivado cierta funcionalidad (session.upload_progress) en todas las versiones», se pide a los usuarios que comprueben que sus sitios funcionan. Dado que las versiones antiguas pueden no recibir más correcciones, el aviso recomienda cambiar a una versión más recientePublicado 10/21 19:44; actualizado 10/22 12:18 y 13:20【一部完了】【重要】PHPの脆弱性への予防措置に伴うメンテナンス実施のお知らせ
mixhost«La aplicación de los paquetes de corrección de PHP se completó aproximadamente a las 10:18 del 22 de octubre de 2026». «Aplicada sin cambiar el número de versión de PHP»; «no se requiere ninguna acción por parte de los clientes». El aviso recomienda que los usuarios de versiones inferiores a PHP 8.2 utilicen una versión con soporte (8.2 o posterior)10/22【完了】PHPの重大な脆弱性への対応について
KAGOYAPara el servicio de servidores de alquiler, PHP 8.2–8.5 se actualizará de forma secuencial tras verificar las versiones corregidas (las versiones objetivo aún se están definiendo). Para los servidores dedicados gestionados, compartidos y específicos de WordPress, aún se está planificando una corrección definitiva; como medidas provisionales, el aviso sugiere considerar desconectar los sitios o restringir el accesoPublicado 10/21 18:20; actualizado 10/22 10:35PHPの脆弱性に関する当社サービスへの影響について
Zenlogic(IDCフロンティア)Correcciones aplicadas durante un mantenimiento de emergencia (10/21 22:00–10/22 18:00; la hora de finalización puede variar). PHP 5.3 se actualizará a la última versión y no se podrá revertir; 7.4 y 8.1 pueden actualizarse. El aviso dice que, si tras la actualización aparecen problemas de visualización o de comportamiento, habrá que corregir la aplicación10/21【ホスティング】緊急メンテナンス作業のお知らせ
ColorfulBox«Hemos completado la actualización a versiones corregidas en el servidor manteniendo la versión de PHP que utiliza actualmente». El aviso afirma que «los clientes no necesitan cambiar ni cambiar de versión de PHP por sí mismos»10/22【重要】PHPの脆弱性に対するセキュリティアップデート完了のお知らせ
お名前.com レンタルサーバー«Estamos aplicando parches de seguridad manteniendo la versión de PHP que utiliza actualmente». El aviso indica que, en general, no es necesario cambiar de versión, pero que puede serlo para PHP 5.x y 7.x. El administrador de archivos y el webmail están suspendidos temporalmente como precaución10/22【重要】PHPの脆弱性への弊社対応について
CORESERVER(V2)«Hemos completado nuestra respuesta a la vulnerabilidad para todas las versiones de PHP que ofrecemos»; «no se requiere ninguna acción, como cambiar la versión de PHP, por parte del cliente». El mantenimiento se realizó del 10/22 0:00 al 11:13 y se declara completadoPublicado 10/21 (completado 10/22)PHP脆弱性の対応(CORESERVER V2)【完了】
XREA«Hemos completado nuestra respuesta a la vulnerabilidad para PHP 7.4 y posteriores (7.4 / 8.0 / 8.1 / 8.2 / 8.3 / 8.4 / 8.5)». Los usuarios de estas versiones no necesitan cambiar de versión. El aviso no dice nada sobre las versiones inferiores a 7.4Publicado 10/21 (completado 10/22 0:50)PHP脆弱性の対応(XREA)【完了】
バリューサーバー«Hemos completado nuestra respuesta a la vulnerabilidad para PHP 7.4 y posteriores». El aviso indica que los usuarios de estas versiones no necesitan cambiar de versiónPublicado 10/21 (completado 10/22 0:50)PHP脆弱性の対応(VALUESERVER)【完了】
ABLENET«En relación con las dos vulnerabilidades identificadas en PHP, hemos llevado a cabo las actualizaciones de seguridad iniciales en nuestro entorno de servidores de alquiler». El aviso no indica qué versiones abarca ni si los usuarios deben realizar alguna acción10/22 13:04PHPの脆弱性に関するセキュリティアップデートの対応について
WebARENA(レンタルサーバー)A fecha de 10/22, no encontré ningún aviso oficial (consulta con el soporte)-WebARENA お知らせ(2026年)

Cuando no pude encontrar o abrir un aviso oficial, la tabla indica «no se pudo confirmar» o «no se encontró». La ausencia de información no significa que el proveedor no haya respondido. Consulta directamente los anuncios y el soporte de tu proveedor.

Mitigaciones mientras no puedas actualizar de inmediato

El aviso de PHP enumera ajustes que reducen la superficie de ataque hasta que puedas actualizar. Sin embargo, el propio aviso afirma expresamente que «no te hacen estar seguro». Los principales son:

  • Para CVE-2026-109619: establece session.upload_progress.enabled=0 en php.ini, en el pool de FPM o en la configuración del servidor, y reinicia todos los workers (ini_set() y el .user.ini de FPM no funcionan para esto). En PHP 8.5, establece también fatal_error_backtraces=0.
  • Para CVE-2026-109618: establece memory_limit=-1 de forma que la aplicación no pueda sobrescribirlo y reduce post_max_size (8M si no hay subidas de archivos, 32M si las hay). No uses RLIMIT_AS / RLIMIT_DATA como sustituto.

El NCSC del Reino Unido recomienda considerar desconectar cualquier sistema que no se pueda actualizar ni mitigar de inmediato, y comprobar si hay indicios de compromiso antes de actualizar o aplicar mitigaciones.

Fuentes (consultadas el 2026-10-22)

Preguntas frecuentes

Si php -v muestra una versión corregida, ¿estoy protegido frente a php2shell (CVE-2026-109618 / 109619)?

No necesariamente. php -v solo informa de la versión del PHP de CLI. PHP-FPM o el mod_php de Apache, que atienden las peticiones web, pueden ser un binario distinto y un paquete distinto. Comprueba la versión de FPM con php-fpm8.3 -v (php-fpm -v en sistemas de la familia RHEL). También puedes abrir desde la web un archivo temporal que muestre PHP_VERSION y PHP_SAPI, y borrarlo en cuanto lo hayas comprobado. Si no has reiniciado FPM o Apache tras actualizar, es posible que sigan ejecutando el código antiguo.

Si uso php:8.3-fpm de Docker, ¿está corregido php2shell?

A fecha de 2026-10-22, php:8.3-fpm en Docker Hub se ha actualizado a PHP 8.3.36. Sin embargo, tu imagen local sigue siendo antigua hasta que vuelvas a hacer pull, y los contenedores en ejecución siguen usando la imagen antigua hasta que se recreen. Ejecuta docker compose pull y docker compose up -d (o docker compose build --pull si construyes tu propia imagen). Después ejecuta php -r 'echo PHP_VERSION;' dentro del contenedor y confirma que es 8.3.36 o posterior. Las etiquetas fijas como 8.3.30 siguen siendo antiguas hasta que cambies tú el número.

Ubuntu y RHEL siguen mostrando PHP 8.3.6 o 8.0.30. ¿Les afecta php2shell?

No se puede saber solo por el número de versión. Ubuntu y RHEL hacen backport de las correcciones a versiones antiguas, de modo que un paquete puede estar corregido aunque su número siga siendo antiguo. A fecha de 2026-10-22, la corrección está en php8.3 8.3.6-0ubuntu0.24.04.13 en Ubuntu 24.04 y en php 8.0.30-8.el9_8.1 en RHEL 9. Compara la versión del paquete instalado (apt-cache policy o rpm -q) con la versión corregida que figura en el tracker de seguridad de tu distribución. También puedes comprobarlo con pro fix CVE-2026-109618 en Ubuntu, o con dnf updateinfo list --cve CVE-2026-109618 en sistemas de la familia RHEL.