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.
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).