Escalada de privilegios de Linux: Polkit [Tutorial]

Iniciado por AXCESS, Febrero 03, 2022, 06:01:04 PM

Tema anterior - Siguiente tema

0 Miembros y 2 Visitantes están viendo este tema.

Febrero 03, 2022, 06:01:04 PM Ultima modificación: Febrero 04, 2022, 10:55:44 PM por AXCESS
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Introducción

Recién se hizo pública una vulnerabilidad en Linux que permite escalar privilegios:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Según Red Hat, "Polkit significa PolicyKit, que es un marco que proporciona una API de autorización utilizada por programas privilegiados".
Pkexec es una herramienta en PolicyKit o polkit que permite a un usuario ejecutar un comando como un usuario diferente.
Esta vulnerabilidad engaña a polkit para que omita las comprobaciones de credenciales para las solicitudes de D-Bus, elevando los privilegios del solicitante al usuario raíz.

Fue descubierto por Kevin Backhouse y se puede presenciar su explotación en el siguiente vídeo:



Se hace una traducción detallada del tutorial, que en mi apreciación, está acertado y bien explicado.

Que lo difruten.

polkit, pkexec y dbus

Polkit y pkexec: PolicyKit también se conoce como polkit en los sistemas Linux. Es una API de autorización utilizada por programas para elevar sus permisos a los de un usuario elevado y ejecutar procesos como un usuario elevado (raíz, generalmente).

Si no se especifica el usuario, intenta ejecutar ese comando como usuario raíz.

Sudo hace lo mismo en cuanto a que permite que un usuario ejecute comandos como raíz; sin embargo, con pkexec, los administradores pueden controlar con precisión la ejecución de programas particulares definiendo políticas para ello.

Sudo no tiene restricciones y un usuario puede ejecutar cualquier comando como un usuario elevado siempre que conozca la contraseña. Pkexec también requiere un poco de esfuerzo para configurarlo, pero las variantes de Debian, incluido el popular Ubuntu, vienen con polkit y pkexec preinstalados. Estas reglas de autorización para paquetes de terceros se definen en los archivos JavaScript *.rules guardados en el directorio /usr/share/polkit-1/rules.d/

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Mientras que las reglas de autorización para la personalización local se almacenan en /etc/polkit-1/

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

dbus: dbus es un sistema de mensajes para que las aplicaciones se comuniquen entre sí (conocido como IPC o comunicación entre procesos). Esto fue desarrollado como parte del proyecto No tienes permitido ver los links. Registrarse o Entrar a mi cuenta. Un comando dbus básico para enumerar los servicios del sistema se ve así:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

En esta demostración, usaremos dbus para activar pkexec desde la línea de comandos.

Antecedentes de CVE 2021-3506

Polkit es un proceso en segundo plano que permite la autorización, pero tiene un indicador gráfico con el que los usuarios de Ubuntu deben estar familiarizados. Se parece a esto:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Sin embargo, polkit también se ejecuta en modo texto cuando se usa una sesión en modo texto, por ejemplo, cuando se usa ssh.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como puede ver, pkexec ahora se ha ejecutado en CLI.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ahora volviendo a dbus.

Es un agente IPC que nos puede ayudar a enviar comandos o mensajes a otros procesos y comunicarnos con ellos.
Para realizar operaciones, dbus tiene varios archivos de servicio configurados que hacen referencia a las rutas absolutas de los ejecutables o demonios que se activarán.

Para los procesos del sistema, dbus almacena archivos de servicio en /usr/share/dbus-1/system-services.

Aquí puede ver el contenido del nombre de host. servicio que realiza operaciones de modificación de nombre de host en Ubuntu y Cuentas.
Servicio que activa el demonio de cuentas para realizar opciones de adición/modificación de usuarios.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Entonces, dbus se puede usar para ejecutar un comando y solicitar la autorización de polkit para ello.

