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 informaron 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 vulnerabilidad de la plataforma XAMPP ampliamente utilizada. de forma predeterminada, ha llevado a los profesionales de la seguridad a instar a los administradores a verificar si sus servidores PHP están afectados antes de comenzar el fin de semana. Cuando “Best Fit” no es “Un error desagradable con un exploit muy simple, perfecto para un viernes por la tarde”, escribieron investigadores de la firma de seguridad WatchTowr. CVE-2024-4577, según se rastrea la vulnerabilidad, se debe a errores en la forma en que PHP convierte caracteres Unicode en ASCII. Una característica integrada en Windows conocida como Best Fit permite a los atacantes utilizar una técnica conocida como inyección de argumentos para pasar entradas proporcionadas 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 del sistema operativo Windows», investigadores de Devcore , escribió la empresa de seguridad que descubrió CVE-2024-4577. “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 solicitud inofensiva como http://host/cgi.php?foo=bar podría convertirse en php.exe cgi.php foo=bar, un comando que sería ejecutado por el motor PHP principal. Sin escape Como muchos otros lenguajes, PHP convierte ciertos tipos de entradas del usuario para evitar que sean interpretadas como un comando para su ejecución. Este es un proceso conocido como escapar. Por ejemplo, en HTML, el < and > Los caracteres a menudo se escapan convirtiéndolos en sus equivalentes de valor hexadecimal Unicode. < and > 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 supondrá útilmente que, cuando el usuario ingresó un guión suave, en realidad tenía la intención de escribir un guión real 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 guión real, lo 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 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 artículo útil advierte que, para traducir nuestra inyección a RCE, debemos intentar inyectar los siguientes argumentos: -d enable_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}} Agente de usuario: curl/8.3.0 Aceptar: */* Longitud del contenido: 23 Tipo de contenido: application/x-www-form-urlencoded Conexión: keep-alive Oh, alegría, somos recompensados ​​con una página phpinfo, que nos muestra que efectivamente hemos logrado RCE. La vulnerabilidad fue descubierta por el investigador de Devcore Orange Tsai, quien dijo: «El error es increíblemente simple, pero eso también 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 lo que se conoce como reglas de reescritura como: RewriteEngine On RewriteCond %{QUERY_STRING} ^%ad [NC]Reescribir regla.? – [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 sin necesidad de PHP CGI, pueden desactivarlo usando la siguiente configuración del servidor HTTP Apache: C:/xampp/apache/conf/extra/httpd-xampp.conf Ubicando las líneas correspondientes: ScriptAlias ​​/php-cgi/ » C:/xampp/php/» Y coméntelo: # ScriptAlias ​​/php-cgi/ «C:/xampp/php/» Un análisis adicional de la vulnerabilidad está disponible aquí.