
Exploit de prueba de concepto para CVE-2021-4034 (PwnKit), una vulnerabilidad de escalada de privilegios local en la utilidad pkexec de Polkit que afecta a la mayoría de las distribuciones Linux.
PoC de Polkit
Policy Toolkit (o Polkit) desde que se lanzó en 2009 permite a cualquier atacante sin permisos de root obtener de fácilmente acceso administrativo sobre cualquier sistema de Linux con el paquete de Polkit. Desafortunademente, (o no) está instalado de forma predeterminada en la mayoría de las distribuciones Linux. Con lo cual, ha hecho que esta vulnerabilidad sea extendida.
Afortunadamente, (o no) esta vulnerabilidad no se puede explotar de forma remota lo que hace que sea una vulnerabilidad de escalada de privilegios locales (LPE).
Polkit forma parte en la mayoría de los sistemas de autorización de Linux. Cuando se realiza cualquier acción que requiere un permiso administrativo. Polkit determina si tiene los permisos necesarios para poder ejecutar la acción. Está integrado en systemd (reemplazo de init). De hecho, a Systemd se le conoce como "sudo de systemd", según THM.
Cuando interactuamos con polkit podemos usar pkexec (programa que contiene la vulnreablidad Pwnkit). Como ejemplo, cuando intentamos ejecutar useradd con pkexec en una sesion GUI nos sale una ventana en la que nos pide los credenciales. En CLI podemos obtener algo similar a esto:
user@user:~$ pkexec useradd test1
==== AUTHENTICATING FOR org.freedesktop.policykit.exec ===
Authentication is needed to run '/usr/sbin/useradd' as the super user
Authenticating as: user,,, (user)
Password:
Obviamente, Canonical ya ha lanzado versiones parcheadas de este paquete en el administrador de paquetes APT. Si en alguna distribución no se han publicado versiones parcheadas, simplemente se elimina el bit de SUID de pkexec.
sudo chmod 0777 'which pkexec'