Intermediário Web — OWASP Top 10

Componentes Vulneráveis e Supply Chain

Usar componentes com vulnerabilidades conhecidas (bibliotecas, frameworks, pacotes npm/composer/pip) expõe a aplicação a exploits públicos. A cadeia de suprimentos de software (supply chain) é um vetor crescente — atacantes comprometem o pacote upstream e o código malicioso chega a milhares de projetos.

Por que é crítico

Vulnerabilidade famosa por componente:
- Log4Shell (CVE-2021-44228): execução remota de código via log4j (Java)
  Impactou: Apple, Microsoft, Steam, Amazon, Cloudflare e milhares de outros
- Heartbleed (CVE-2014-0160): vazamento de memória no OpenSSL
- Struts RCE (CVE-2017-5638): comprometimento da Equifax (147M registros)
- Spring4Shell (CVE-2022-22965): RCE no Spring Framework

Identificar dependências vulneráveis

# npm / Node.js
npm audit
npm audit fix

# pip / Python
pip install pip-audit
pip-audit

# Composer / PHP
composer audit

# Maven / Java
mvn dependency-check:check

# Ruby Gems
bundle audit

Software Composition Analysis (SCA) em CI/CD

# GitHub Actions — Dependabot automático (dependabot.yml)
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 10
# Pipeline com OWASP Dependency-Check
- name: Dependency Check
  run: |
    ./dependency-check.sh \
      --project "myapp" \
      --scan . \
      --failOnCVSS 7 \
      --format HTML

Supply Chain — Ataques a pacotes upstream

Tipos de ataque à supply chain:
1. Typosquatting: publicar "coloers" em vez de "colors" — usuário instala errado
2. Dependency confusion: pacote interno com nome igual ao privado → atacante publica versão maior no registry público
3. Comprometimento de maintainer: conta do mantenedor invadida, código malicioso inserido
4. Build pipeline poisoning: CI/CD do projeto upstream comprometido
# Verificar checksum do pacote antes de instalar (npm)
npm pack <pacote> && shasum -a 256 <pacote>.tgz

# Verificar assinatura (pip com PEP 458 — em adoção)
pip install --require-hashes -r requirements.txt

Lock files e reprodutibilidade

# SEMPRE commite lock files — eles fixam versões exatas
package-lock.json   # npm
yarn.lock           # yarn
composer.lock       # composer
Pipfile.lock        # pipenv
poetry.lock         # poetry
go.sum              # go modules

Sem lock file, npm install pode instalar versão diferente (e vulnerável) a cada build.

SBOM — Software Bill of Materials

Gere um inventário de todas as dependências para rastreabilidade e resposta a incidentes.

# Gerar SBOM com syft
syft packages . -o cyclonedx-json > sbom.json

# Escanear SBOM por vulnerabilidades com grype
grype sbom:sbom.json

Checklist de segurança de dependências

  • Automatize atualizações: Dependabot, Renovate Bot.
  • Bloqueie CVSS >= 7 no pipeline de CI/CD.
  • Use registry privado para dependências internas.
  • Verifique integridade de pacotes com hashes.
  • Monitore CVEs continuamente — NVD, GitHub Advisory Database.
  • Prefira dependências ativas com histórico de respostas a vulnerabilidades.
  • Remova dependências não usadas regularmente.