Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET Mastodon

Entradas populares

PostHeaderIcon Grave vulnerabilidad en Polkit permite obtener root en Linux de forma local


Una vulnerabilidad que lleva presente 12 años en Linux. Este fallo está presente en una herramienta del sistema llamada Polkit (previamente llamada PolicyKit) similar a sudo, que permite a un atacante obtener permisos de root en prácticamente cualquier distro de Linux, por ejemplo instalaciones predeterminadas de RHEL 8, Fedora 21 (o posterior), Ubuntu 20.04 y versiones inestables de Debian ("bullseye") y sus derivadas. Polkit reemplaza a sudo con systemd o como doas en FreeBSD.

 


 

Vulnerabilidad en el componente pkexec de Polkit que está presente en la configuración predeterminada de todas las principales distribuciones de Linux puede explotarse para obtener privilegios completos de root en el sistema.  Polkit que negocia la interacción entre procesos privilegiados y no privilegiados, pkexec permite que un usuario autorizado ejecute comandos como otro usuario, duplicando como alternativa a sudo.

Si bien no puede ser explotada remotamente y es necesario que el atacante obtenga acceso local a una cuenta, se trata de una vulnerabilidad importante. 

Identificado como CVE-2021-4034 y denominado PwnKit, el problema de seguridad se remonta a la confirmación inicial de pkexec, hace más de 12 años, lo que significa que todas las versiones de Polkit están afectadas.

  • Permite obtener privilegios de root en las instalaciones predeterminadas de Ubuntu, Debian, Fedora y CentOS

Vulnerabilidad de hace 12 años permite obtener ser root en Linux

Polkit se encarga de gestionar los privilegios del sistema en sistemas operativos basados en Unix. Ofrece un mecanismo para procesos sin privilegios para que interactúen de manera segura con procesos que sí tienen los privilegios. Además, también permite a los usuarios ejecutar comandos con un alto nivel de privilegios usando un componente llamado pkexec.

Detalles técnicos de la vulnerabilidad PwnKit

  • Will Dorman, analista del CERT Coordination Center confirmó que funciona en sistemas ARM64.
El error radica en que pkexec no manipula correctamente los parámetros de llamada y termina intentando ejecutar variables de entorno como comandos.


El principio de la función main() de pkexec procesa los argumentos de la línea de comandos (líneas 534-568), y busca el programa a ejecutar, si su ruta no es absoluta, en los directorios de la variable de entorno PAT


 Desafortunadamente, si el número de argumentos de la línea de comandos argc es 0, lo que significa que si la lista de argumentos argv que pasamos a execve() está vacía, es decir, {NULL}, entonces argv[0] es NULL. Este es el terminador de la lista de argumentos. 

Entonces, dicho más precisamente:

     Si nuestra variable de entorno PATH es "PATH = nombre", y si el directorio "nombre" existe (en el directorio de trabajo actual) y contiene un archivo ejecutable llamado "valor", entonces se escribe un puntero a la cadena "nombre/valor". fuera de los límites de envp[0];

O

     Si nuestra PATH es “PATH=nombre=.”, y si el directorio “nombre=.” existe y contiene un archivo ejecutable llamado "valor", entonces un puntero a la cadena "nombre=./valor" se escribe fuera de los límites en envp[0].

En otras palabras, esta escritura fuera de los límites nos permite volver a introducir una variable de entorno "no segura" (por ejemplo, LD_PRELOAD) en el entorno de pkexec. Estas variables "no seguras" normalmente se eliminan (mediante ld.so) del entorno de los programas SUID antes de llamar a la función main(). Explotaremos esta poderosa primitiva en la siguiente sección.

Nota de última hora: polkit también es compatible con sistemas operativos que no son Linux, como Solaris y *BSD, pero no hemos investigado su capacidad de explotación. Sin embargo, notamos que OpenBSD no es explotable, porque su kernel deniega a ejecutar () un programa si argc es 0.

La jerarquía de permisos en Unix permite al sistema determinar qué aplicaciones o usuarios pueden interactuar con partes sensibles del sistema, y cuándo pueden hacerlo. 

 El año pasado, el investigador de GitHub Security Lab, Kevin Backhouse, descubrió otra antigua vulnerabilidad de escalada de privilegios que afectaba a Polkit.

 

CVE-2021-4034 y denominado PwnKit 

  • - CVE-2021-4034

  • - Elevación de privilegios

  • - Exploit público: SI

  • - Nivel de dificultad de explotación: Bajo

