SBOM, licenze e SRI per la supply chain JavaScript
One-time pack self-hosted: SBOM generator + license guard + SRI + PR Gate + report firmato
Per chi è
- Team che devono generare SBOM per compliance (CycloneDX standard)
- Organizzazioni che richiedono verifica licenze open source
- Progetti che caricano asset 3rd-party e vogliono SRI (Subresource Integrity)
- Team che vogliono prevenire lock drift e dipendenze sospette
Cosa previene
- Lock drift: package-lock.json o yarn.lock non sincronizzati con package.json.
- Registri non autorizzati: Dipendenze da registri npm non whitelist (es. registry privati non autorizzati).
- Postinstall sospetti: Script postinstall che potrebbero eseguire codice malevolo.
- Licenze non permesse: Dipendenze con licenze non in whitelist (es. GPL se la policy lo vieta).
- SRI mancanti: Asset 3rd-party caricati senza integrity= (vulnerabili a supply chain attack).
Cosa include
- SBOM generation — Da policy.yml + lockfile genera SBOM CycloneDX (bom.json)
- NOTICE/Third-Party docs — Genera documentazione con espressioni licenze SPDX
- SRI generator — Genera integrity= per asset 3rd-party + snippet di verifica
- GitHub Action Guard — Blocca PR su lock drift, registri non permessi, postinstall sospetti, licenze non whitelist, SRI mancanti
- Report HTML firmato — SHA-256 + PR template
Compatibilità
Integrazioni:
GitHub Actions
Node
Package manager: npm, yarn, pnpm
Formato SBOM: CycloneDX JSON (bom.json)
Licenze: SPDX expressions
CI/CD: GitHub Actions
Installazione in 10 minuti
bash
# 1. Installa il pack
npm install --save-dev @merlonsec/supplyshield
# 2. Crea policy.yml
cat > policy.yml << EOF
supplyshield:
sbom:
output: bom.json
format: cyclonedx
licenses:
allowlist:
- MIT
- Apache-2.0
- ISC
- BSD-2-Clause
- BSD-3-Clause
blocklist:
- GPL-2.0
- GPL-3.0
registries:
allowlist:
- https://registry.npmjs.org/
sri:
required_for:
- cdn.jsdelivr.net
- unpkg.com
- cdnjs.cloudflare.com
EOF
# 3. Aggiungi GitHub Action
mkdir -p .github/workflows
cat > .github/workflows/supplyshield.yml << EOF
name: SupplyShield Check
on: [pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: merlonsec/supplyshield-action@v1
with:
policy: ./policy.yml
EOF Security model / Non-obiettivi
Scope: SupplyShield verifica solo lockfile, licenze, e SRI. Non scannerizza vulnerabilità CVE (usa npm audit o Snyk per quello).
Non è:
- Un scanner di vulnerabilità CVE (solo licenze e compliance)
- Un sistema di dependency review completo (solo lock drift + registri + postinstall)
- Un generatore di SRI automatico per tutti gli asset (solo quelli configurati)
- Un servizio hosted (tutto locale)
È:
- Deterministico: stesso lockfile = stesso SBOM
- Standard-compliant: CycloneDX, SPDX
- Verificabile: report firmati SHA-256