Daniel Muñoz
1
Pi
Programador
Verificado
Verificación en dos pasos activada
Verificado por Binance
¡Usuario popular!
Suscripción a IA
⚠️ PHP2Shell: qué hacer si tienes hosting compartido y tu proveedor no ha actualizado
PHP sacó el 21/10 parches de emergencia para dos vulnerabilidades críticas (CVE-2026-109618 y CVE-2026-109619), con puntaje 9.2/10. Permiten ejecutar código en el servidor sin estar logueado, y ya hay ataques activos.
Las versiones corregidas son: 8.5.12, 8.4.27, 8.3.36 y 8.2.35.
El detalle es que muchos hostings todavía no han compilado los paquetes, el repo de Ondřej está colapsado y los proveedores no responden tickets. Aquí les dejo qué pueden hacer mientras tanto y, sobre todo, qué tienen que exigirle a su proveedor.
🥇 Paso 1: revisa si ya tienes la versión parcheada disponible
Esto es lo primero, porque si existe, se acabó el problema.
Si tienes cPanel (Banahosting y la mayoría de los hostings latinos):
Si tienes Plesk: ve al dominio → PHP Settings y mira qué versiones te ofrece.
Si tienes DirectAdmin: Domain Setup / PHP Version Selector, lo mismo.
Los paquetes de CloudLinux (alt-php) y de cPanel (ea-php) suelen salir antes que los de Ondřej, así que vale la pena revisar varias veces en el día.
🥈 Paso 2: pon Cloudflare delante de tu sitio (si no lo tienes)
Cloudflare ya está detectando los ataques. Con tu dominio pasando por ahí, el tráfico malicioso se filtra antes de llegar a PHP. Revisa en el panel de Security → WAF si tienes activas las reglas administradas para estos CVE (en el plan gratuito puede variar, así que verifícalo).
Hoy, en hosting compartido, esto es lo más efectivo que puedes hacer por tu cuenta.
🥉 Paso 3: mitigaciones de configuración (aquí manda el proveedor)
En hosting compartido eso significa que la mitigación real la tiene que aplicar tu proveedor, no tú. Por eso los pasos 1 y 2 son la prioridad.
Lo que tiene que hacer el hosting (a nivel de servidor o pool):
y reiniciar todos los workers de PHP.
Texto para el ticket, por si tu hosting no responde:
¿Y lo que puedo hacer yo desde mi cuenta?
Poco, siendo honestos. Puedes dejar esto en tu .user.ini (o desde cPanel → MultiPHP INI Editor):
Si tu sitio necesita subir archivos pesados, usa post_max_size = 32M y deja upload_max_filesize un poco por debajo.
Pero tengan claro que, en PHP-FPM, esto no te protege de esta vulnerabilidad: se aplica tarde. Lo dejas como capa extra, no como solución.
No metas php_value / php_flag en el .htaccess si tu PHP corre como FPM/CGI. Te tumba el sitio con error 500. Para saber cómo corre, crea sapi.php con
Si tienes Plesk: en dominio → PHP Settings → "Additional configuration directives" puedes pegar las directivas del bloque del proveedor. Según cómo tenga configurado Plesk tu hosting, eso puede quedar a nivel de pool, pero confírmalo con soporte antes de darlo por mitigado.
🤔 ¿Por qué memory_limit = -1? ¿Eso no es peligroso?
Buena pregunta. Una de las vulnerabilidades se activa cuando el atacante hace que PHP llegue a su límite de memoria. Al quitar el límite se cierra esa vía, pero no todas: PHP deja claro que no es una mitigación completa.
Y tiene su propio riesgo: una sola petición podría comerse toda la RAM. Por eso solo tiene sentido si existe un límite de memoria externo por cuenta (LVE/cgroups en CloudLinux). No es algo para poner a ciegas, y por eso va en la lista de lo que tiene que aplicar el proveedor.
Cuando PHP esté actualizado, el memory_limit tiene que volver a un valor normal (256M, por ejemplo).
🧹 Paso 4: limpia tus .htaccess y .user.ini viejos (esto sí depende de ti)
Uno de los dos disparadores confirmados del ataque son los warnings que generan ajustes de PHP inválidos u obsoletos aplicados por petición. Muchos tenemos .htaccess heredados de hace años con directivas que ya no existen.
Revisa todas las carpetas, no solo la raíz (plugins, subdominios, carpetas viejas), y quita cosas como:
y cualquier otra directiva de PHP que no reconozcas o que sea de versiones antiguas.
✅ Paso 5: revisa tu configuración (sin confiarte)
Crea check.php en la raíz, ábrelo en el navegador y bórralo apenas lo veas:
Resumen rápido:
Si tu hosting tarda días en reaccionar a algo de 9.2 con ataques activos, eso también dice bastante de él.
Cualquier duda, me dejan su caso aquí abajo con la versión de PHP que les sale y les echo una mano. 🤝
PHP sacó el 21/10 parches de emergencia para dos vulnerabilidades críticas (CVE-2026-109618 y CVE-2026-109619), con puntaje 9.2/10. Permiten ejecutar código en el servidor sin estar logueado, y ya hay ataques activos.
Las versiones corregidas son: 8.5.12, 8.4.27, 8.3.36 y 8.2.35.
El detalle es que muchos hostings todavía no han compilado los paquetes, el repo de Ondřej está colapsado y los proveedores no responden tickets. Aquí les dejo qué pueden hacer mientras tanto y, sobre todo, qué tienen que exigirle a su proveedor.
Ojo, antes de empezar: la única solución completa es actualizar PHP a la versión corregida. Las mitigaciones temporales solo reducen la exposición, y en hosting compartido la mayoría de ellas solo las puede aplicar el proveedor, porque tienen que ir a nivel de servidor. Siendo honestos, aquí estamos bastante en manos del hosting.
🥇 Paso 1: revisa si ya tienes la versión parcheada disponible
Esto es lo primero, porque si existe, se acabó el problema.
Si tienes cPanel (Banahosting y la mayoría de los hostings latinos):
- Busca "Select PHP Version" o "Seleccionar versión de PHP" (CloudLinux), o "MultiPHP Manager".
- Fíjate si en la lista aparece la versión parcheada de tu rama (por ejemplo 8.3.36 si estás en 8.3).
- Si aparece, cámbiala y listo. Si no, sigue al paso 2.
Si tienes Plesk: ve al dominio → PHP Settings y mira qué versiones te ofrece.
Si tienes DirectAdmin: Domain Setup / PHP Version Selector, lo mismo.
Los paquetes de CloudLinux (alt-php) y de cPanel (ea-php) suelen salir antes que los de Ondřej, así que vale la pena revisar varias veces en el día.
🥈 Paso 2: pon Cloudflare delante de tu sitio (si no lo tienes)
Cloudflare ya está detectando los ataques. Con tu dominio pasando por ahí, el tráfico malicioso se filtra antes de llegar a PHP. Revisa en el panel de Security → WAF si tienes activas las reglas administradas para estos CVE (en el plan gratuito puede variar, así que verifícalo).
Hoy, en hosting compartido, esto es lo más efectivo que puedes hacer por tu cuenta.
🥉 Paso 3: mitigaciones de configuración (aquí manda el proveedor)
Importante: El advisory oficial de PHP aclara que session.upload_progress.enabled = 0 tiene que aplicarse antes de que PHP procese la petición, o sea, en el php.ini del servidor o en el pool de PHP-FPM, reiniciando los workers. En PHP-FPM no se debe confiar en .user.ini para esto.
En hosting compartido eso significa que la mitigación real la tiene que aplicar tu proveedor, no tú. Por eso los pasos 1 y 2 son la prioridad.
Lo que tiene que hacer el hosting (a nivel de servidor o pool):
Insertar CODE, HTML o PHP:
session.upload_progress.enabled = 0
memory_limit = -1 (con límite de memoria externo por cuenta: LVE/cgroups)
fatal_error_backtraces = 0 (solo PHP 8.5)
y reiniciar todos los workers de PHP.
Texto para el ticket, por si tu hosting no responde:
Insertar CODE, HTML o PHP:
Asunto: PHP2Shell (CVE-2026-109618 / CVE-2026-109619) - solicitud urgente
Mi cuenta sigue en PHP [VERSIÓN], sin el parche publicado el 21/10
(8.5.12 / 8.4.27 / 8.3.36 / 8.2.35).
Mientras compilan la versión corregida, solicito aplicar a nivel de
servidor o pool de FPM (no .user.ini) las mitigaciones del advisory
oficial de PHP:
- session.upload_progress.enabled = 0
- memory_limit = -1, con límite de memoria externo por cuenta
- fatal_error_backtraces = 0 (si es PHP 8.5)
y reiniciar los workers. Por favor indíquenme fecha estimada del parche.
¿Y lo que puedo hacer yo desde mi cuenta?
Poco, siendo honestos. Puedes dejar esto en tu .user.ini (o desde cPanel → MultiPHP INI Editor):
Insertar CODE, HTML o PHP:
session.upload_progress.enabled = 0
post_max_size = 8M
upload_max_filesize = 6M
Si tu sitio necesita subir archivos pesados, usa post_max_size = 32M y deja upload_max_filesize un poco por debajo.
Pero tengan claro que, en PHP-FPM, esto no te protege de esta vulnerabilidad: se aplica tarde. Lo dejas como capa extra, no como solución.
No metas php_value / php_flag en el .htaccess si tu PHP corre como FPM/CGI. Te tumba el sitio con error 500. Para saber cómo corre, crea sapi.php con
<?php echo php_sapi_name();, ábrelo y bórralo. Si sale fpm-fcgi, cgi-fcgi o litespeed, nada de php_value en .htaccess.Si tienes Plesk: en dominio → PHP Settings → "Additional configuration directives" puedes pegar las directivas del bloque del proveedor. Según cómo tenga configurado Plesk tu hosting, eso puede quedar a nivel de pool, pero confírmalo con soporte antes de darlo por mitigado.
🤔 ¿Por qué memory_limit = -1? ¿Eso no es peligroso?
Buena pregunta. Una de las vulnerabilidades se activa cuando el atacante hace que PHP llegue a su límite de memoria. Al quitar el límite se cierra esa vía, pero no todas: PHP deja claro que no es una mitigación completa.
Y tiene su propio riesgo: una sola petición podría comerse toda la RAM. Por eso solo tiene sentido si existe un límite de memoria externo por cuenta (LVE/cgroups en CloudLinux). No es algo para poner a ciegas, y por eso va en la lista de lo que tiene que aplicar el proveedor.
Cuando PHP esté actualizado, el memory_limit tiene que volver a un valor normal (256M, por ejemplo).
🧹 Paso 4: limpia tus .htaccess y .user.ini viejos (esto sí depende de ti)
Uno de los dos disparadores confirmados del ataque son los warnings que generan ajustes de PHP inválidos u obsoletos aplicados por petición. Muchos tenemos .htaccess heredados de hace años con directivas que ya no existen.
Revisa todas las carpetas, no solo la raíz (plugins, subdominios, carpetas viejas), y quita cosas como:
Insertar CODE, HTML o PHP:
magic_quotes_gpc
register_globals
safe_mode
allow_call_time_pass_reference
y cualquier otra directiva de PHP que no reconozcas o que sea de versiones antiguas.
✅ Paso 5: revisa tu configuración (sin confiarte)
Crea check.php en la raíz, ábrelo en el navegador y bórralo apenas lo veas:
Insertar CODE, HTML o PHP:
<?php
header('Content-Type: text/plain');
foreach (['session.upload_progress.enabled','memory_limit','post_max_size','upload_max_filesize'] as $k) {
echo $k, ' = ', var_export(ini_get($k), true), PHP_EOL;
}
echo 'PHP ', PHP_VERSION, ' / ', php_sapi_name(), PHP_EOL;
Importante: esto solo confirma qué versión de PHP tienes y que las directivas están puestas sin dar error. No prueba que la mitigación esté activa en el momento del ataque: un .user.ini puede mostrar "0" aquí y aun así no proteger nada. Lo que de verdad importa es que la versión sea una de las corregidas.
Resumen rápido:
- ¿Tu panel ya tiene la versión parcheada? → Cámbiala y listo.
- ¿No la tiene? → Cloudflare delante + ticket al proveedor para que aplique las mitigaciones a nivel de servidor.
- Limpia directivas viejas en todos tus .htaccess / .user.ini.
- .user.ini con upload_progress = 0 como capa extra, sin confiarte.
- Cuando actualicen PHP: confirma la versión con check.php y regresa el memory_limit a la normalidad.
Si tu hosting tarda días en reaccionar a algo de 9.2 con ataques activos, eso también dice bastante de él.
Cualquier duda, me dejan su caso aquí abajo con la versión de PHP que les sale y les echo una mano. 🤝
Última edición:

