Informe de corrección
Verificación de la corrección de PHP2Shell
Puntuación de salud
BienMejorableEn riesgo
Antes 48
Antes 31
Antes 58
Antes 38
Antes 92
Las puntuaciones resumen las comprobaciones de este informe, ponderadas con un 40 % de seguridad, un 25 % de copias de seguridad, un 20 % de actualizaciones y un 15 % de rendimiento. Describen el riesgo en el momento registrado y no constituyen una certificación.
1Resumen ejecutivo
El servidor web de producción ejecutaba PHP 8.3.35, versión afectada por las dos vulnerabilidades de PHP2Shell. Durante la ventana de mantenimiento acordada actualizamos PHP a 8.3.36, reiniciamos todos los procesos de trabajo de PHP-FPM y confirmamos que la aplicación ya atiende el tráfico con el entorno de ejecución corregido. Todas las comprobaciones funcionales acordadas se superaron y no se registraron errores nuevos.
La revisión también detectó, fuera del alcance acordado, un grupo de procesos con PHP 7.4 sin soporte, un reinicio del kernel pendiente y carencias en la cobertura de las copias de seguridad. No afectan a la corrección de PHP2Shell, pero conviene resolverlos. Cada uno figura con su prioridad en las recomendaciones.
- Estado de PHP2Shell
- Corregido
- Comprobaciones funcionales
- 8 de 8 superadas
- Tiempo de inactividad
- Ninguno observado
- Acciones de seguimiento
- 6, incluidas 2 de prioridad alta
2Alcance y metodología
Dentro del alcance
- Un servidor de producción,
web-01 - Grupo de procesos PHP-FPM
wwwque atiende la aplicación de la tienda - PHP CLI utilizado por las tareas programadas
- Comprobaciones acordadas de inicio de sesión, búsqueda, proceso de compra, formularios, carga de archivos y tareas programadas
Fuera del alcance
- Grupo de procesos PHP 7.4
legacy(notificado, sin cambios) - Componentes internos del servidor de base de datos y código de la aplicación
- Investigación de malware o de intrusiones
- Entornos de preproducción y desarrollo
Metodología
Inventario de solo lectura por SSH con una clave de validez limitada; origen de los paquetes contrastado con el repositorio del proveedor y el aviso de PHP; instantánea con arranque verificado antes de cualquier cambio; actualización aplicada mediante el gestor de paquetes del sistema; reinicio de los procesos de trabajo; comprobaciones funcionales con las cuentas de prueba del cliente. El acceso temporal se retiró a las 22:31.
3Inventario del servidor
Registrado al inicio de la ventana de trabajo, antes de cualquier cambio.
| Nombre de host | web-01.example-retail.test |
|---|---|
| Función | Servidor web y de aplicaciones de producción |
| Alojamiento | Servidor privado virtual, 4 vCPU, 8 GB de memoria |
| Sistema operativo | Ubuntu 24.04.3 LTS |
| Kernel en ejecución | 6.8.0-85-generic Kernel más reciente instalado, reinicio pendiente |
| Tiempo de actividad | 142 días |
| Disco | Volumen del sistema de 80 GB, 61 % ocupado |
| Servidor web | nginx 1.24.0 |
| Grupos de procesos PHP-FPM | www (PHP 8.3), legacy (PHP 7.4) |
| Base de datos | MySQL 8.0.43 en un host gestionado independiente |
| Origen de los paquetes PHP | ppa:ondrej/php |
| Actualizaciones de seguridad automáticas | Desactivadas |
| Sincronización horaria | Activa |
| Monitorización | Solo comprobación de disponibilidad; sin alertas de recursos ni de errores de la aplicación |
4Entornos de ejecución de PHP
Se identificaron todos los binarios y grupos de procesos de PHP del servidor, incluidos los que quedan fuera del alcance acordado.
| Entorno de ejecución | Uso | Antes | Después | Estado |
|---|---|---|---|---|
php8.3-fpm / www | Aplicación de la tienda | 8.3.35 | 8.3.36 | Corregido |
php8.3-cli | Tareas programadas | 8.3.35 | 8.3.36 | Corregido |
php7.4-fpm / legacy | Tienda archivada en /old-shop | 7.4.33 | 7.4.33 | Requiere acciones |
PHP 7.4 no tiene soporte desde noviembre de 2022 y no recibe correcciones de seguridad del proyecto original. La información de versiones no basta para descartar la exposición del grupo legacy; véase la recomendación R1.
Observaciones de configuración
expose_phpestá deshabilitado ydisplay_errorsestá desactivado en producción.- OPcache está habilitado con 128 MB de memoria, suficiente para la aplicación.
session.upload_progress.enabledestá activado, pero la aplicación no lo utiliza.- Cada grupo de procesos se ejecuta con su propio usuario del sistema y un socket independiente.
5Estado de las vulnerabilidades
| Aviso | Entorno afectado | Antes | Después | Pruebas |
|---|---|---|---|---|
CVE-2026-109618 | php8.3 | Afectado | Corregido | Registro de cambios del paquete y versión en ejecución |
CVE-2026-109619 | php8.3 | Afectado | Corregido | Registro de cambios del paquete y versión en ejecución |
CVE-2026-109618, CVE-2026-109619 | php7.4 | Sin evaluar | Sin evaluar | Fuera del alcance acordado |
Una corrección adaptada por el proveedor a una versión anterior puede tener un número de versión diferente. El informe real utiliza el aviso del proveedor correspondiente. Verificar correctamente la corrección no demuestra que un entorno nunca haya sufrido una intrusión.
6Copias de seguridad y recuperación
Las copias de seguridad se revisaron antes de cualquier cambio. La actualización solo pudo empezar una vez existía una instantánea verificada.
| Copia | Programación | Última correcta | Retención | Ubicación | Prueba de restauración |
|---|---|---|---|---|---|
| Volcado de la base de datos | Diaria, 03:15 | 2026-10-22 03:16 | 14 días | Externa, cifrada | Nunca |
| Archivos de la aplicación | Diaria, 03:40 | 2026-10-22 03:52 | 14 días | Mismo proveedor, volumen independiente | Nunca |
| Instantánea del servidor previa al cambio | Creada para este trabajo | 2026-10-22 21:04 | 7 días | Proveedor de alojamiento | Arranque verificado |
Hallazgos
- La copia de seguridad de archivos excluye
/var/www/shop/uploads, donde se almacenan unos 6.2 GB de documentos de clientes. - No consta ninguna prueba de restauración de las copias programadas. No se puede confiar en una copia de seguridad que nunca se ha restaurado para recuperar el servicio.
- Los volcados de la base de datos están cifrados y se almacenan en otro proveedor, lo que los protege si se pierde el servidor o la cuenta de alojamiento.
Plan de reversión de este cambio
Reinstalar los paquetes de PHP anteriores desde la caché local de paquetes y recargar PHP-FPM, o arrancar la instantánea previa al cambio. Tiempo estimado de recuperación: 15 minutos. No fue necesario revertir.
7Registro de cambios
| Hora | Acción | Resultado |
|---|---|---|
21:00 | Acceso abierto; registro del estado inicial de versiones, servicios y tiempos de respuesta | Completado |
21:04 | Instantánea del servidor previa al cambio creada y con arranque verificado | Completado |
21:12 | Comprobaciones funcionales iniciales realizadas | 8 de 8 superadas |
21:18 | Paquetes de PHP 8.3 actualizados de 8.3.35 a 8.3.36 | Completado |
21:20 | PHP-FPM reiniciado; no queda ningún proceso de trabajo de la versión anterior | Completado |
21:24 | Versión en ejecución confirmada a través del servidor web y la CLI | Completado |
21:31 | Comprobaciones funcionales posteriores al cambio realizadas | 8 de 8 superadas |
21:55 | Registros de errores y tiempos de respuesta supervisados durante 20 minutos | Sin errores nuevos |
22:31 | Clave de acceso temporal eliminada y sesión cerrada | Completado |
8Verificación posterior al cambio
| Comprobación | Metodología | Resultado |
|---|---|---|
| Versión de PHP que atiende las solicitudes web | Script de diagnóstico temporal, eliminado tras su uso | 8.3.36 |
| Procesos de trabajo de PHP-FPM | Lista de procesos y estado del servicio | Superada |
| Inicio de sesión de cliente | Cuenta de prueba del cliente | Superada |
| Inicio de sesión de administrador | Cuenta de prueba del cliente | Superada |
| Búsqueda de productos | Tres términos de búsqueda acordados con el cliente | Superada |
| Proceso de compra | Pedido de prueba en el modo de pruebas del proveedor de pagos | Superada |
| Formulario de contacto | Envío de prueba, recepción confirmada por el cliente | Superada |
| Carga de archivos | Documento de prueba cargado y descargado | Superada |
| Correo de restablecimiento de contraseña | Cuenta de prueba, correo recibido | Superada |
| Tareas programadas | Siguiente ejecución programada comprobada en los registros | Superada |
| Registro de errores | Comparación de los 30 minutos anteriores y posteriores al cambio | Sin errores nuevos |
| Tiempo de respuesta de la página de inicio | Mediana de 20 solicitudes | 182 ms → 176 ms |
9Hallazgos y recomendaciones
Por orden de prioridad. Ninguno de estos elementos bloquea la corrección de PHP2Shell.
| ID | Prioridad | Hallazgo | Recomendación |
|---|---|---|---|
R1 | Alta | El grupo de procesos PHP 7.4 no tiene soporte y puede estar expuesto. | Retirar la tienda archivada o restringirla a usuarios autenticados. Si debe seguir en línea, migrarla a una versión de PHP con soporte. Se presupuesta por separado. |
R2 | Alta | Hay un kernel más reciente instalado que no está en ejecución; el servidor lleva 142 días sin reiniciarse. | Programar un reinicio en la próxima ventana de mantenimiento y confirmar después el kernel en ejecución. |
R3 | Media | Hay 23 actualizaciones del sistema operativo pendientes, entre ellas OpenSSL y nginx. | Aplicarlas en una ventana planificada y activar las actualizaciones de seguridad automáticas. |
R4 | Media | Las copias de seguridad nunca se han sometido a una prueba de restauración y la copia de archivos excluye las cargas de los clientes. | Añadir el directorio de cargas a la copia de archivos y realizar cada trimestre una prueba de restauración documentada. |
R5 | Baja | El seguimiento del progreso de carga está activado, pero no se utiliza. | Desactivar session.upload_progress.enabled para reducir la superficie de ataque. |
R6 | Baja | La monitorización solo cubre la disponibilidad. | Añadir alertas de espacio en disco, saturación de PHP-FPM y errores de la aplicación. |
10Pruebas y entrega
- Identificadores del entorno y ventana de trabajo acordada
- Origen del paquete, versión completa y aviso aplicable del proveedor
- Referencia de la copia de seguridad, registro de cambios y pruebas del reinicio de procesos
- Comprobaciones funcionales acordadas, resultados y limitaciones
- Transcripción completa de los comandos y extractos del registro de cambios de los paquetes
11Limitaciones
El informe cubre el entorno y las comprobaciones acordados en el momento registrado. No es una certificación de seguridad, una garantía frente a vulnerabilidades futuras ni una conclusión de que no haya habido una intrusión anterior. La sospecha de una intrusión requiere una investigación independiente.