
Detector de runtime baseado em eBPF para vulnerabilidades de fuga de contêineres em runc e Docker, monitorando chamadas de syscall e do daemon do Docker para detectar a exploração de CVE-2024-21626, CVE-2024-23651, CVE-2024-23652 e CVE-2024-23653 durante builds e runtime.
Este repositório está agora arquivado.
Não serão feitas mais atualizações ao código e ele pode estar inseguro ou até mesmo quebrado quando você ler este aviso. Considere-o apenas para fins históricos e trate-o com cuidado.

Neste repositório você encontrará uma implementação de referência para detecção em tempo de execução baseada em eBPF para as vulnerabilidades do runc e Docker CVE-2024-21626, CVE-2024-23651, CVE-2024-23652 e CVE-2024-23653. Ela se conecta a syscalls do Linux (por exemplo, chdir, mount) e invocações de funções do daemon Docker e as associa a builds Docker e processos de contêineres para identificar explorações dessas vulnerabilidades.
Para uma abordagem baseada em análise estática, consulte este.
CVE-2024-21626 é uma vulnerabilidade no runtime de contêineres runc que permite a um atacante escapar do isolamento do contêiner e obter RCE total como root por meio de uma imagem maliciosa que explora um problema no tratamento da instrução WORKDIR. Como existe uma condição de "corrida" entre o momento em que alguns descritores de arquivo para o host são abertos e fechados, um atacante pode criar um Dockerfile com a seguinte instrução WORKDIR /proc/self/fd/[ID] (com ID sendo um descritor de arquivo dependente do sistema) que apontará para o sistema de arquivos da máquina host subjacente. Isso pode ser explorado ao executar:
docker build - Em 2 casos:
FROM que contém um comando ONBUILD que dispara a exploração, por exemplo, ONBUILD WORKDIR /proc/self/fd/[ID]. A instrução ONBUILD injeta o comando não na imagem que o contém, mas na imagem que o usa como imagem base. Isso significa que, se uma imagem base for comprometida ou intencionalmente maliciosa, ou seja, hospedada no Dockerhub ou em outros registros públicos de contêineres, a exploração é possível mesmo que nada mude na imagem que o comando docker build realmente constrói.docker runAssim, esta vulnerabilidade pode colocar tanto sistemas de build quanto ambientes de produção em risco.
CVE-2024-23651 é uma vulnerabilidade no Docker em que um comando RUN usa o sinalizador --mount=cache. Existe uma vulnerabilidade de tempo de verificação/tempo de uso (TOCTOU) entre a verificação de que um diretório source existe no host do daemon Docker e a chamada real ao syscall mount. Um atacante pode criar um Dockerfile que plantaria um symlink entre essas duas chamadas para induzir um bind mount arbitrário que resulta em RCE total como root no host.
Esta vulnerabilidade afeta apenas o comando docker build.
CVE-2024-23653 é uma vulnerabilidade no Docker que ocorre quando um gerador LLB personalizado do Buildkit é usado com a diretiva # syntax. O gerador pode usar as chamadas GRPC Client.NewContainer e Container.Start para executar um novo contêiner durante o build. O argumento StartRequest.SecurityMode não é verificado adequadamente em relação às expectativas de privilégio do daemon Docker ou da chamada docker build, o que permite ao chamador GRPC criar um contêiner privilegiado durante o build. Este novo contêiner privilegiado pode então ser escapado para obter RCE total como root no host de build.
Esta vulnerabilidade afeta apenas o comando docker build.
CVE-2024-23652 é uma vulnerabilidade de exclusão arbitrária no Docker. Quando RUN --mount é usado em um Dockerfile, se o destino do mount não existir, ele será criado para aquele ambiente. Quando a execução é concluída, este diretório criado será limpo. Se o comando em execução alterar o caminho usado para o mount para um link simbólico, o procedimento de limpeza atravessará este link simbólico e potencialmente limpará diretórios arbitrários no sistema de arquivos raiz do host.
Esta vulnerabilidade afeta apenas o comando docker build.
A detecção em tempo de build se aplica a todas as 4 vulnerabilidades.
GOOS=linux GOARCH={{amd64/arm64}} go build.sudo (conforme exigido pelo eBPF) em seu ambiente de build (ou seja, sudo ebpf-detector &).Leaky vessels vulnerability detected impresso em STDOUT, juntamente com o respectivo CVE, nome da vulnerabilidade e informações forenses adicionais.A detecção em tempo de execução se aplica apenas à vulnerabilidade WORKDIR (CVE-2024-21626).
Dockerfile fornecido e envie-a para um registro de imagens.image no detector.yaml (marcado com TODO).kubectl apply -f detector.yml.Leaky Vessels vulnerability detected impresso nos logs dos pods do DaemonSet.Os testes unitários precisam ser executados com sudo, pois dependem de eBPF: sudo go test ebpf-detector/....
WORKDIR em tempo de execução (CVE-2024-21626) ocorre durante a inicialização do contêiner, portanto não será detectada em contêineres em execução. A detecção também assume que o runtime de contêineres é containerd.CVE-2024-23651) e Buildkit Build-time Container Teardown Arbitrary Delete (CVE-2024-23652) são baseadas em temporização e podem ter falsos negativos devido a condições de corrida.Para uma lista atualizada de bugs e problemas, consulte os problemas do projeto.
Contribuições são bem-vindas. Consulte CONTRIBUTING.md para detalhes.
O Leaky Vessels Dynamic Detector está sob a licença Apache-2.0. Consulte LICENSE para mais informações.