Escalada de privilegios escribiendo / etc / passwd pero sin permiso SUID en su

Dec 16 2020

Esto no es un ejercicio, puede que no haya solución.

Estamos produciendo una imagen de Docker (basada en CentOS) que está diseñada para ser ejecutada por un usuario no root. Sin embargo, este usuario tiene acceso de escritura a / etc / passwd porque está en el grupo "raíz". Aquí están los permisos de / etc / passwd:

-rw-rw-r-- 1 root root 692 Dec 16 14:35 /etc/passwd

Esta es una falla crítica y se supone que permite una fácil escalada de privilegios. Puedo agregar un usuario a / etc / passwd.

Pero no puedo cambiar a este usuario, porque su no tiene permiso SUID:

-rwxr-xr-x 1 root root 32128 Sep 30 17:46 /bin/su

Como resultado, el usuario no tiene suficientes permisos para una ejecución exitosa de su:

su: cannot set groups: Operation not permitted

Como entendí, en la mayoría de Linux, el comando su está configurado con permiso SUID. Eso significa que quien ejecute su, se considera que lo ejecuta el usuario root. Otra alternativa podría ser jugar con las capacidades. Supongo que se requieren CAP_SETGID y CAP_SETUID y tal vez algunos otros. Si su se configuró con esas capacidades, es posible que el permiso SUID no sea necesario. Pero en nuestra imagen de Docker, no hay capacidades en su. Entonces parece que solo root puede ejecutar su correctamente.

Además, sudo no está instalado y no se está ejecutando sshd / telnetd.

Entonces, ¿cómo puedo usar las credenciales agregadas a / etc / passwd? Curl está disponible si eso puede ayudar.

Respuestas

3 RoryMcCune Dec 16 2020 at 23:46

En un host Linux estándar (VM o servidor), si tiene acceso /etc/passwdo /etc/shadowluego puede modificar o agregar credenciales a las cuentas, lo que obviamente sería un problema grave (hay detalles sobre las consecuencias de permitir una modificación /etc/passwden esta respuesta

En un contenedor Docker, por lo general, el software que hace uso de estos archivos no está instalado, por lo que no hay PAM de Linux, SSHD u otro software que haga uso de una base de datos de autenticación.

Sin ese tipo de software instalado, no hay mucho que pueda hacer, ya que no hay programas que operen en esos archivos.

Por supuesto, si la aplicación que se ejecuta en el contenedor hace uso de /etc/passwd, modificarla podría tener un impacto, pero eso dependerá de la situación según lo que haga el contenedor.