PHP2Shell: medidas de seguridad en servidores empresariales
La respuesta a PHP2Shell empieza por actualizar y reiniciar PHP en el servicio web en producción. Si se sospecha una intrusión, primero hay que conservar las pruebas. Incluso después de aplicar el parche, es necesario revisar los registros y cambiar las credenciales.
- Comprueba el uso de PHP en los servidores en producción y los productos que lo llevan integrado.
- Si sospechas una intrusión, aísla el servidor y conserva las pruebas antes de reiniciarlo.
- Instala una versión corregida o aplica las medidas temporales oficiales hasta la actualización.
- Reinicia los servicios que ejecutan PHP y comprueba que el parche se haya aplicado en el servicio web en producción.
- Revisa los registros anteriores y cambia las credenciales de los servidores expuestos.
La respuesta a PHP2Shell comienza por comprobar dónde se usa PHP y aplicar las versiones corregidas. Después de actualizar, reinicie los servicios que lo ejecutan. Si sospecha de una intrusión, conserve las pruebas antes de reiniciar. Incluso después de aplicar el parche, es necesario revisar los registros y cambiar las credenciales.
Las versiones y la configuración se basan en el aviso de KISA del 22 de octubre de 2026 y en el aviso adicional de PHP del 23 de octubre.
¿Qué tipo de vulnerabilidad es PHP2Shell?
PHP2Shell es una vulnerabilidad de PHP que permite ejecutar código en el servidor sin autenticación. Se trata de un problema de gestión de memoria durante el procesamiento de solicitudes por el servidor web. El éxito del ataque depende del entorno de ejecución y de la configuración.
| Categoría | Identificador | Naturaleza del problema |
|---|---|---|
| Problema en el tratamiento de la falta de memoria | CVE-2026-109618 | Procesamiento de datos internos incompletos en situaciones de falta de memoria |
| Problema de estado residual entre solicitudes | CVE-2026-109619 | Uso, en solicitudes posteriores, de un estado que apunta a memoria liberada |
KISA indica que ambas vulnerabilidades tienen una gravedad de 9.2 puntos en CVSS. Si el ataque tiene éxito, es posible instalar una webshell o filtrar información de clientes. Una webshell es un archivo que se usa de forma maliciosa para controlar un servidor a distancia. El ataque también puede derivar en la alteración del sitio web y la intrusión en la red interna.
KISA informó de filtraciones de información e intentos de ataque antes de la distribución del parche. Los investigadores publicaron el proceso de descubrimiento de las vulnerabilidades con ayuda de IA. El problema está en el propio PHP y no se limita a un producto concreto para sitios web. Pautas de respuesta de KISA para empresas, Explicación de PHP2Shell de los investigadores
Orden de actuación según la situación
El orden de actualización y conservación de pruebas cambia según haya sospechas de intrusión. En las tareas habituales de aplicación de parches, se hacen pruebas antes de actualizar y reiniciar. Si sospecha de una intrusión en un servidor, aíslelo primero.
| Estado actual | Primera medida | Medida posterior |
|---|---|---|
| Servidor expuesto a Internet sin indicios de intrusión | Revisar la compatibilidad y aplicar la versión corregida | Reiniciar, comprobar la versión que se ejecuta y revisar los registros |
| Detección de una webshell o de conexiones sospechosas | Aislar de la red y notificar el incidente | Conservar las pruebas y después tomar medidas de recuperación |
| Servidor que no se puede actualizar de inmediato | Aplicar la configuración temporal oficial y limitar las solicitudes antes de que lleguen a PHP | Establecer un calendario de aplicación del parche y aplicarlo |
| Servidor en el que tampoco se pueden aplicar medidas temporales | Valorar el bloqueo del acceso externo o la suspensión temporal | Decidir si se reanuda el servicio después de aplicar el parche |
| Entorno gestionado por un proveedor de alojamiento o un fabricante | Confirmar con la empresa responsable si se han aplicado las medidas | Obtener pruebas de que los cambios están activos en el entorno de ejecución |
El reinicio después de actualizar sirve para ejecutar el código corregido. Durante la respuesta a un incidente, el reinicio se pospone para conservar las pruebas. Aunque se trate del mismo servidor, si hay sospechas de intrusión, siga este último orden.
Cómo comprobar dónde se usa PHP
Revise tanto el inventario de activos como los servidores que están en funcionamiento. Si solo revisa el sitio web principal, puede pasar por alto servidores que han quedado fuera de la gestión. También debe comprobar los equipos y contenedores que incluyen PHP.
- Haga una lista de los sitios web y sistemas expuestos a Internet.
- Revise los sitios desarrollados por terceros y los sitios antiguos.
- Revise los servidores de eventos y de pruebas, y las páginas de administración.
- Compruebe si las interfaces de administración de los equipos y las soluciones incluyen PHP.
- Revise las imágenes de contenedores y los contenedores en ejecución.
- Anote la versión de PHP y la persona responsable de la gestión de cada entorno.
Si usa un servicio de alojamiento, pida al proveedor que confirme si ha aplicado el parche. Para el PHP incluido en equipos, compruebe las actualizaciones del fabricante. Revise también los sistemas internos, pero actúe primero sobre los servidores expuestos a Internet.
Versiones corregidas de PHP y criterios de fin de soporte
La versión corregida de la rama 8.5 indicada en el aviso oficial de PHP es 8.5.12. El texto original de KISA indica la misma versión. Esto no significa que haya que esperar a 8.5.13 para aplicar el parche.
| Rama utilizada | Versión que corrige ambas vulnerabilidades | Criterio de actuación |
|---|---|---|
| PHP 8.5 | 8.5.13 o posterior | Comprobar la última versión de seguridad de esta rama |
| PHP 8.4 | 8.4.27 o posterior | Comprobar la última versión de seguridad de esta rama |
| PHP 8.3 | 8.3.36 o posterior | Comprobar la última versión de seguridad de esta rama |
| PHP 8.2 | 8.2.35 o posterior | Preparar la migración a una rama superior junto con la aplicación del parche |
| PHP 8.1 o anterior | Soporte de seguridad ordinario finalizado | Migrar a una rama con soporte o comprobar los parches del proveedor |
La tabla se basa en las versiones corregidas anunciadas el 21 de octubre de 2026. Los paquetes de las distribuciones pueden mantener el mismo número de versión visible. En ese caso, compruebe en el historial de cambios si se han corregido ambos CVE. Aviso de versiones de seguridad de PHP
El soporte de seguridad de PHP 8.2 finaliza el 31 de diciembre de 2026. KISA recomienda migrar a PHP 8.3 o posterior. Antes de migrar, pruebe la compatibilidad de las aplicaciones. Calendario de soporte de PHP
El soporte de seguridad ordinario de PHP 8.1 y versiones anteriores ya ha terminado. Los parches de las distribuciones o de los proveedores de soporte a largo plazo deben comprobarse por separado. Los parches del código fuente para versiones antiguas publicados en esta ocasión tampoco significan que se reanude el soporte ordinario.
Cómo actualizar y reiniciar
Después de sustituir los archivos de instalación, es necesario reiniciar los servicios que ejecutan PHP. Los procesos existentes pueden seguir ejecutando el código que permanece en memoria. Si sospecha de una intrusión, conserve las pruebas antes de hacer las tareas siguientes.
- Revise el efecto del parche sobre las funciones existentes.
- Compruebe la compatibilidad del servicio en un entorno de pruebas.
- Aplique los paquetes corregidos, empezando por los servidores expuestos a Internet.
- Reinicie todos los servicios que ejecutan PHP.
- En entornos de contenedores, vuelva a desplegarlos con la imagen corregida.
- Compruebe que los cambios están activos en el PHP que procesa las solicitudes web reales.
Entre los servicios que deben reiniciarse están PHP-FPM y Apache mod_php. Revise también php-cgi, FrankenPHP y LiteSpeed. Si el servidor tiene varios entornos PHP, debe comprobar cada uno.
php -v muestra la versión de PHP que se ejecuta en la línea de comandos. Puede ser distinta de la que usa el servicio web. No dé por terminada la actualización basándose solo en la salida de la línea de comandos.
Criterios de configuración temporal antes de actualizar
Las medidas temporales sirven para reducir algunas vías de ataque. No resuelven todas las vulnerabilidades. Si no puede aplicar la configuración, valore bloquear el acceso externo.
¿Cómo se aplica la configuración de memory_limit?
La recomendación temporal oficial para esta vulnerabilidad es memory_limit=-1. Este valor elimina el límite de uso de memoria del propio PHP. No lo considere una configuración de funcionamiento habitual.
Eliminar el límite reduce determinadas vías que provocan falta de memoria. Esta configuración no impide que se produzcan fallos reales de asignación de memoria. También debe valorar límites de tamaño de las solicitudes y medidas de gestión de recursos. Aviso sobre la vulnerabilidad de falta de memoria de PHP
| Parámetro | Medida temporal oficial | Qué comprobar al aplicarla |
|---|---|---|
memory_limit |
Establecer en -1
|
Aplicar la configuración de administrador para impedir que la aplicación la cambie |
session.upload_progress.enabled |
Establecer en 0
|
Usar una ubicación de configuración que se aplique antes del procesamiento de las solicitudes |
post_max_size |
Ejemplo de 8M si no se necesitan cargas de archivos |
Revisar tanto los requisitos reales del servicio como los límites previos a PHP |
upload_max_filesize |
Establecer un valor menor que post_max_size
|
Comprobar el efecto sobre la función de carga de archivos |
fatal_error_backtraces |
Establecer en 0 en PHP 8.5 |
No aplicarlo de forma general a otras ramas |
Los valores de la tabla se basan en los avisos oficiales de respuesta de octubre de 2026. 8M es un ejemplo propuesto para servicios que no necesitan cargas de archivos. No es un criterio para aplicar el mismo tamaño a todos los servicios.
- Limite el tamaño de las solicitudes en el cortafuegos de aplicaciones web, el servidor web y el proxy.
- Compruebe que los límites también se aplican a las solicitudes sin información de tamaño.
- Si no se necesitan cargas de archivos, bloquee las solicitudes multipart antes de que lleguen a PHP.
- Revise las reglas de bloqueo más recientes del cortafuegos de aplicaciones web.
- Aplique la configuración en
php.ini, en el pool de PHP-FPM u otras ubicaciones. - Compruebe si es necesario conservar pruebas y después reinicie los procesos PHP.
No aplique la configuración temporal solo con ini_set(). Las opciones necesarias antes de procesar las solicitudes podrían aplicarse demasiado tarde. Tampoco espere que .user.ini de PHP-FPM cumpla esa función. Medidas temporales oficiales de PHP
Qué comprobar en el aviso adicional del 23 de octubre
En el aviso adicional, PHP recomendó desactivar la función de progreso de carga. El aviso se refiere a otra vía de ejecución que persiste con algunas combinaciones de configuración. Si la función ya está desactivada, se indica que debe mantenerse así hasta la siguiente versión ordinaria de corrección de errores.
Entre las condiciones correspondientes está el cambio del método de serialización de sesiones durante la ejecución. Estas condiciones no se dan en todas las instalaciones de PHP. Consulte el aviso adicional para decidir si debe restaurar la configuración después de aplicar el parche. (Valor comprobado: se recomienda mantener session.upload_progress.enabled=0 hasta la siguiente versión ordinaria de corrección de errores · Fuente: php.net · Comprobado el 2026-10-23) Aviso adicional de PHP Session upload progress
Cómo revisar los registros y cambiar las credenciales
KISA recomienda revisar, como mínimo, los registros desde el 20 de octubre de 2026. Si es posible, revise también los registros anteriores. El parche no revierte las intrusiones ni las filtraciones de información que ya se hayan producido.
| Elemento que revisar | Indicios que buscar |
|---|---|
| Registros del servidor web | Errores HTTP 500 repetidos |
| Registros de ejecución de PHP | Terminaciones anómalas y segfault |
| Carpetas web, de cargas y temporales | Archivos PHP nuevos o modificados |
| Registros de ejecución de procesos | Ejecución de sh, bash y herramientas de descarga por el servidor web |
| Conexiones de red | Indicios de nuevas conexiones a direcciones externas desconocidas |
| Sitio web y páginas de administración | Scripts externos añadidos sin autorización |
La presencia de errores no basta para confirmar una intrusión. Del mismo modo, la ausencia de registros anómalos tampoco permite confirmar que el sistema sea seguro. KISA indica lo siguiente:
Aunque no haya anomalías en los registros, la seguridad no está garantizada, por lo que deben hacerse tanto la actualización como el cambio de credenciales.
KISA, «Pautas de respuesta de seguridad para empresas ante las vulnerabilidades de PHP (PHP2Shell)»
Se recomienda cambiar las credenciales de los servidores que estaban expuestos a Internet antes de aplicar el parche. En los servidores donde se hayan encontrado indicios de intrusión, es imprescindible cambiarlas. Esto incluye las contraseñas de las bases de datos y de los administradores. Revise también la posible exposición de claves de API y tokens de acceso.
En los servicios conectados a bases de datos con información personal, revise también los registros de esas bases de datos. Es necesario buscar indicios de consultas masivas y extracción de datos. Limite también el acceso directo a phpMyAdmin desde Internet. Reduzca los permisos de base de datos de la cuenta del servicio web a lo estrictamente necesario. Aviso de medidas preventivas de 개인정보보호위원회
Orden de actuación ante una sospecha de intrusión
Si sospecha de una intrusión, no apague el servidor ni lo reinicie de inmediato. El reinicio puede borrar los rastros del ataque que quedan en memoria. Aísle el servidor de la red y después recopile las pruebas.
- Bloquee en la red el acceso externo al servidor.
- Las empresas en Corea deben notificar el incidente desde el menú de notificación de incidentes de seguridad de 보호나라.
- Conserve los registros y la lista de programas en ejecución.
- Conserve también la información de las conexiones de red actuales.
- Después de recopilar las pruebas, actualice y reinicie.
- Elimine las webshells y cambie las credenciales.
El canal de consulta en Corea es KISA 118. La ruta del menú es 보호나라 > Notificación de incidentes de seguridad > Enviar notificación. Si opera en el extranjero, consulte el canal de notificación de la región correspondiente.
Comparación de errores habituales
Para confirmar que se ha aplicado el parche, hay que comprobar también el estado de ejecución y el historial de cambios. El mensaje de instalación completada no basta. Incluya las siguientes comprobaciones en su lista.
| Conclusión habitual | Qué debe comprobarse |
|---|---|
Si cambia php -v, ya está todo hecho |
Comprobar el PHP que usa realmente el servicio web |
| Basta con instalar el paquete | Confirmar el reinicio de los servicios que ejecutan PHP |
| Si el número de versión no cambia, no se han tomado medidas | Comprobar en el historial de cambios de la distribución si se han corregido los CVE |
| Si hay un cortafuegos de aplicaciones web, se puede omitir el parche | Revisar las reglas más recientes y actualizar PHP |
| Si los registros están limpios, no ha habido filtraciones | Revisar también la posible exposición de credenciales |
| En los sitios externalizados, el proveedor se encarga de todo | Pedir pruebas de la aplicación de las medidas para cada servicio |
No ejecute en servidores de producción código de prueba encontrado en Internet. KISA advierte de PoC falsas que contienen código malicioso. Una PoC es un código de prueba que demuestra la posibilidad de explotar una vulnerabilidad. Para comprobar si un sistema es vulnerable, empiece por revisar la versión y el historial de parches.
Lista de comprobación del cierre de medidas en entornos externalizados o de alojamiento
Conviene que el informe de finalización de las medidas incluya pruebas de comprobación para cada servicio. La tabla siguiente agrupa las pautas de respuesta de KISA en puntos de comprobación operativa. No es un formulario oficial de presentación.
| Punto de comprobación | Qué pedir al proveedor o a la persona responsable |
|---|---|
| Posibles elementos sin revisar | Lista de revisión de sitios web, páginas de administración y servidores de pruebas |
| Corrección de las vulnerabilidades | Versión aplicada o historial de cambios del paquete que mencione ambos CVE |
| Estado de ejecución | Registros del reinicio del servicio o del nuevo despliegue de contenedores |
| Aplicación efectiva | Entorno de ejecución de PHP comprobado en el servicio web |
| Revisión de intrusiones | Periodo de los registros revisados y hallazgos |
| Credenciales | Credenciales que deben cambiarse y estado del cambio |
| Tareas pendientes | Servidores que solo tienen medidas temporales y plan de aplicación posterior del parche |
Por ejemplo, supongamos que el proveedor solo ha informado de que la instalación del paquete ha terminado. En ese caso, pida los resultados de la comprobación del reinicio y del entorno de ejecución web. La revisión de registros y el cambio de credenciales pueden comprobarse como puntos separados.
FAQ
¿Se puede bloquear PHP2Shell cambiando la contraseña de inicio de sesión?
Puede explotarse sin iniciar sesión, por lo que cambiar la contraseña no basta para resolverlo. Es necesario aplicar una actualización de seguridad de PHP. Cambiar las credenciales es una medida aparte para responder a una posible filtración.
En PHP 8.5, ¿hay que esperar a la versión 8.5.13?
Los avisos originales de PHP y KISA indican que la versión que corrige ambas vulnerabilidades es la 8.5.13. Esto no significa que haya que esperar a la 8.5.13. Al aplicar la actualización, compruebe también cuál es la última versión oficial de esa rama.
¿No hace falta hacer comprobaciones si se usa PHP-FPM?
PHP-FPM también debe revisarse. Las condiciones del ataque pueden variar según el modo de ejecución. No determine si un entorno es seguro solo por su nombre.
¿Las medidas están completas si el resultado de php -v muestra una versión corregida?
El PHP de la línea de comandos puede ser distinto del PHP del servicio web. Compruebe el entorno que procesa las solicitudes web reales. También debe comprobar si se ha reiniciado el servicio en ejecución.
¿Ha fallado el parche si el número de versión no cambia después de aplicarlo?
Los paquetes de la distribución o del fabricante pueden incorporar las correcciones a la versión existente. Compruebe en el historial de cambios del paquete si se han incluido las correcciones de ambos CVE.
¿Está prohibida la configuración memory_limit=-1 en la respuesta a estas vulnerabilidades?
La recomendación provisional oficial para estas vulnerabilidades incluye esa configuración. Debe distinguirse de las recomendaciones generales de funcionamiento. Revise también los límites de solicitudes y las medidas de gestión de recursos.
¿También están afectados los sitios que no permiten subir archivos?
No se puede descartar que un sitio esté afectado solo porque no tenga una función de subida de archivos. Como se trata de vulnerabilidades del propio PHP, compruebe la versión utilizada y el estado de los parches. Bloquear las solicitudes multipart innecesarias es una medida provisional.
¿Se puede seguir usando PHP 8.1 o una versión anterior si hay un parche del proveedor?
Hay que comprobar los parches del proveedor al margen del fin del soporte ordinario. Aunque aplique ese parche de forma provisional, prepare un plan para migrar a una versión con soporte.
¿Se pueden mantener las credenciales si no hay anomalías en los registros?
Los registros por sí solos no permiten determinar que no haya habido una filtración de información. KISA recomienda cambiar las credenciales de los servidores que estuvieron expuestos a Internet antes de aplicar el parche. Si hay indicios de intrusión, debe cambiarlas sin falta.
Si se sospecha una intrusión, ¿hay que actualizar primero?
Primero, aísle el sistema de la red. Notifique el incidente y recopile las pruebas antes de actualizar. Un reinicio puede borrar los rastros del ataque que queden en la memoria.
¿Qué deben comprobar los usuarios de servicios de alojamiento?
Solicite al proveedor pruebas de la aplicación de los parches en cada servicio. Pida también los resultados de la comprobación del reinicio y del entorno real de ejecución web. Compruebe por separado si se han revisado los registros y cambiado las credenciales.
¿Se puede volver a activar la configuración del progreso de subida después de aplicar el parche?
Consulte el aviso adicional de PHP del 23 de octubre de 2026. Se recomienda mantener la función desactivada debido a problemas adicionales en algunas combinaciones de configuración. Decida si restablecer la configuración después de comprobar las correcciones posteriores.
Sources
- KISA 보호나라: pautas de respuesta de seguridad para empresas ante la vulnerabilidad de seguridad de PHP (PHP2Shell), 22 de octubre de 2026
- Aviso de PHP de 2026: actualización de seguridad del 21 de octubre e información adicional sobre Session upload progress del 23 de octubre
- Aviso de seguridad de PHP: RCE por corrupción debida a OOM
- Aviso de seguridad de PHP: RCE por un estado global obsoleto
- PHP Supported Versions: período de soporte oficial
- PHP2Shell: explicación de los investigadores sobre la vulnerabilidad y el alcance de su impacto
- 개인정보보호위원회: llamamiento a tomar medidas para prevenir la filtración de datos personales ante la vulnerabilidad de seguridad de PHP, 22 de octubre de 2026
Images

