Como Escapar de um Contêiner

Contêineres são amplamente usados para isolar aplicações, mas muitos engenheiros argumentam que eles não devem ser tratados como uma fronteira de segurança forte, especialmente para executar código não confiável. Os comentaristas contrastam contêineres com kernel compartilhado com máquinas virtuais e VMs leves (por exemplo, Firecracker, Kata), destacando que fugas de contêiner normalmente dependem de más configurações ou capabilities extras concedidas por conveniência, como acesso ao socket do Docker ou SYS_ADMIN. A visão geral é que contêineres fornecem isolamento significativo, mas imperfeito, e devem ser combinados com configuração correta, patching do host e, às vezes, camadas adicionais como gVisor para modelos de ameaça de maior risco.

Contêineres são uma fronteira de segurança?

  • Forte discordância no tópico.
  • Um lado: contêineres “não são uma fronteira de segurança”, especialmente para código não confiável ou multi-tenant; eles compartilham o kernel do host e expõem uma grande superfície de ataque.
  • Visão oposta: contêineres realmente fornecem fronteiras de segurança (namespaces, cgroups, seccomp, isolamento de sistema de arquivos), só que não são fortes o suficiente para cenários de “executar código arbitrário não confiável” ou RCE-as-a-service.
  • Vários argumentam por nuance: contêineres adicionam isolamento significativo, mas devem ser tratados como uma camada entre várias, não como uma fronteira rígida.

Contêineres vs Máquinas Virtuais

  • Muitos comentários: VMs são uma fronteira qualitativamente mais forte porque não compartilham o kernel; os ataques precisam atravessar uma interface menor e mais auditável (hipervisor + drivers de dispositivo).
  • Contêineres são “isolamento com kernel compartilhado”; escalonamentos de privilégio no kernel ou uso indevido de capabilities podem permitir fuga.
  • Recursos de hardware como troca de contexto de VM e isolamento de cache são citados como benefícios que VMs têm sobre contêineres para problemas no estilo Spectre/Meltdown.
  • VMs leves (Firecracker, Kata) e gVisor são mencionados como abordagens intermediárias.

Capabilities, Má Configuração e Risco no Mundo Real

  • Todas as técnicas de escape no artigo exigem privilégios extras: SYS_ADMIN, SYS_MODULE, SYS_PTRACE, DAC_READ_SEARCH, namespace de PID do host, ou acesso ao docker.sock.
  • Críticos observam que esses privilégios não são habilitados por padrão, então o artigo mostra “como abusar de más configurações”, não falhas inerentes.
  • Outros contrapõem que tais más configurações são extremamente comuns: engenheiros adicionam capabilities para “fazer funcionar”, seguem tutoriais ruins ou precisam de ferramentas de profiling/monitoramento que exigem privilégios altos.
  • A manipulação de iptables pelo Docker e a exposição de portas por padrão são citadas como um “footgun” que levou a incidentes reais.

Explorações de Kernel e Defesa em Profundidade

  • Vários observam que um contêiner “padrão”, com capabilities padrão, normalmente é escapado por bugs locais de escalonamento de privilégio no kernel (N-days ou 0-days).
  • Contêineres rootless, user namespaces e ferramentas como Podman podem limitar o raio de impacto, mas exigem configuração correta.
  • Tendência de consenso: contêineres melhoram a segurança para a maioria das cargas de trabalho comuns de servidor, mas não são suficientes sozinhos para código hostil multi-tenant; várias camadas de isolamento são recomendadas.

Diversos

  • Desvio sobre contêineres de transporte literais e como é difícil escapar deles, usado como analogia para segurança em camadas.