Gestão de dependências e CVE — lock files, SCA, patch policy
A maioria das aplicações modernas depende de centenas de pacotes de terceiros. Cada pacote é uma superfície de ataque potencial. O ataque à cadeia de suprimentos de software (supply chain attack) tornou-se uma das principais ameaças: comprometer uma biblioteca popular afeta todos que a utilizam.
O Problema com Dependências
Sua app
└── lib-A v2.3.1
└── lib-B v1.0.0 ← CVE-2024-1234 (RCE crítico)
└── lib-C v4.2.0
Você pode nem saber que lib-B existe. SCA (Software Composition Analysis) mapeia toda essa árvore.
Lock Files — Por Que São Essenciais
Lock files (package-lock.json, poetry.lock, go.sum, Cargo.lock) registram a versão exata de cada dependência — incluindo transitivas. Sem eles, npm install ou pip install podem trazer versões diferentes em ambientes distintos.
Regras:
- Commite sempre o lock file no repositório.
- Nunca ignore ou delete o lock file manualmente.
- Em produção, use o equivalente de
--frozen-lockfileou--cipara impedir atualizações implícitas.
# npm — instala exatamente o que está no lock
npm ci
# pip — usando pip-tools para gerar requirements.txt fixo
pip-compile requirements.in # gera requirements.txt com versões exatas
pip install -r requirements.txt
# Go — go.sum já garante integridade
go mod download
SCA — Análise de Composição de Software
SCA verifica suas dependências contra bases de CVE e lança alerta quando há vulnerabilidade conhecida.
Ferramentas
| Ferramenta | Ecosistema | Integração |
|---|---|---|
npm audit | Node.js | CLI nativa |
pip-audit | Python | CLI OSS |
bundle audit | Ruby | CLI OSS |
| Dependabot | Multi-lang | GitHub nativo |
| Snyk | Multi-lang | CI/CD, IDE |
| OWASP Dependency-Check | Multi-lang | CI/CD OSS |
# npm — auditoria simples
npm audit
# Saída
# high Prototype Pollution in lodash
# Package lodash
# Patched >=4.17.21
# pip-audit
pip-audit
# found 1 vulnerability in 47 packages
# Name Version ID Fix Versions
# pillow 9.0.0 PYSEC-2023-175 9.3.0
Dependabot no GitHub
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
Dependabot abre PRs automáticos com as atualizações. O CI roda os testes e você revisa antes de mergear.
CVE — O Que É e Como Priorizar
CVE (Common Vulnerabilities and Exposures) é o identificador padrão de vulnerabilidades. Cada CVE tem uma pontuação CVSS (0–10) que indica severidade.
| CVSS | Severidade | Ação |
|---|---|---|
| 9.0–10.0 | Crítico | Patch imediato (<24h) |
| 7.0–8.9 | Alto | Patch em dias |
| 4.0–6.9 | Médio | Sprint atual |
| 0.1–3.9 | Baixo | Backlog |
Considere também o contexto: um CVE de RCE em biblioteca que só roda em CLI offline tem impacto menor que em API pública.
Política de Patch (Patch Policy)
Defina e documente:
- Frequência de auditoria — mínimo semanal automatizado.
- SLA por severidade — CRÍTICO em 24h, ALTO em 7 dias, MÉDIO em 30 dias.
- Processo de aprovação — PRs de dependência passam pelo CI completo.
- Pinagem de versão — prefira
>=X.Y.Z,<X+1em vez de*oulatest. - Inventário de dependências — mantenha um SBOM (Software Bill of Materials) para auditorias.
Supply Chain Attacks
Fique atento a:
- Typosquatting — pacote
reqests(sem u) no lugar derequests. - Dependency confusion — pacote interno com nome igual a um público.
- Compromisso de mantenedor — pacote legítimo com novo código malicioso.
Mitigações: verifique soma de hash, use scoped registry privado, monitore changelog em atualizações.