18 de diciembre de 2018

Acceso root en Polkit para usuarios con uid mayor a INT_MAX

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.
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:
Fuente: Hispasec