Intermediário Aplicação e Código

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-lockfile ou --ci para 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

FerramentaEcosistemaIntegração
npm auditNode.jsCLI nativa
pip-auditPythonCLI OSS
bundle auditRubyCLI OSS
DependabotMulti-langGitHub nativo
SnykMulti-langCI/CD, IDE
OWASP Dependency-CheckMulti-langCI/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.

CVSSSeveridadeAção
9.0–10.0CríticoPatch imediato (<24h)
7.0–8.9AltoPatch em dias
4.0–6.9MédioSprint atual
0.1–3.9BaixoBacklog

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:

  1. Frequência de auditoria — mínimo semanal automatizado.
  2. SLA por severidade — CRÍTICO em 24h, ALTO em 7 dias, MÉDIO em 30 dias.
  3. Processo de aprovação — PRs de dependência passam pelo CI completo.
  4. Pinagem de versão — prefira >=X.Y.Z,<X+1 em vez de * ou latest.
  5. 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 de requests.
  • 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.