Seu código pode ter 2 mil linhas. A imagem que vai para produção pode ter centenas de pacotes que ninguém do time escolheu. Uma reflexão sobre confiança em tudo aquilo que você não escreveu.
Fala pessoal, tudo bem?
Em março de 2024 um engenheiro da Microsoft percebeu que o login por SSH estava cerca de meio segundo mais lento que o normal. Curioso, foi investigar. Encontrou uma backdoor no xz, uma biblioteca de compressão presente em praticamente toda distribuição Linux.
O atacante passou cerca de dois anos ganhando a confiança do mantenedor do projeto até conseguir publicar versões com código malicioso. Por pouco aquilo não chegou às versões estáveis das grandes distros.
O iceberg da sua aplicação
Exemplo: olhando por baixo d'água
Duas ferramentas abertas ajudam a responder "o que tem aqui dentro?". O syft gera a lista de componentes (o SBOM, a "lista de ingredientes"). O grype ou o trivy cruzam essa lista com vulnerabilidades conhecidas.
# quantos pacotes existem na imagem?
$ syft nginx:latest -q | wc -l
# gerar o SBOM em formato padrão (SPDX)
$ syft nginx:latest -o spdx-json > sbom-nginx.json
# vulnerabilidades conhecidas, só as graves
$ trivy image --severity HIGH,CRITICAL nginx:latest
Faça o teste com a imagem que o seu time usa em produção. O número costuma assustar na primeira vez.
Quatro hábitos que reduzem o risco
- Fixe versões.
FROM nginx:latestmuda sem avisar. Use uma tag específica ou, melhor ainda, o digest (nginx@sha256:...). - Escaneie na pipeline, não só uma vez. Uma imagem limpa hoje pode ter CVE crítica amanhã.
- Gere e guarde o SBOM de cada versão publicada. Quando sair a próxima "xz", você responde em minutos se foi afetado.
- Atualize a imagem base com frequência, mesmo sem mudança no código. Rebuild também é manutenção.
# exemplo de etapa no GitHub Actions: falha o build se houver CVE crítica
- name: Scan da imagem
run: |
trivy image --exit-code 1 --severity CRITICAL \
--ignore-unfixed minha-app:${{ github.sha }}
--ignore-unfixed) e vá apertando. Mesma lógica de alertas do SRE: alerta que ninguém age é ruído.
Considerações Finais
Ninguém consegue revisar todo o código que roda em produção. Mas dá para saber o que está lá, reduzir o que não precisa estar e reagir rápido quando algo for descoberto.
E, como vimos no caso do Ingress NGINX, vale lembrar: muitas peças críticas são mantidas por pouquíssimas pessoas. Contribuir, patrocinar ou ao menos conhecer quem mantém o que você usa também é segurança.
Abs e até a próxima!!!
:wq!






