Espacio de nombres UTS
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información básica
Un espacio de nombres UTS (UNIX Time-Sharing System) es una característica del kernel de Linux que proporciona iaislamiento de dos identificadores del sistema: el hostname y el NIS (Network Information Service) nombre de dominio. Este aislamiento permite que cada espacio de nombres UTS tenga su propio hostname y nombre de dominio del NIS independientes, lo cual es especialmente útil en escenarios de containerization donde cada contenedor debe aparecer como un sistema separado con su propio hostname.
Cómo funciona:
- Cuando se crea un nuevo espacio de nombres UTS, comienza con una copia del hostname y del nombre de dominio del NIS de su espacio de nombres padre. Esto significa que, al crearlo, el nuevo espacio de nombres scomparte los mismos identificadores que su padre. Sin embargo, cualquier cambio posterior en el hostname o en el nombre de dominio del NIS dentro del espacio de nombres no afectará a otros espacios de nombres.
- Los procesos dentro de un espacio de nombres UTS pueden cambiar el hostname y el nombre de dominio del NIS usando las llamadas al sistema
sethostname()ysetdomainname(), respectivamente. Estos cambios son locales al espacio de nombres y no afectan a otros espacios de nombres ni al sistema host. - Los procesos pueden moverse entre espacios de nombres usando la llamada al sistema
setns()o crear nuevos espacios de nombres usando las llamadas al sistemaunshare()oclone()con la banderaCLONE_NEWUTS. Cuando un proceso se mueve a un nuevo espacio de nombres o crea uno, comenzará a usar el hostname y el nombre de dominio del NIS asociados a ese espacio de nombres.
Laboratorio:
Crear diferentes espacios de nombres
CLI
sudo unshare -u [--mount-proc] /bin/bash
Al montar una nueva instancia del sistema de archivos /proc si usas el parámetro --mount-proc, aseguras que el nuevo mount namespace tenga una vista precisa y aislada de la información de procesos específica de ese namespace.
Error: bash: fork: Cannot allocate memory
Cuando unshare se ejecuta sin la opción -f, se encuentra un error debido a la forma en que Linux maneja los nuevos PID (Process ID) namespaces. Los detalles clave y la solución se describen a continuación:
- Explicación del problema:
- El kernel de Linux permite que un proceso cree nuevos namespaces usando la llamada al sistema
unshare. Sin embargo, el proceso que inicia la creación de un nuevo PID namespace (denominado proceso “unshare”) no entra en el nuevo namespace; solo lo hacen sus procesos hijos. - Ejecutar %unshare -p /bin/bash% inicia
/bin/bashen el mismo proceso queunshare. En consecuencia,/bin/bashy sus procesos hijos están en el PID namespace original. - El primer proceso hijo de
/bin/bashen el nuevo namespace se convierte en PID 1. Cuando este proceso termina, desencadena la limpieza del namespace si no hay otros procesos, ya que PID 1 tiene el rol especial de adoptar procesos huérfanos. El kernel de Linux entonces deshabilitará la asignación de PID en ese namespace.
- Consecuencia:
- La salida de PID 1 en un nuevo namespace conduce a la limpieza de la bandera
PIDNS_HASH_ADDING. Esto hace que la funciónalloc_pidfalle al asignar un nuevo PID al crear un proceso, produciendo el error “Cannot allocate memory”.
- Solución:
- El problema puede resolverse usando la opción
-fconunshare. Esta opción hace queunsharehaga fork de un nuevo proceso después de crear el nuevo PID namespace. - Ejecutar %unshare -fp /bin/bash% asegura que el propio comando
unsharese convierta en PID 1 en el nuevo namespace./bin/bashy sus procesos hijos quedan entonces contenidos de forma segura dentro de este nuevo namespace, evitando la salida prematura de PID 1 y permitiendo la asignación normal de PID.
Al asegurarse de que unshare se ejecute con la bandera -f, el nuevo PID namespace se mantiene correctamente, permitiendo que /bin/bash y sus subprocesos funcionen sin encontrar el error de asignación de memoria.
Docker
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
Comprueba en qué namespace está tu proceso
ls -l /proc/self/ns/uts
lrwxrwxrwx 1 root root 0 Apr 4 20:49 /proc/self/ns/uts -> 'uts:[4026531838]'
Encontrar todos los UTS namespaces
sudo find /proc -maxdepth 3 -type l -name uts -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name uts -exec ls -l {} \; 2>/dev/null | grep <ns-number>
Entrar en un namespace UTS
nsenter -u TARGET_PID --pid /bin/bash
Abusar del UTS compartido del host
Si un contenedor se inicia con --uts=host, se une al namespace UTS del host en lugar de obtener uno aislado. Con capacidades como --cap-add SYS_ADMIN, el código dentro del contenedor puede cambiar el hostname/nombre NIS del host mediante sethostname()/setdomainname():
docker run --rm -it --uts=host --cap-add SYS_ADMIN alpine sh -c "hostname hacked-host && exec sh"
# Hostname on the host will immediately change to "hacked-host"
Cambiar el nombre del host puede manipular los registros/alertas, confundir el descubrimiento del clúster o romper las configuraciones TLS/SSH que fijan el nombre del host.
Detectar contenedores que comparten UTS con el host
docker ps -aq | xargs -r docker inspect --format '{{.Id}} UTSMode={{.HostConfig.UTSMode}}'
# Shows "host" when the container uses the host UTS namespace
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.


