Eles detectaram uma vulnerabilidade que permite a execução de código fora do contêiner e afeta Docker e Kubernetes

vulnerabilidade

Se exploradas, essas falhas podem permitir que invasores obtenham acesso não autorizado a informações confidenciais ou geralmente causem problemas

Recentemente a notícia do ddescoberta de novas vulnerabilidades em runC (uma ferramenta CLI para construir e executar contêineres no Linux) CVE-2024-21626 e no BuildKit (CVE-2024-23651, CVE-2024-23652 e CVE-2024-23653), sendo o de maior preocupação CVE-2024-21626, já que é uma vulnerabilidade crítica que permite acesso ao sistema de arquivos do sistema operacional host.

CVE-2024-21626 permite acesso ao sistema de arquivos do ambiente host a partir de um contêiner isolado. Durante um ataque, um invasor pode sobrescrever alguns arquivos executáveis ​​no ambiente host e executar seu código fora do contêiner.

Isto é especialmente preocupante em ambientes como o Kubernetes, onde os contêineres são executados em nós compartilhados. Ao explorar esta vulnerabilidade, um invasor pode obter controle privilegiado sobre o host, potencialmente concedendo acesso não autorizado a outros pods e dados de outras pessoas no mesmo nó.

Além disso, esta vulnerabilidade também afeta processos de construção em execução em ambientes de contêiner, dando aos invasores a oportunidade de estabelecer uma posição segura em um processo de construção. Este cenário pode resultar na obtenção de credenciais elevadas por um invasor, o que lhe concederia acesso a cargas de trabalho de produção críticas ou outros ambientes confidenciais. Em essência, o impacto vai além do simples vazamento de informações ou da execução de código arbitrário e pode comprometer a integridade e a segurança de todo o ambiente de desenvolvimento e produção.

Em ambientes onde Docker ou Kubernetes são usados, um ataque pode ser realizado usando uma imagem de contêiner especialmente criada. Depois que esta imagem for instalada e iniciada, o invasor poderá acessar um sistema de arquivos externo a partir do contêiner. No caso do Docker, é possível operar através de um Dockerfile especialmente desenvolvido. A vulnerabilidade também pode ser explorada se os processos forem iniciados em um contêiner usando o comando “runc exec” e vinculando o diretório de trabalho ao namespace do ambiente host.

O principal problema é um vazamento no descritor de arquivo e ao fazer O_CLOEXEC todos os descritores de arquivo antes de executar o código do contêiner, o arquivo descritor está aberto ao fazer setcwd(2), o que significa que a referência pode ser mantido ativo no contêiner definindo o modo de trabalho do diretório como um caminho resolvido através do descritor de arquivo (simO bit não-dumpável não é definido após execve(2), o que significa que há várias maneiras de atacar isso além de configurações ruins).

A causa da vulnerabilidade está no vazamento de descritores de arquivos internos. Antes de executar o código dentro do contêiner, runc fecha todos os descritores de arquivo usando o sinalizador O_CLOEXEC. No entanto, as execuções subsequentes de setcwd() deixam aberto um descritor de arquivo que aponta para o diretório de trabalho e permanece acessível após o contêiner ser iniciado. Vários cenários básicos foram propostos para atacar o ambiente host usando o descritor de arquivo restante.

É mencionado que um exemplo de exploração de vulnerabilidade é se um contêiner foi configurado:

Para definir process.cwd como /proc/self/fd/7/, o processo pid1 resultante terá um diretório de trabalho no namespace de montagem do host e, portanto, o processo gerado será capaz de acessar todos os arquivos do sistema host. Isso por si só não é uma exploração contra o runc. Um invasor também pode induzir um usuário a executar uma imagem de contêiner maliciosa, permitindo que um processo de contêiner alcance o sistema de arquivos host via runc. Isso pode se estender à substituição de binários do host, resultando em um escape completo do contêiner. 

Finalmente, deve ser mencionado que A vulnerabilidade foi corrigida no runc versão 1.1.12, então a recomendação é atualizar para a nova versão. Se você estiver interessado em saber mais sobre o assunto, pode consultar os detalhes no link a seguir.