Seguridad

Acceso root en Polkit para usuarios con uid mayor a INT_MAX

Screenshot_20181205_103550

El fallo, que aún no está solucionado, es reproducible ejecutando cualquier aplicación que utilice PolicyKit

PolicyKit, comúnmente llamado Polkit, es un componente para los sistemas Unix que permite a procesos no privilegiados ejecutar funciones que requieren permisos de superusuario, sin que estos tengan que ejecutarse como root. A diferencia de sudo, no requiere que todo el proceso sea ejecutado con privilegios del sistema, dando un mayor control sobre los permisos.

Este componente, empleado en la mayoría de distribuciones GNU/Linux y utilizado por múltiples programas, no controla correctamente los permisos cuando el usuario tiene un número de identificación (UID) superior al de INT_MAX (2147483647), pudiendo utilizar Polkit sin ninguna restricción y sin que se pida ninguna contraseña.

Screenshot_20181205_104333
Ejemplo de explotación con un usuario con uid 4000000000. El usuario es capaz de parar un servicio, sin que este tenga permisos para ello.

Un ejemplo de programa que utiliza Polkit es Systemctl: cuando no son necesarios permisos, por ejemplo para ejecutar ‘systemctl status nginx’, se ejecuta el comando sin restricciones. No obstante, para ejecutar ‘systemctl stop nginx’ (parar un servicio), aparece una ventana de confirmación solicitando la contraseña del usuario, y sólo si éste estuviese autorizado podrá realizar la acción. Con esta vulnerabilidad, el comando se ejecuta sin necesidad de estar autorizado y sin que aparezca la ventana de confirmación.

La vulnerabilidad, con identificador CVE-2018-19788, todavía no se encuentra solucionada, aunque su explotación es complicada salvo que exista ya un usuario con un uid superior a 2147483647, algo de por sí difícil, y que probablemente sea la razón por la que ha pasado el fallo tanto tiempo desapercibido. Para probar la vulnerabilidad, basta con crear un nuevo usuario del sistema y modificar el uid, pudiendo ejecutar cualquiera de los comandos anteriores.

Más información:

CVE-2018-19788:
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-19788

unprivileged users with UID > INT_MAX can successfully execute any systemctl command:
https://github.com/systemd/systemd/issues/11026

Freedesktop issue:
https://gitlab.freedesktop.org/polkit/polkit/issues/74

Powered by WPeMatico

Gustavo Genez

Informático de corazón y apasionado por la tecnología. La misión de este blog es llegar a los usuarios y profesionales con información y trucos acerca de la Seguridad Informática.