Se ha encontrado un nuevo vector de ataque en el servidor http Apache, que permaneció sin solucionar en la actualización 2.4.50 y permite acceder a archivos desde áreas fuera del directorio raíz del sitio. Además, los investigadores han descubierto una forma de, con ciertas configuraciones no estándar, no solo leer archivos del sistema, sino también ejecutar código remotamente en el servidor. El problema se manifiesta solo en las versiones 2.4.49 y 2.4.50, las versiones anteriores no son vulnerables. Para abordar este nuevo tipo de vulnerabilidad se ha publicado rápidamente Apache httpd 2.4.51.
La nueva problemática (CVE-2021-42013) es completamente análoga a la vulnerabilidad original (CVE-2021-41773) en 2.4.49, la diferencia radica únicamente en la codificación de caracteres «..». En particular, en la versión 2.4.50 se bloqueó el uso de la secuencia «» para codificar el punto, pero se pasó por alto la posibilidad de codificación doble — al especificar la secuencia «%». servidor La decodificó en «», y luego en «.», es decir, los caracteres «..\/» para retroceder al directorio anterior se podían codificar como «.%\/».
En lo que respecta a la explotación de la vulnerabilidad a través de la ejecución de código, esto es posible al habilitar mod_cgi y utilizar una ruta base donde se permite la ejecución de scripts CGI (por ejemplo, si se habilita la directiva ScriptAlias o se especifica la bandera ExecCGI en la directiva Options). Un requisito indispensable para llevar a cabo el ataque con éxito también es proporcionar explícitamente en la configuración de Apache acceso a los directorios que contienen archivos ejecutables, como \/bin, o acceso a la raíz del sistema de archivos «\/». Dado que normalmente este acceso no se otorga, el ataque por ejecución de código es poco aplicable a sistemas reales.
Mientras tanto, sigue siendo relevante el ataque para obtener el contenido de archivos del sistema y textos fuente de scripts web arbitrarios que sean accesibles para el usuario bajo el cual se ejecuta el servidor http. Para llevar a cabo tal ataque, basta con que el sitio tenga un directorio configurado mediante las directivas «Alias» o «ScriptAlias» (DocumentRoot no es suficiente), como «cgi-bin».
Ejemplo de un exploit que permite ejecutar la utilidad «id» en servidor: curl ‘http:\/\/192.168.0.1\/cgi-bin\/ .%\/ .%\/ .%\/ .%\/ .%\/bin\/sh’ —data ‘echo Content-Type: text\/plain; echo; id’ uid=1(daemon) gid=1(daemon) groups=1(daemon)
Ejemplo de exploits que permite revelar el contenido de /etc/passwd y uno de los scripts web (para devolver el código de los scripts, se debe especificar un directorio determinado a través de la directiva «Alias», para el cual la ejecución de scripts no está habilitada): curl ‘http://192.168.0.1/cgi-bin/.%/.%/.%/.%/.%/etc/passwd’ curl ‘http://192.168.0.1/aliaseddir/.%/.%/.%/.%/.%/usr/local/apache2/cgi-bin/test.cgi’
El problema afecta principalmente a distribuciones que se actualizan continuamente, como Fedora, Arch Linux y Gentoo, así como a puertos de FreeBSD. Los paquetes en ramas estables de distribuciones de servidor conservadoras como Debian, RHEL, Ubuntu y SUSE no son vulnerables. El problema no se manifiesta si el acceso a los directorios está explícitamente prohibido mediante la configuración «require all denied».
Fuente: opennet.ru
