
Corrección no oficial para CVE-2026-109618 / CVE-2026-109619 (php2shell) para los paquetes de PHP 5.4 / 5.3 al final de su vida útil de RHEL, CentOS y Oracle Linux 7 / 6
Corrección no oficial para CVE-2026-109618 y CVE-2026-109619 ("php2shell") para los paquetes PHP al final de su vida útil
de Enterprise Linux 6 y 7: php-5.3.3 (RHEL / CentOS / Oracle Linux 6) y php-5.4.16
(RHEL / CentOS / Oracle Linux / Scientific Linux 7).
PHP corrigió ambas vulnerabilidades el 21 de octubre de 2026 en 8.2.35, 8.3.36, 8.4.27 y 8.5.12, y publicó backports del código fuente para 7.4, 8.0 y 8.1. No se publicó nada para PHP 5, y los proveedores de EL6 / EL7 no han publicado una corrección. Si tiene que mantener en funcionamiento un sistema de este tipo, este proyecto le ofrece paquetes del proveedor recompilados con un port de la corrección mínima oficial.
Esta no es una corrección oficial de PHP, Red Hat ni Oracle. Reduce el riesgo hasta que pueda pasar a una versión de PHP con soporte — hágalo lo antes posible. En EL8 / EL9 / EL10, instale las actualizaciones de su proveedor en su lugar (por ejemplo ELSA/RHSA-2026:87080, 87151, 87079).
php-5.4.16 / php-5.3.3, que carecen de las correcciones de seguridad posteriores del proveedor en el mismo código
(por ejemplo CVE-2015-4024 en el análisis de cabeceras multipart).| Distribución | Paquete del proveedor | Paquete corregido de este proyecto |
|---|---|---|
| RHEL / CentOS / Oracle Linux / Scientific Linux 7 | php-5.4.16-48.el7 | php-5.4.16-48.el7.php2shell.1 |
| RHEL / CentOS / Oracle Linux 6 | php-5.3.3-50.el6_10 | php-5.3.3-50.el6_10.php2shell.1 |
El sufijo de la versión se ordena por encima del paquete del proveedor, y por debajo de cualquier errata futura del proveedor
(por ejemplo 48.el7_9.1), de modo que una corrección oficial, si alguna vez aparece, reemplaza esta con una actualización normal.
Probablemente menos que en PHP 7 y 8, pero todavía no hay una respuesta definitiva:
php de RHEL 6 / 7 como no afectados por CVE-2026-109619 ("vulnerable code not present")
y enumera CVE-2026-109618 como en investigación
(CSAF VEX).Este proyecto aplica la mitigación oficial de todos modos: elimina la ruta de error insegura en sí misma, no solo la forma conocida de alcanzarla.
Desde el repositorio yum firmado en GitHub Pages:
# EL7
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el7.repo
# EL6
curl -o /etc/yum.repos.d/php2shell-eol-backport.repo \
https://alvm.github.io/php2shell-eol-backport/php2shell-eol-backport-el6.repo
yum update 'php*' # confirm the signing key: fingerprint under "Signing key" below
service httpd restart # and php-fpm, if you use it
El repositorio contiene únicamente los paquetes PHP de este proyecto, y tanto los paquetes como los metadatos del repositorio están firmados (gpgcheck=1, repo_gpgcheck=1). Los RPM y los RPM de código fuente también se adjuntan a cada release, con un SHA256SUMS firmado; instálelos con yum localinstall.
./tools/check-patched.sh
Enumera cada paquete PHP 5 instalado como FIXED o VULNERABLE, verifica que la CLI de PHP ejecute el
código corregido y advierte si httpd o php-fpm se iniciaron antes de la actualización y siguen ejecutando el código antiguo.
La corrección sigue el backport mínimo oficial, que prioriza la seguridad sobre el manejo elegante de errores:
memory_limit (o el tamaño de una asignación
se desborda), PHP imprime Fatal error: ... en stderr (el registro de errores del servidor web) y el proceso finaliza de inmediato.
Apache / php-fpm inician un nuevo worker. Las funciones de apagado no se ejecutan y los archivos temporales de las cargas de esa
solicitud no se eliminan — tmpwatch (EL6) y systemd-tmpfiles (EL7) los limpian de /tmp con el tiempo.Content-Disposition y Content-Type de cada parte
(las únicas que usa PHP), y la nueva directiva de php.ini max_multipart_body_parts limita el número de
partes (por defecto -1 = max_input_vars + max_file_uploads).zend_mm_safe_error_ex) y no cambia ninguna API o ABI existente, por lo que
las extensiones compiladas para el paquete del proveedor siguen funcionando.Esta es una mitigación mínima de las rutas de ataque publicadas, no una actualización de seguridad completa de PHP 5.
Compilado a partir de los RPM de código fuente del proveedor (SHA-256 fijado en build/build.sh); el cambio en el spec es de 8 líneas
(spec/*/php.spec.diff).
La suite de pruebas de PHP (make test, ejecutada durante la compilación del RPM) se comparó con una recompilación sin modificar del
mismo paquete del proveedor. Las únicas fallas nuevas son esperadas:
las pruebas de progreso de carga de sesión (función deshabilitada) y tests/lang/bug45392.phpt (el mensaje de error fatal
ahora comienza con una línea vacía, como en el parche oficial de 7.4).
| pruebas | fallidas: proveedor | fallidas: parcheado | |
|---|---|---|---|
| EL7, PHP 5.4.16 | 12373 | 14 | 23 (8 progreso de carga + bug45392) |
| EL6, PHP 5.3.3 | 11213 | 55 | 56 (bug45392) |
Los recuentos exactos varían ligeramente entre entornos de compilación: en los runners de GitHub también fallan dos pruebas de propietario de archivos de SPL
(DirectoryIterator_getOwner/getGroup_basic), y time_sleep_until_basic es sensible a los tiempos.
Ninguna de ellas toca código modificado por el parche.
El parche de PHP 5.4 se comparó con un port independiente de la misma corrección para php-5.4.16 de Amazon Linux 2:
los cambios principales son idénticos. Las diferencias se enumeran en docs/ALTERNATIVES.md.
No se escribió ni se utilizó código de exploit. Revise usted mismo el parche contra el commit upstream.