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

  1. Lock drift: package-lock.json o yarn.lock non sincronizzati con package.json.
  2. Registri non autorizzati: Dipendenze da registri npm non whitelist (es. registry privati non autorizzati).
  3. Postinstall sospetti: Script postinstall che potrebbero eseguire codice malevolo.
  4. Licenze non permesse: Dipendenze con licenze non in whitelist (es. GPL se la policy lo vieta).
  5. 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

Esempio

Vedi un esempio completo con SBOM generato e PR gate.

Oppure scarica un report di esempio.