
Demonstração educacional do escape de contêiner do runc CVE-2024-21626 com gadget de detecção baseado em eBPF para tentativas de exploração.
Este repositório contém exemplos de código para uma aplicação vulnerável ao CVE-2024-21626, bem como um gadget eBPF para detectar tentativas de exploração.
Este repositório foi criado como parte deste post no blog.
O programa gadget usado para detectar esta vulnerabilidade é apenas para fins de demonstração. Não é uma detecção completa do CVE-2024-21626.
CVE-2024-21626 é uma vulnerabilidade no runtime de contêineres runc, presente em versões anteriores à v1.1.12. Ela se baseia no fato de que o runc não fecha um descritor de arquivo "vazado" (leaked) em tempo hábil ao criar ou executar comandos dentro do contêiner, fazendo com que o contêiner herde esse descritor de arquivo e ganhe acesso ao sistema de arquivos do host.
Existem várias maneiras de explorar esta vulnerabilidade. Este repositório mostra como esta vulnerabilidade pode ser explorada em tempo de execução.
Você pode ler mais sobre isso aqui.
Para que esta demonstração funcione, você precisará garantir que sua máquina esteja executando uma versão do runc <= 1.1.11.
leaky-app é um aplicativo Go que cria um link simbólico para o descritor de arquivo potencialmente vazado. Para construir a imagem Docker:
make leaky-app
Para construir o gadget eBPF, você precisará da ferramenta ig.
Você pode construir o gadget usando:
make gadget
Uma vez que ambos estejam construídos, execute o gadget usando:
IG_EXPERIMENTAL=true sudo -E ig run trace-symlink:latest
Abra outro terminal e inicie o contêiner leaky-app:
docker run --rm --name leaky-app leaky-app
Você deve ver o gadget exibindo o contêiner que chamou a chamada de sistema symlink.
Este repositório contém uma aplicação de demonstração projetada para mostrar a detecção do CVE-2024-21626. É importante notar que esta demonstração é apenas para fins educacionais e não deve ser considerada como uma ferramenta prática de detecção. Os mecanismos de detecção implementados nesta demonstração não cobrem todos os cenários nem representam com precisão as complexidades da detecção desta vulnerabilidade.