Elevación de privilegios en sudo 1.8.x

Se ha descubierto un problema de seguridad en sudo que permite a cualquier atacante local elevar privilegios y convertirse en root. El fallo afecta a casi todas las distribuciones basadas en el kernel Linux y además de BSD, Mac OS X, etc.

Sudo es una herramienta de administración, utilizada en muchas de las distribuciones basadas en el kernel Linux, que permite delegar privilegios  (normalmente de root) a determinados usuarios y para ciertos comandos en concreto. Ello posibilita, por ejemplo, que determinado grupo de usuarios tenga acceso a ciertas herramientas, con privilegios de administrador, pero de forma controlada y segura.

El fallo, descubierto por joernchen del Phenoelit Groupoernchen, se encuentra en un error de formato de cadena en la función “sudo_debug de sudo.c”, a la hora de procesar el nombre del programa que se le pasa por parámetro.

Para aprovechar la vulnerabilidad, el atacante debe, por ejemplo, realizar un enlace a nivel de sistema de fichero (ln) del binario sudo haciaun fichero con un nombre manipulado con caracteres especiales de cadena (por ejemplo “%n”). Al ejecutar ese nuevo enlace creado, se podrá ejecutar código con privilegios de root.

El fallo se ha confirmado en las versiones 1.8.x, y para solucionarlo, es necesario actualizar 1.8.3.p2.

Este fallo es heredado por multitud de distribuciones y sistemas operativos que utilizan sudo. Fue notificado el día 24 de enero, y el día 30 ya se publicó un parche. Corren especial peligro las máquinas compartidas entre usuarios. También es posible que sea usado en un futuro para la elevación y “liberación” de dispositivos Android, por ejemplo.

Phenoelit Advisory <wir-haben-auch-mal-was-gefunden #0815 +--++> [ Authors ] joernchen <joernchen () phenoelit de> Phenoelit Group (http://www.phenoelit.de) [ Affected Products ] sudo 1.8.0 - 1.8.3p1 (http://sudo.ws) [ Vendor communication ] 2012-01-24 Send vulnerability details to sudo maintainer 2012-01-24 Maintainer is embarrased 2012-01-27 Asking maintainer how the fixing goes 2012-01-27 Maintainer responds with a patch and a release date of 2012-01-30 for the patched sudo and advisory 2012-01-30 Release of this advisory [ Description ] Observe src/sudo.c: void sudo_debug(int level, const char *fmt, ...) { va_list ap; char *fmt2; if (level > debug_level) return; /* Backet fmt with program name and a newline to make it a single write */ easprintf(&fmt2, "%s: %s\n", getprogname(), fmt); va_start(ap, fmt); vfprintf(stderr, fmt2, ap); va_end(ap); efree(fmt2); } Here getprogname() is argv[0] and by this user controlled. So argv[0] goes to fmt2 which then gets vfprintf()ed to stderr. The result is a Format String vulnerability. [ Example ] /tmp $ ln -s /usr/bin/sudo %n /tmp $ ./%n -D9 *** %n in writable segment detected *** Aborted /tmp $ A note regarding exploitability: The above example shows the result of FORTIFY_SOURCE which makes explotitation painful but not impossible (see [0]). Without FORTIFY_SOURCE the exploit is straight forward: 1. Use formatstring to overwrite the setuid() call with setgid() 2. Trigger with formatstring -D9 3. Make use of SUDO_ASKPASS and have shellcode in askpass script 4. As askpass will be called after the formatstring has overwritten setuid() the askepass script will run with uid 0 5. Enjoy the rootshell [ Solution ] Update to version 1.8.3.p2 [ References ] [0] http://www.phrack.org/issues.html?issue=67&id=9 [ end of file ]

:: Análisis mas detallado en profuncidad aqui:

:: Link


 Google+