
Demo educativa del escape de contenedores CVE-2024-21626 en runc con gadget de detección basado en eBPF para intentos de explotación.
Este repositorio contiene ejemplos de código de una aplicación vulnerable a CVE-2024-21626, así como un gadget eBPF para detectar intentos de explotación.
Este repositorio fue creado como parte de este blog post.
El programa gadget utilizado para detectar esta vulnerabilidad es solo con fines de demostración. No es una detección completa de CVE-2024-21626.
CVE-2024-21626 es una vulnerabilidad en el runtime de contenedores runc, presente en versiones anteriores a la v1.1.12. Se basa en que runc no cierra de manera oportuna un descriptor de archivo "fugado" al crear o ejecutar comandos dentro del contenedor, lo que provoca que el contenedor herede ese descriptor de archivo y obtenga acceso al sistema de archivos del host.
Hay varias formas de explotar esta vulnerabilidad. Este repositorio muestra cómo se puede explotar esta vulnerabilidad en tiempo de ejecución.
Puedes leer más al respecto aquí.
Para que esta demo funcione, debes asegurarte de que tu máquina esté ejecutando una versión de runc <= 1.1.11.
leaky-app es una aplicación Go que crea un enlace simbólico al descriptor de archivo potencialmente fugado. Para construir la imagen de docker:
make leaky-app
Para construir el gadget eBPF, necesitarás la herramienta [ig].
Puedes construir el gadget usando:
make gadget
Una vez que ambos estén construidos, ejecuta el gadget usando:
IG_EXPERIMENTAL=true sudo -E ig run trace-symlink:latest
Abre otra shell y arranca el contenedor leaky-app:
docker run --rm --name leaky-app leaky-app
Deberías ver cómo el gadget muestra el contenedor que llamó a la syscall symlink.
Este repositorio contiene una aplicación de demostración diseñada para mostrar la detección de CVE-2024-21626. Es importante tener en cuenta que esta demostración es únicamente con fines educativos y no debe considerarse como una herramienta de detección práctica. Los mecanismos de detección implementados en esta demo no cubren todos los escenarios ni representan con precisión las complejidades de detectar esta vulnerabilidad.