El problema es que el elemento que se encarga de controlar eso ha tenido una vulnerabilidad de corrupción de memoria desde 2009 que permite a alguien con permisos limitados escalar privilegios hasta alcanzar permisos de root. Explotar la vulnerabilidad es muy fácil y 100% fiable, donde cualquier persona que tenga un acceso por mínimo que sea a una máquina puede ejecutar código malicioso o insertar malware más dañino con control total del sistema.

La vulnerabilidad requiere acceso local con autenticación a un dispositivo, y no se puede explotar de manera remota sin esa autenticación. Sin embargo, si se combina esta LPE (local privilege escalation) con una RCE, cualquier atacante puede tomar el control de un ordenador de manera remota.

La vulnerabilidad ha sido llamada PwnKit, y puede explotarse incluso si Polkit no está ejecutándose. Los investigadores de Qualys la descubrieron en noviembre, y al estar ya parcheada en casi todas las distros de Linux, han decidido publicar la información. No obstante, Qualys todavía no van a lanzar la prueba de concepto oficialmente, aunque ya han sido publicadas muchas otras en Github, que permite aprovecharla, ya que habrá muchos sistemas operativos que no la tengan parcheada. Además, afirman que dada la facilidad de la vulnerabilidad actores maliciosos, van a empezar a aprovecharla con bastante rapidez.


Mitigaciones y recomendaciones

Es recomendable actualizar lo antes posible para evitar verse afectado por el ataque interno. En el caso de no poder parchear de manera inmediata, se puede utilizar el comand:

 chmod 0755 /usr/bin/pkexec 

para eliminar la parte de SUID de pkexec.

RHE y derivadas:

2. Install polkit debug info:

debuginfo-install polkit


3. Create the following systemtap script, and name it pkexec-block.stp:

probe process("/usr/bin/pkexec").function("main") {

if (cmdline_arg(1) == "")

raise(9);

}


4. Load the systemtap module into the running kernel:

stap -g -F -m stap_pkexec_block pkexec-block.stp


5. Asegurar que el módulo se ha cargado

lsmod | grep -i stap_pkexec_block

stap_pkexec_block 434176 0


6. Once the polkit package is updated to the version containing the fix, remove the systemtap generated kernel module by running:

rmmod stap_pkexec_block
Nota: si se reinicia el sistema, el módulo generado por systemtap debe volver a cargarse en el kernel. Para hacerlo, navegue hasta el directorio donde se creó el script de mitigación y siga los pasos 4 y 5.

Una vez que se realice la mitigación anterior, pkexec seguirá funcionando como se esperaba para los casos de uso legítimos.

Nota: esta mitigación no funciona para los sistemas habilitados para arranque seguro, ya que SystemTap requeriría un servidor de compilación externo para poder firmar el módulo del kernel generado con una clave inscrita en el conjunto de claves del kernel.

Los investigadores afirman que la vulnerabilidad puede ser explotada sin dejar ni rastro en un ordenador. En el caso de que haya algún rastro, se puede comprobar el registro buscando el comando «The value for the SHELL variable was not found the /etc/shells file» o «The value for environment variable […] contains suspicious content«.

Además de las distros de Linux, también hay otros sistemas basados en Unix que podrían estar afectados, como Solaris y *BSD. No obstante, OpenBSD no es vulnerable porque su kernel rechaza execve() en un programa si el argc es cero. En el caso de Android, normalmente no se incluye pkexec, por lo que este escalado de privilegios no valdría para conseguir root en móviles que tengan el bootloader bloqueado o no tengan otra vía de ser rooteados actualmente.


Exploits PoCs


 

Fuentes:

https://www.adslzone.net/noticias/seguridad/pwnkit-grave-fallo-linux-12-anos/

https://blog.qualys.com/vulnerabilities-threat-research/2022/01/25/pwnkit-local-privilege-escalation-vulnerability-discovered-in-polkits-pkexec-cve-2021-4034

https://www.openwall.com/lists/oss-security/2022/01/25/11

https://access.redhat.com/security/vulnerabilities/RHSB-2022-001 

https://ubuntu.com/security/notices/USN-5252-1

https://ubuntu.com/security/CVE-2021-4034
https://access.redhat.com/security/cve/CVE-2021-4034
https://security-tracker.debian.org/tracker/CVE-2021-4034

 


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.