Security Model

Trasparenza totale su cosa copriamo, cosa non copriamo, e perché.

Filosofia

I pack Merlonsec sono progettati per essere deterministici, verificabili, e trasparenti. Ogni controllo genera evidenze concrete (report firmati SHA-256), e ogni policy è leggibile in YAML.

Scope

Cosa copriamo:

  • Prevenzione di errori comuni di configurazione (es. sourcemap pubbliche, NEXT_PUBLIC non autorizzati)
  • Verifica di firme HMAC su webhook (autenticità e replay guard)
  • Generazione SBOM e verifica licenze per compliance
  • Protezione staging/preview da indicizzazione
  • Evidenze firmate per audit e compliance

Assunzioni

  • CI/CD trusted: Assumiamo che il sistema CI/CD sia sotto il tuo controllo e non compromesso.
  • Policy trusted: Assumiamo che policy.yml non sia modificato da attaccanti (proteggilo con branch protection).
  • Deterministico: Stessi input = stessi risultati. Non ci sono controlli probabilistici o ML.
  • Prevenzione, non detection: I pack prevengono errori, non rilevano attacchi in corso.

Threat Model

Proteggiamo contro:

  • Errori di configurazione accidentali (es. sourcemap pubblicate per sbaglio)
  • Segreti esposti nei bundle (hardcoded o via env var)
  • Webhook non verificati (spoofing, replay)
  • Lock drift e dipendenze non autorizzate
  • Staging indicizzato da motori di ricerca

NON proteggiamo contro:

  • Attacchi runtime (WAF, DDoS, injection)
  • Vulnerabilità CVE nelle dipendenze (usa npm audit o Snyk)
  • Attacchi al codice sorgente prima del build (usa GitGuardian o TruffleHog)
  • Compromissione del sistema CI/CD stesso
  • Attacchi fisici o social engineering

Report firmati

Ogni report HTML include un hash SHA-256 che permette di verificare l'integrità e l'autenticità del report stesso.

Nota: Il report firmato garantisce che il report non sia stato modificato dopo la generazione. Non garantisce che il codice analizzato sia sicuro al 100% (vedi "Non-obiettivi").

Per verificare un report:

# Calcola hash del report
sha256sum merlonsec-report.html

# Confronta con hash nel report stesso
# (trovato nella sezione "Report hash" in fondo al file)

Deterministico vs Probabilistico

Tutti i controlli Merlonsec sono deterministici: stessi input (bundle, policy, lockfile) producono sempre gli stessi risultati.

Cosa significa:

  • ✓ Riproducibile: puoi eseguire lo stesso check più volte e ottenere lo stesso risultato
  • ✓ Verificabile: puoi verificare manualmente ogni finding nel report
  • ✓ Nessun falso positivo stocastico: se un finding appare, c'è una ragione concreta

Limitazioni:

  • Pattern regex possono avere falsi positivi/negativi (es. stringhe che sembrano API key ma non lo sono)
  • Non rileviamo segreti criptati o offuscati (solo pattern chiari)
  • Non garantiamo copertura al 100% (alcuni pattern potrebbero non essere rilevati)

Non-obiettivi

I pack Merlonsec NON sono:

  • Un WAF o sistema di protezione runtime
  • Un scanner di vulnerabilità CVE completo
  • Un sistema di dependency review automatico (solo lock drift + registri + postinstall)
  • Una garanzia SEO al 100% (i motori di ricerca possono comunque trovare link, ma rispettano noindex)
  • Un servizio hosted o SaaS (tutto locale, nessun dato inviato)
  • Una soluzione "set and forget" senza manutenzione (policy vanno aggiornate se cambiano requisiti)

Evidenze e Audit

Ogni pack genera report HTML firmati che possono essere usati per:

  • Audit di sicurezza interni
  • Compliance e certificazioni
  • Documentazione per clienti o stakeholder
  • Debug e troubleshooting

I report sono progettati per essere leggibili da umani e processabili da tool automatici (formato HTML strutturato).