Cada interfaz y método tiene su propio archivo de configuración XML que revelará qué parámetros le envía dbus durante la ejecución.
No entraremos en eso ahora.

Kevin Backhouse publicó este artículo en el que detectó una vulnerabilidad en polkit que puede activarse al ejecutar el comando dbus-send pero eliminarlo mientras polkit aún lo está ejecutando y la ejecución no está completa.

En esta demostración, crearemos un nuevo usuario en el sistema sin una contraseña de root.

Para eso, primero iniciaríamos una sesión de solo texto usando ssh y luego el comando dbus-send:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

–sistema: envía un mensaje al bus del sistema

–dest: nombre de la conexión (interfaz) que recibe el mensaje

–type: method_call significa una función del sistema con argumentos que se pasan

–print-reply: imprime la salida en formato legible por humanos

/org/freedesktop/Accounts: Esta es la función que se utilizará

org.freedesktop.Accounts.CreateUser: Método que se utilizará. Aquí, se utiliza el método de creación de usuario que esencialmente creará un nuevo usuario con el nombre especificado en la cadena

1.   La cadena
2.   es el nombre ("encender usuario") que será visible en el sistema. int32 es un argumento de número entero que toma el método que especifica el tipo de cuenta codificada como un número entero.

Pero esto fallará ya que se requiere autenticación para que podamos crear un nuevo usuario.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Explotación de CVE 2021-3506

Para que el exploit funcione, debemos eliminar el comando mientras se ejecuta. Para ello necesitamos comprobar el tiempo que tarda en ejecutar este comando.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Como puede ver,toma 0.008 segundos ejecutar este comando. Entonces, se necesita "matar" la carga útil antes de 0.008 segundos para que funcione.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Kevin menciona que un usuario puede presionar CTRL+C rápidamente y debería funcionar, pero es mejor dejarlo en un simple script bash en línea para detener el proceso en 0.0035 segundos.

Tenga en cuenta que lo intentamos muchas veces y el tiempo necesario para ejecutarlo fue diferente cada vez. Por lo tanto, también necesitaría experimentar con él y ver qué hora le conviene y permitiría que el exploit se ejecute correctamente.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ejecutamos el mismo comando unas 5-7 veces antes de que se creara nuestro usuario ignite. Además, Ignite es miembro del grupo Sudo.

¿Cómo funcionó?

Dbus asigna una identificación única a cualquier conexión. Polkit verifica esa ID única y proporciona la autorización. Digamos que el UID es 1.87. Dado que la conexión se interrumpe en el medio, polkit reconoce el UID como 0 y considera que la solicitud proviene de la raíz. Por lo tanto, así es como funciona el exploit.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Podemos comprobar el /etc/passwd para su validez. Además, como se puede ver, el uid es 1001.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

A continuación, debemos proporcionar la contraseña usando dbus para que podamos usar este usuario recién creado.
Necesitamos generar una contraseña hash ya que dbus-send toma la contraseña hash como entrada.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Esto generaría un hash en formato SHA-256. También podemos usar cualquier otro cifrado según la configuración del sistema.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Ahora necesitamos pasar este hash en la función User.SetPassword usando dbus bajo un parámetro de cadena. La carga útil se parece a:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Aquí, se ha utilizado User.SetPassword. Se pasan dos parámetros. La primera cadena es la credencial con hash y la segunda cadena: "BestHackingTutorials" es la sugerencia de contraseña. Esto también se puede cambiar.

Necesitamos enviar este comando 6-7 veces para que se ejecute. Podemos iniciar sesión con este usuario ahora.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Puede escalar sus privilegios mediante sudo bash ya que el usuario ignite es miembro del grupo sudo
.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Fuente:
Hacking Articles
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Traducción e interpretación al Español para Underc0de by AXCESS

Consultas:

Kevin Backhouse:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Cómo obtener Root en Ubuntu a través del engaño de su GDM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta