docker.sock

Apresentação

O arquivo docker.sock pode ser usado para a comunicação com o docker deamon dentro do contêiner. Ele utiliza sockets do unix, então podemos acessar usando unix://

Docker Deamon

O docker deamon é uma "ponte" entre o contêiner e o host para a manipulação de contêiners.

Ele sempre é executado como root, então se conseguirmos escapar do contêiner pegaremos acesso root ao host

Privilege Escalation

Para escapar do contêiner e conseguir acesso ao host, o docker.sock teria que estar mapeado dentro do contêiner, isso é usado por desenvolvedores quando, por algum motivo, o contêiner precise executar algo no host.

O root do docker é o mesmo do root do host, porém com permissões diferentes, o docker consegue isso através de namespaces

Vamos olhar o diretório do root do nosso host para ter certeza que conseguimos escapar do contêiner

Suponhamos que a imagem tenha sido executada assim:

# Vamos rodar o docker mapeando o docker.sock para dentro do contêiner
docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock alpine sh

É muito normal as imagens do docker não possuirem o docker, então precisamos instalar caso não haja.

# Usaremos o comando apk para gerenciar pacotes no alpine
apk add -U docker

-H, --host list Daemon socket(s) to connect to

Vamos usar a opção -H para o docker deamon para se conectar ao docker.sock, a ideia aqui é rodar o comando no host com auxílio do docker deamon + docker.sock, com isso vamos executar uma nova imagem mapeando o diretório raiz do host para o nosso novo contêiner, como o docker deamon roda como root, teremos acesso root ao host, podemos utilizar o segunite comando para isso:

docker -H unix:///var/run/docker.sock run -it -v /:/pwned -t alpine sh

É importante frisar que o comando acima será executado no host através do nosso contêiner com apoio do docker deamon + docker.sock

Conclusão

Só mapeie o docker.sock no seu contêiner se realmente precisar, se for mapear segue o link para a proteção contra esse escape:

https://docs.docker.com/engine/security/protect-access/

Last updated