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.