jueves, 29 de marzo de 2018

Escalando privilegios linux/ nfs

Prometí escribir un poco mas, pero bueno por temas de tiempo, entre el trabajo (pentesting) y la familia como que llega la noche o el pequeño tiempo para descansar, lo trato de aprovechar.

Bueno, hace no mucho realizando un reto en particular, me encontré con una forma poco habitual de escalar privilegios a través de nfs, para entender como fue lo que realice pues me atreví a simular este reto en un VM y validar cual es el parámetro que me permitía realizar este escalamiento de privilegios.

Background:

¿Que es nfs?:
"El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales."
wikipedia

En resumen, da la facilidad de mantener un carpeta compartida, la cual puede ser accedida por distintos sistemas, similar al smb o samba pero focalizado a un propósito.
Para configurar los parametros tenemos la siguiente estructura:
archivo:
/etc/exports
<export> <host1>(<options>) <hostN>(<options>)...

donde para entender lo mejor como funciona hagamos un ejemplo:
/another/exported/directory 192.168.0.3(rw,sync)
Done
/another/exported/directory = al directorio que sera compartido
192.168.0.3 = el host o la red cual esta compartiendo
(rw,sync) = las opciones que tendrá, una sera de ro(read only).

Opción root squash

Entre las opciones ademas de permitir escritura, lectura, existe otras 2 opciones que la acompañan, una es wdelay y la otra es "root_squash, mayores detalles aqui
Que dice esta opción ultima en particular:
Previene que los usuarios en modo root conectado de forma remota pueden conservar sus mismos privilegios y se les asigna un id de usuario para el usuario nfsnobody:
Veamos en forma practica:

Primero identificamos si este protocolo esta activo y cual es la carpeta que se esta compartiendo:


Carpeta compartida y red cual se esta compartiendo

Ahora validemos que parámetros están activos en el servidor remoto, como vemos se permite lectura y escritura.

Montemos sobre es carpeta y creamos un archivo a ver que pasa:
Creamos la carpeta "compartido", montamos y creamos el archivo hola.txt

Nosotros podemos validar que el archivo ha sido creado con permisos de root:root(ya que nuestro usuario es root).
Ahora validemos en el servidor remoto los permisos del archivo creado creada:
permisos de archivo

perfecto no "heredo" los permisos de root, veamos que pasa si quitamos ese parámetro:
Cambio de parámetro

Reiniciamos el servicio en el host remoto y volvamos a compartir:

creación de archivo

Ahora volvemos a validar los permisos, pero desde el usuario sin privilegios:

permisos para root root.


Como vemos, hemos podido crear un archivo remotamente con permisos "heredados"(se que ciertamente no es la palabra técnica, pero ayuda a entender que paso), con usuario "root" y en el grupo "root".
¿Ahora que se les ocurre?


No hay comentarios:

Publicar un comentario