Na caixa de ferramentas para gerenciar contêineres Linux isolados Docker vulnerabilidade (), que em determinadas circunstâncias permite o acesso ao ambiente host a partir do contêiner, na presença da capacidade de executar suas próprias imagens no sistema ou ao ter acesso ao contêiner em execução. O problema se manifesta em todas as versões do Docker e permanece sem correção (proposta, mas ainda não aceita, , que implementa a suspensão do contêiner durante operações com o FS).
A vulnerabilidade permite extrair arquivos do contêiner para qualquer parte do FS do sistema host ao executar o comando "docker cp". A extração de arquivos é realizada com privilégios de root, o que permite ler ou escrever quaisquer arquivos no ambiente host, o que é suficiente para obter controle sobre o sistema host (por exemplo, é possível sobrescrever /etc/shadow).
O ataque só pode ser executado no momento em que o administrador executa o comando "docker cp" para copiar arquivos para o contêiner ou dele. Assim, o atacante precisa de alguma forma convencer o administrador do Docker da necessidade de realizar essa operação e prever o caminho utilizado durante a cópia. Por outro lado, o ataque pode ser realizado, por exemplo, ao fornecer serviços em nuvem que possibilitem a cópia de arquivos de configuração para o contêiner, construídos com o uso do comando "docker cp".
O problema é causado por uma falha na implementação da função , que calcula o caminho absoluto no FS principal com base no caminho relativo, levando em consideração a localização do contêiner. Durante a execução do comando "docker cp", ocorre uma breve , na qual o caminho já foi verificado, mas a operação ainda não foi executada. Como a cópia é realizada no contexto do FS principal do sistema host, durante esse intervalo de tempo é possível trocar a referência por outro caminho e iniciar a cópia de dados em qualquer lugar do sistema de arquivos fora do contêiner.
Como a janela temporária da condição de corrida é muito limitada no ao realizar operações de cópia de um contêiner, foi possível executar um ataque bem-sucedido em menos de 1% das vezes ao substituir cyclicamente o link simbólico no caminho usado na operação de cópia (o ataque foi bem-sucedido após cerca de 10 segundos de tentativas contínuas de copiar um arquivo com o comando "docker cp").
Ao realizar a operação de cópia para o contêiner, é possível conseguir um ataque repetível de sobrescrita de arquivo no sistema host em apenas algumas iterações. A possibilidade de ataque decorre do fato de que, ao copiar para o contêiner, aplica-se o conceito de "chrootarchive", segundo o qual o processo archive.go extrai o arquivo não no chroot da raiz do contêiner, mas no chroot do diretório pai do caminho de destino, sob controle do atacante, e não interrompe a execução do contêiner (chroot é usado como um indicador para explorar uma condição de corrida).
Fonte: opennet.ru
