Un error desagradable con un exploit muy simple llega a PHP justo a tiempo para el fin de semana

Un error desagradable con un exploit muy simple llega a PHP justo a tiempo para el fin de semana
Un error desagradable con un exploit muy simple llega a PHP justo a tiempo para el fin de semana

Una vulnerabilidad crítica en el lenguaje de programación PHP puede explotarse trivialmente para ejecutar código malicioso en dispositivos Windows, advirtieron investigadores de seguridad e instaron a los afectados a tomar medidas antes de que comience el fin de semana.

Dentro de las 24 horas posteriores a la publicación de la vulnerabilidad y el parche que la acompaña, investigadores de la organización de seguridad sin fines de lucro Shadowserver reportado Escaneos de Internet diseñados para identificar servidores que son susceptibles a ataques. Eso, combinado con (1) la facilidad de explotación, (2) la disponibilidad de código de ataque de prueba de concepto, (3) la gravedad de la ejecución remota de código en máquinas vulnerables y (4) la tecnología ampliamente utilizada. XAMPP La plataforma es vulnerable de forma predeterminada, lo que ha llevado a los profesionales de seguridad a instar a los administradores a verificar si sus servidores PHP están afectados antes de comenzar el fin de semana.

Cuando el “mejor ajuste” no es

“Un error desagradable con un exploit muy simple, perfecto para un viernes por la tarde”, investigadores de la firma de seguridad WatchTowr. escribió

.

CVE-2024-4577, según se rastrea la vulnerabilidad, se debe a errores en la forma en que PHP convierte caracteres Unicode en ASCII. A característica integrado en Windows conocido como Best Fit permite a los atacantes utilizar una técnica conocida como inyección de argumento para pasar información proporcionada por el usuario a comandos ejecutados por una aplicación, en este caso, PHP. Los exploits permiten a los atacantes eludir CVE-2012-1823, una vulnerabilidad crítica de ejecución de código parcheada en PHP en 2012.

“Mientras implementaba PHP, el equipo no notó la función Best-Fit de conversión de codificación dentro d el sistema operativo Windows”, investigadores de Devcore, la empresa de seguridad que descubrió CVE-2024-4577, escribió

. “Esta supervisión permite a atacantes no autenticados eludir la protección anterior de CVE-2012-1823 mediante secuencias de caracteres específicas. Se puede ejecutar código arbitrario en servidores PHP remotos mediante el ataque de inyección de argumentos”.

CVE-2024-4577 afecta a PHP solo cuando se ejecuta en un modo conocido como CGI, en el que un servidor web analiza las solicitudes HTTP y las pasa a un script PHP para su procesamiento. Sin embargo, incluso cuando PHP no está configurado en modo CGI, la vulnerabilidad aún puede ser explotable cuando los ejecutables de PHP como php.exe y php-cgi.exe se encuentran en directorios a los que puede acceder el servidor web. Esta configuración está establecida de forma predeterminada en XAMPP para Windows, lo que hace que la plataforma sea vulnerable a menos que se haya modificado.

Un ejemplo, señaló WatchTowr, ocurre cuando las consultas se analizan y envían a través de una línea de comando. El resultado: una petición inofensiva como http://host/cgi.php?foo=bar podría convertirse en php.exe cgi.php foo=barun comando que sería ejecutado por el motor PHP principal.

No escape

Como muchos otros lenguajes, PHP convierte ciertos tipos de entradas del usuario para evitar que se interpreten como un comando para su ejecución. Este es un proceso conocido como escapar. Por ejemplo, en HTML, los caracteres < y > a menudo se escapan convirtiéndolos en sus equivalentes de valor hexadecimal Unicode < y > para evitar que un navegador los interprete como etiquetas HTML.

Los investigadores de WatchTowr demuestran cómo Best Fit no logra escapar caracteres como un guión suave (con valor Unicode 0xAD) y en su lugar lo convierte en un guión regular sin escape (0x2D), un carácter que es fundamental en muchas sintaxis de código.

Los investigadores continuaron explicando:

Resulta que, como parte del procesamiento Unicode, PHP aplicará lo que se conoce como mapeo de “mejor ajuste” y asumirá que, cuando el usuario ingresó un guión suave, en realidad tenía la intención de escribir un real guión e interpretarlo como tal. Aquí radica nuestra vulnerabilidad: si proporcionamos un controlador CGI con un guión suave (0xAD), el controlador CGI no sentirá la necesidad de escapar de él y lo pasará a PHP. PHP, sin embargo, lo interpretará como si fuera un real guión, que permite a un atacante introducir argumentos de línea de comando adicionales, que comienzan con guiones, en el proceso PHP.

Esto es notablemente similar a un error de PHP anterior (cuando está en modo CGI), CVE-2012-1823, por lo que podemos tomar prestadas algunas técnicas de explotación desarrolladas para este error anterior y adaptarlas para que funcionen con nuestro nuevo error. Un útil escribir advierte que, para traducir nuestra inyección a RCE, deberíamos intentar inyectar los siguientes argumentos:

-d allow_url_include=1 -d auto_prepend_file=php://input

Esto aceptará entradas de nuestro cuerpo de solicitud HTTP y las procesará usando PHP. Bastante sencillo: probemos una versión de esto equipada con nuestro ‘guión suave’ 0xAD en lugar del guión habitual. ¿Quizás sea suficiente para escapar?

POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: {{host}}
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive


 

Oh alegría, somos recompensados ​​con un phpinfo página, mostrándonos que efectivamente hemos logrado RCE.

La vulnerabilidad fue descubierta por el investigador de Devcore Orange Tsai, quien dicho: “El error es increíblemente simple, pero eso también es lo que lo hace interesante”.

El artículo de Devcore dice que los investigadores han confirmado que XAMPP es vulnerable cuando Windows está configurado para usar las configuraciones regionales de chino tradicional, chino simplificado o japonés. En Windows, una configuración regional es un conjunto de información de preferencias del usuario relacionada con el idioma, el entorno y/o las convenciones culturales del usuario. Los investigadores no han probado otras configuraciones regionales y han instado a las personas que las utilizan a realizar una evaluación integral de activos para probar sus escenarios de uso.

CVE-2024-4577 afecta a todas las versiones de PHP que se ejecutan en un dispositivo Windows. Eso incluye las versiones 8.3 anteriores a 8.3.8, 8.2 anteriores a 8.2.20 y 8.1 anteriores a 8.1.29.

Las versiones 8.0, 7 y 5 también son vulnerables, pero como ya no son compatibles, los administradores tendrán que seguir los consejos de mitigación ya que los parches no están disponibles. Una opción es aplicar las conocidas como reglas de reescritura como por ejemplo:

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]

Los investigadores advierten que estas reglas se han probado sólo para los tres lugares que han confirmado como vulnerables.

XAMPP para Windows aún no había publicado una solución en el momento en que se publicó esta publicación. Para los administradores que no necesitan PHP CGI, pueden desactivarlo usando la siguiente configuración del servidor HTTP Apache:

C:/xampp/apache/conf/extra/httpd-xampp.conf

Localizando las líneas correspondientes:

ScriptAlias /php-cgi/ "C:/xampp/php/"

Y comentalo:

# ScriptAlias /php-cgi/ "C:/xampp/php/"

Análisis adicional de la vulnerabilidad está disponible. aquí.