InfraFenceInfraFence

Live Security Operations

Empezar

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:

Logs de acceso de Apache
sudo grep -rhiE '\?(%AD|[^ ]*(\+|%20)%AD)[a-z]' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20

En un servidor Windows, comprueba la versión de PHP y si Apache lo ejecuta como CGI:

Símbolo del sistema de Windows
php -v

Corregirlo (Windows)

  1. 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.
  2. Mejor aún, deja de ejecutar PHP como CGI: úsalo como módulo de Apache, FastCGI o PHP-FPM.
  3. En XAMPP, si no necesitas PHP-CGI, comenta la línea ScriptAlias /php-cgi/ en apache/conf/extra/httpd-xampp.conf y reinicia Apache.

Hasta que puedas actualizar, los investigadores que encontraron la vulnerabilidad publicaron esta regla temporal de Apache para las configuraciones regionales afectadas:

Configuración de Apache
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

  1. El agente anota qué puertos SSH y qué sitios responden.
  2. Escribe la regla (id de ModSecurity 9920003) entre sus propios marcadores en su archivo de ModSecurity, ejecuta apachectl configtest y recarga Apache de forma ordenada. Si la prueba falla, vuelve a poner el archivo anterior.
  3. Comprueba que SSH y los sitios siguen respondiendo, y quita el parche si no es así.
  4. Comprueba que ModSecurity bloquea de verdad con la regla, con una petición de prueba local inofensiva. Un ModSecurity en DetectionOnly solo 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.