php2shell: CVE-2026-109618 y CVE-2026-109619 en PHP y qué hacer
php2shell es el nombre de dos fallos críticos de ejecución remota de código en el propio PHP, CVE-2026-109618 y CVE-2026-109619, con una puntuación de 9,2 en CVSS v4.0. Los detalles se filtraron el 20 de octubre de 2026, un día antes de que terminara el embargo, y el equipo de PHP adelantó su versión de seguridad al 21 de octubre de 2026 a las 14:00 UTC.
Actualiza PHP en cuanto tu proveedor de hosting o tu distribución publique la corrección. Hasta entonces, un único ajuste de PHP cierra la vía de ataque conocida, y ReportedIP Hive 3.0.4 lo aplica por ti cuando “Extended Protection” está activada.
¿Qué es php2shell?
php2shell agrupa dos errores en el núcleo de PHP, no en WordPress, en un plugin ni en un tema. En su aviso 2026-018, CERT-EU los considera posiblemente explotables sin autenticación. Según los informes, están afectadas desde PHP 5 hasta PHP 8. Solo se esperan correcciones oficiales para las ramas con soporte, es decir, PHP 8.2 y posteriores.
El 21 de octubre de 2026 un investigador de seguridad afirmó haber reproducido ambos fallos. Según él, se trata de dos errores de tipo use-after-free en el heap dentro del manejador de session.upload_progress, la función php_session_rfc1867_callback de ext/session/session.c. El equipo de PHP aún no lo ha confirmado, y el aviso oficial llegará con la versión.
| Fecha (UTC) | Hecho |
|---|---|
| 20 de octubre de 2026, 15:20 | Aparece en Hacker News una publicación con detalles bajo embargo y se retira |
| 20 de octubre de 2026, 19:33 | El equipo de PHP anuncia la versión de seguridad con un día de antelación |
| 20 de octubre de 2026 | CERT-EU publica el aviso 2026-018 |
| 21 de octubre de 2026 | Un investigador informa de una reproducción funcional en el manejador del progreso de subida |
| 21 de octubre de 2026, 14:00 | Versión de seguridad de PHP prevista |
¿Por qué un cortafuegos de WordPress no puede frenar php2shell?
El progreso de subida de sesión (session upload progress) es una función de PHP que informa de cuánto ha avanzado la subida de un archivo. PHP la ejecuta mientras lee el cuerpo de una petición multipart, cuando llega un campo de formulario llamado PHP_SESSION_UPLOAD_PROGRESS junto con una cookie de sesión. Eso ocurre al arrancar la petición, antes de que PHP ejecute la primera línea de cualquier script.
Un cortafuegos en forma de plugin actúa después, incluso en su variante más temprana. La protección de Hive previa a WordPress se carga mediante auto_prepend_file, y PHP ejecuta ese archivo solo cuando ya ha procesado el cuerpo de la petición. Si el error está en el manejador del progreso de subida, el daño está hecho antes de que ningún código PHP pueda revisar la petición. Esto vale para cualquier plugin de seguridad, no solo para Hive.
Lo que sí puede hacer un plugin es cambiar un ajuste de PHP por directorio. session.upload_progress.enabled se puede definir en un archivo .user.ini o .htaccess, y PHP lee esos archivos antes de procesar el cuerpo. Con el ajuste desactivado, PHP se salta por completo el manejador del progreso de subida.
¿Qué cambia Hive 3.0.4?
Hive 3.0.4 añade una línea al bloque marcado que “Extended Protection” ya escribe para su protección. Ni el núcleo de WordPress, ni WooCommerce, ni los plugins de formularios habituales usan el progreso de subida, así que las subidas siguen funcionando igual que antes.
| Configuración del servidor | Archivo | Línea que añade Hive |
|---|---|---|
| PHP-FPM, CGI o LiteSpeed | .user.ini en la raíz de WordPress | session.upload_progress.enabled=Off |
| Apache con mod_php | .htaccess en la raíz de WordPress | php_flag session.upload_progress.enabled off |
| nginx sin detección de PHP-FPM | ninguno | Añade tú mismo la línea en php.ini |
Los sitios con “Extended Protection” incorporan la línea en menos de una hora después de que un administrador abra cualquier página del escritorio. Para aplicarla de inmediato, desactiva y vuelve a activar “Extended Protection” en la pestaña “Firewall” de la página “Protection”. Por defecto, PHP-FPM guarda en caché los archivos .user.ini hasta 5 minutos. Comprobamos el resultado en nuestro entorno de pruebas con Apache: ini_get() devolvía on antes de la actualización y off después.
En los sitios sin “Extended Protection” no cambia nada, porque Hive solo escribe estos archivos cuando tú lo autorizas. La documentación de Extended Protection explica en qué servidores Hive puede configurarse por sí solo.
¿Cómo desactivas tú mismo el progreso de subida de sesión?
El lugar más seguro es la configuración del servidor, porque cubre todos los sitios alojados en él. Añade esta línea al php.ini de cada versión de PHP que sirva sitios web, o al campo de ajustes PHP personalizados de tu panel de hosting:
session.upload_progress.enabled = Off
- Después recarga PHP-FPM, por ejemplo con
systemctl reload php8.3-fpm. - Comprueba el valor con
php-fpm8.3 -i | grep upload_progress. El comandophp -imuestra la configuración de la línea de comandos, no la que usa el servidor web. - Busca archivos de pool que vuelvan a poner el valor en on con
php_admin_value. - En un hosting compartido sin acceso a php.ini, pon la línea en un
.user.inien la raíz web.
El manual de PHP describe la función en su página sobre el progreso de subida de sesión. Nuestra empresa hermana CMS ADMINS la desactivó el 21 de octubre de 2026 en todos los servidores que gestiona, para cada versión instalada desde PHP 5.6 hasta 8.4, y mantiene un resumen de la filtración en alemán: php2shell en CMS ADMINS.
¿Qué hacer cuando salga el parche de PHP?
- Instala primero la versión de seguridad de PHP en todos los servidores expuestos a internet.
- Con PHP 8.1 o anterior, pide a tu proveedor o a tu distribución un backport, o pasa el sitio a PHP 8.2 o posterior.
- Mantén desactivado el progreso de subida hasta que el aviso confirme qué parte de PHP estaba afectada.
- Vigila los procesos de PHP que lancen shells,
curl,wgetopython. Ese patrón delata una explotación con éxito. - Si sospechas que el servidor está comprometido, desconéctalo de la red, conserva los registros del servidor web y de PHP y busca archivos PHP nuevos en la raíz web.
Los límites del plugin aparecen en la guía de Hive. Un fallo en el motor de PHP es uno de ellos: el plugin puede reducir la superficie de ataque, pero solo la actualización de PHP elimina el error.
Preguntas frecuentes
¿Desactivar el progreso de subida rompe las subidas de WordPress?
Desactivar el progreso de subida de sesión no rompe las subidas. El ajuste solo controla los datos de progreso que PHP escribe en la sesión durante una subida. WordPress muestra su propia barra de progreso en el navegador y no lee esos datos, así que las subidas de medios, las instalaciones de plugins y los adjuntos de formularios funcionan sin cambios.
¿Está seguro mi sitio si WordPress y todos los plugins están actualizados?
Tener WordPress al día no protege frente a php2shell, porque los fallos están en PHP, por debajo de WordPress. Lo que cuenta es la versión de PHP del servidor y si el progreso de subida está desactivado. La versión de PHP aparece en Herramientas, Salud del sitio, Información, en la sección Servidor.
¿Qué versión de Hive añade el ajuste?
ReportedIP Hive 3.0.4, publicada el 21 de octubre de 2026, añade el ajuste en los sitios que tienen activada “Extended Protection”. Forma parte del plugin gratuito de wordpress.org y no requiere ningún plan de pago. Los sitios sin “Extended Protection” necesitan la línea de php.ini de este artículo.
Sigue leyendo
Una vulnerabilidad anterior que abordó el cortafuegos de Hive: CVE-2026-19949 en All-in-One WP Migration. La línea de versiones actual empezó con Hive 3.0 en wordpress.org.
Protege tu sitio WordPress con datos de amenazas de la comunidad, inicio de sesión en dos pasos y un cortafuegos de dos capas.