CVE-2024-4577: inyección de argumentos en PHP-CGI, comprobar y corregir
Última actualización:
PHP-CGI en Windows, con algunas páginas de códigos (japonés, chino y otras), convierte un guion suave (%AD) de la línea de comandos en un guion. A través de Apache, la query string llega a PHP-CGI por la línea de comandos, así que una URL como /?%ADd+allow_url_include%3d1 se convierte en una opción de PHP y lleva a la ejecución de código.
La vulnerabilidad depende de una conversión de caracteres de Windows: PHP en Linux no está afectado. Los escáneres envían las mismas peticiones a todos los servidores, Linux incluido, y por eso las ves en tus logs.
De un vistazo
- CVE
- CVE-2024-4577
- Software
- PHP (PHP-CGI en Windows)
- Versiones afectadas
- 8.3 antes de 8.3.8, 8.2 antes de 8.2.20, 8.1 antes de 8.1.29 y anteriores, en Windows
- Corregida en
- 8.1.29, 8.2.20, 8.3.8
- Puntuación CVSS
- 9.8 Crítica (NVD, CVSS 3.1) ·
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CISA Known Exploited Vulnerabilities
- Sí, añadida el 12 de junio de 2024
- Publicada por NVD
- 9 de junio de 2024
- Parche virtual de InfraFence
vp-cve-2024-4577(ModSecurity id 9920003)
Qué está afectado
PHP 8.3 antes de 8.3.8, 8.2 antes de 8.2.20, 8.1 antes de 8.1.29 y versiones anteriores, en Windows, cuando PHP se ejecuta como CGI (Action de Apache hacia php-cgi.exe, o el binario de PHP accesible desde una carpeta CGI). XAMPP para Windows exponía PHP-CGI de forma predeterminada. PHP como módulo de Apache, como FastCGI o PHP-FPM no está afectado.
Comprobar si un servidor es vulnerable
En Linux no hay nada que corregir para esta CVE; para las demás, mantén PHP en una versión con soporte y actualizada. Aun así puedes ver quién lo está intentando:
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20En un servidor Windows, comprueba la versión de PHP y si Apache lo ejecuta como CGI:
php -vCorregirlo (Windows)
- Actualiza PHP a 8.3.8, 8.2.20 o 8.1.29 o posterior. Las versiones sin soporte no recibieron corrección: pasa a una con soporte.
- Mejor aún, deja de ejecutar PHP como CGI: úsalo como módulo de Apache, FastCGI o PHP-FPM.
- En XAMPP, si no necesitas PHP-CGI, comenta la línea
ScriptAlias /php-cgi/enapache/conf/extra/httpd-xampp.confy reinicia Apache.
Hasta que puedas actualizar, los investigadores que encontraron la vulnerabilidad publicaron esta regla temporal de Apache para las configuraciones regionales afectadas:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]Cómo la bloquea InfraFence
El parche virtual para CVE-2024-4577 es una regla ModSecurity sobre la query string: bloquea un guion suave (%AD o el byte sin codificar) seguido de una letra al principio de la query string o después de un + o de un espacio codificado, que es como el ataque pasa una opción.
Nota: El agente de InfraFence se ejecuta en Linux, donde PHP no es vulnerable a esta CVE. En un servidor Linux, el parche bloquea los intentos y los notifica, así ves los escaneos; no corrige nada que estuviera roto.
Cómo se aplica el parche
- El agente anota qué puertos SSH y qué sitios responden.
- Escribe la regla (id de ModSecurity 9920003) entre sus propios marcadores en su archivo de ModSecurity, ejecuta
apachectl configtesty recarga Apache de forma ordenada. Si la prueba falla, vuelve a poner el archivo anterior. - Comprueba que SSH y los sitios siguen respondiendo, y quita el parche si no es así.
- Comprueba que ModSecurity bloquea de verdad con la regla, con una petición de prueba local inofensiva. Un ModSecurity en
DetectionOnlysolo registra: en ese caso el parche se quita y se notifica como ineficaz, nunca como aplicado.
Cada petición que bloquea el parche se notifica con CVE-2024-4577 (agente 1.0.37 o posterior): ves los intentos en la actividad del servidor y en la página Explotación del panel, así sabes que están probando la vulnerabilidad contra ti.
Atención: Un parche virtual bloquea la forma conocida del ataque en las peticiones que pasan por Apache en ese servidor. No sustituye a la actualización: instala la versión corregida y después quita el parche desde Actividad con Deshacer si ya no lo necesitas.
Los parches virtuales necesitan Apache con ModSecurity, el ajuste Permitir cambios en la configuración del servidor web y ningún panel de hosting ni herramienta de gestión de la configuración a cargo del servidor web; forman parte del plan Pro y de AutoMode. Los aplica una persona desde el análisis con IA, o AutoMode. Consulta Parches virtuales.
Fuentes
Los datos de esta página vienen de estas fuentes; consúltalas por si hay cambios.
Pruébalo gratis en 1 servidor
Starter es gratuito para un servidor, con protección completa y bloqueo automático. Sin tarjeta de crédito.
Instala el agente como root, con tu token en lugar de <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>El token se crea en el panel, en Servidores › Añadir servidor.
