Una vulnerabilidad que estuvo presente 12 años en polkit permitía obtener privilegios root
Hace ya varios dias se dio a conocer la noticia de que el equipo de investigadores de Qualys descubrió una vulnerabilidad de corrupción de memoria en pkexec de polkit, un programa root SUID que se instala de forma predeterminada en todas las principales distribuciones de Linux.
Esta vulnerabilidad fácilmente explotable permitía que cualquier usuario sin privilegios pudiera obtener privilegios completos de root en un host vulnerable al explotar esta vulnerabilidad en su configuración predeterminada.
Polkit (anteriormente conocido como PolicyKit) es un componente para el control de privilegios en todo el sistema en sistemas operativos similares a Unix. Proporciona una forma organizada para que los procesos sin privilegios se comuniquen con los procesos privilegiados, ademas de que también es posible usar polkit para ejecutar comandos con privilegios elevados usando el comando pkexec seguido del comando que se pretende ejecutar (con permiso de root).
Sobre la vulnerabilidad
La vulnerabilidad radica en pkexec, pues su código contiene un error en el manejo de punteros, algunos de los cuales terminan haciendo referencia a áreas de memoria que no deberían. Al explotar esta falla, es posible obtener privilegios de administrador casi instantáneamente.
Catalogada como CVE-2021-4034, la vulnerabilidad recibió una puntuación CVSS de 7,8 y a la cual el equipo de Qualys explicó en una publicación de blog que:
La falla de pkexec abre la puerta a los privilegios de root para un atacante. Los investigadores de Qualys, dijo, han demostrado la explotación de las instalaciones predeterminadas de Ubuntu, Debian, Fedora y CentOS, y también se cree que otras distribuciones de Linux son vulnerables.
“La explotación exitosa de esta vulnerabilidad permite que cualquier usuario sin privilegios obtenga privilegios de root en el host vulnerable. Los investigadores de seguridad de Qualys pudieron verificar de forma independiente la vulnerabilidad, desarrollar un exploit y obtener privilegios completos de raíz en las instalaciones predeterminadas de Ubuntu, Debian, Fedora y CentOS. Otras distribuciones de Linux son probablemente vulnerables y explotables. Esta vulnerabilidad ha estado oculta durante más de 12 años y afecta a todas las versiones de pkexec desde su primer lanzamiento en mayo de 2009 (confirmar c8c3d83, «Agregar un comando pkexec(1)»).
«Tan pronto como nuestro equipo de investigación confirmó la vulnerabilidad, Qualys se comprometió con la divulgación responsable de la vulnerabilidad y se coordinó con los proveedores y las distribuciones de código abierto para anunciar la vulnerabilidad».
El problema ocurre cuando la función main() de pkexec procesa los argumentos de la línea de comandos y que argc es cero. La función aún intenta acceder a la lista de argumentos y termina tratando de usar una rgvvoid (ARGument Vector de cadenas de argumentos de línea de comando). Como resultado, se lee y escribe en la memoria fuera de los límites, lo que un atacante puede explotar para inyectar una variable de entorno que puede causar que se cargue código arbitrario.
El hecho de que estas variables puedan reintroducirse hace que el código sea vulnerable. Al menos la técnica de explotación que ofrece Qualys (inyectar la variable GCONV_PATH en el entorno pkexec para ejecutar una biblioteca compartida como root) deja rastros en los archivos de registro.
En un aviso de seguridad, Red Hat emitió la siguiente declaración:
“Red Hat está al tanto de una vulnerabilidad encontrada en pkexec que permite a un usuario autenticado realizar un ataque de elevación de privilegios.»
“El principal riesgo para los clientes es la posibilidad de que un usuario sin privilegios obtenga privilegios administrativos en los sistemas afectados. El atacante debe tener acceso de inicio de sesión al sistema de destino para llevar a cabo el ataque»
Cabe mencionar que la vulnerabilidad ya se había identificado en 2013 y se había descrito en detalle en una publicación de blog, incluso si no se había proporcionado un PoC:
«Lol, escribí sobre esta vulnerabilidad de polkit en 2013. No pude encontrar una ruta de explotación real, pero identifiqué la causa root».
Finalmente si estás interesado en poder conocer esa al respecto, puedes consultar los detalles en el siguiente enlace.