🔐 Security Hardening MAX · Pre-MVP Audit (one-shot 2026-05-25)
One-shot reminder scheduled for Monday 25 May 2026 (W4 Mag). Non è una routine ricorrente — la cadenza periodica sarà impostata separatamente post-MVP. Quando il founder chiede "task del giorno" da BOS in quella data, Claude deve citare questo come priorità #1.
Perché ora
Vendiamo un prodotto chiavi-in-mano per aziende che operano nel digitale: la sicurezza non è una opzione ma il nostro posizionamento commerciale primario. Un singolo incidente in pre-launch o nelle prime settimane post-launch può azzerare la fiducia che stiamo costruendo a Lugano + Ticino + Grigioni.
In parallelo: personal liability founder CHF 250k sotto revFADP (nuova legge svizzera protezione dati). Un audit "predisposizione massima" pre-MVP-gate è dovuta diligenza esplicita per mitigare il rischio penale individuale.
Slot scelto: Lunedì 25 Maggio 2026 (W4 Mag, 6 giorni prima del MVP-gate 31 Mag). Dà ancora margine per fixare hard-block 🔴 prima del freeze, ma il codice è già consolidato (no rework su feature mobili).
Quando eseguirlo
- Data: Lunedì 25 Maggio 2026
- Slot: blocco di 3-5 ore consecutive (mattina, calendario silenziato, NO interruzioni)
- Pre-requisito: ultimo commit Multiverbe pushato + dipendenze aggiornate +
.env.localallineato a Vercel env - One-shot: dopo l'esecuzione → action_item
security-hardening-max-pre-mvppassa adone+completed_date: "2026-05-25". Niente reschedule automatico.
Come eseguirlo
cd D:\Desktop\Multiverbe\(il repo Multiverbe, non Multiverbe-Business)- Apri Claude Code (auto-load di
CLAUDE.md+ skillsmultiverbe-*) - Incolla l'intero prompt sotto in un singolo messaggio
- Lascia che Claude esegua Fase 1 (audit) sequenzialmente, Fase 2 (regole) come conferma esplicita, Fase 3 (compliance) come gap analysis
- Al termine: salva il report in
D:\Desktop\Multiverbe\docs\security-hardening-2026-05-25.md(o equivalente) - Sposta hard-block 🔴 in
Multiverbe-Business/source/11-pending-actions.mdper tracking
📋 PROMPT (copy-paste verbatim)
Oggetto: Security & Data Privacy Hardening MAX · Pre-MVP Audit Multiverbe
Claude, voglio che agisci come un Senior Security Engineer con specializzazione su:
- SaaS multi-tenant (Supabase Postgres + RLS workspace_id)
- AI orchestration outbound (Anthropic US, Mistral EU, Google AI, Kimi)
- Payment integration (Stripe Checkout + Subscription + webhook + Datatrans/Payrexx Twint Q4)
- Compliance svizzera (nDSG/revFADP CHF 250k personal liability founder) + GDPR EU
Contesto Multiverbe:
- Stack: Next.js + React PWA + Supabase eu-central-1 (project `yqhixdqipojvgzfadufo`) + Vercel (multiverbe.com landing + multiverbe.app dashboard + bos.multiverbe.com) + Render.com legacy MAIND Python (in deprecazione) + Brevo SMTP transazionale.
- Mercato target: PMI CH+IT (Lugano/Ticino primario, espansione CH+IT Q3-Q4 2026).
- Vendiamo "chiavi-in-mano": la security non è feature, è posizionamento commerciale.
- Hard gate: 31 Mag 2026 MVP + 10 Giu 2026 5 paganti.
Il mio obiettivo: assicurarmi che l'app sia sicura come "predisposizione massima contro attacchi" prima di portare clienti paganti su questa infrastruttura. Niente compromessi.
---
# FASE 1 · Audit Immediato (10 step hard-tech)
Per ogni step: ✅ pass / ⚠️ warning / 🔴 critical + evidence (file:line o comando + output) + suggested fix.
1. **Scansione Segreti** — Controlla TUTTI i file (incluso git history se accessibile) per chiavi API, password, token, JWT hardcoded. Servizi target: Anthropic, Mistral, Gemini, Kimi K2.6, Stripe (test + live), Brevo SMTP, Supabase (anon + service_role), Vercel, Datatrans, GitHub PAT. Verifica `.gitignore` esclude `.env`, `.env.local`, `.env.*.local`, `*.key`, `*.pem`, secrets/. Cerca anche secrets in commit messages, README, docs/. Strumenti: `git log -p`, pattern manuale truffleHog-like, `git secrets` se installato.
2. **Analisi Dipendenze** — Esegui `pnpm audit` (frontend `frontend/multiverbe-app/`) + `pip-audit` (script Python legacy in `legacy/maind-python/` se ancora attivo) + Dependabot alerts unaddressed su GitHub. Riassumi solo critical/high. Per ognuna: dipendenza esposta? exploitable? upgrade path safe? Skill consigliato: `coderabbit:code-review` per PR Dependabot.
3. **Attack Surface · Input Handling** — Per ogni endpoint API (Vercel serverless `api/`, Render Python `daily_run.py` se attivo, Supabase RPC functions): elenca input utente (body, params, headers). Per ognuno verifica: SQL injection guard (Supabase parametrized queries OK, RPC SECURITY DEFINER con check), XSS sanitization (output rendering React con raw HTML injection?), parsing safe (JSON/CSV upload validato Zod schema?), prototype pollution. Focus specifico: SetupWizardV2 4-step input form + sector-deduction AI prompt injection.
4. **Permessi Locali / Browser API** — Cosa chiede l'app al browser/sistema utente? Permessi tracciati: clipboard read/write, geolocation, camera/microphone (per future content studio video upload), notifications (PWA push VAPID), persistent storage, service worker scope. Verifica che ogni permesso sia richiesto SOLO quando necessario (just-in-time) e mai blanket all'avvio.
5. **[Multiverbe-specific] RLS Audit Multi-Tenant** — Verifica TUTTE le 56 tabelle Supabase project `yqhixdqipojvgzfadufo` hanno RLS abilitata (`alter table X enable row level security`). Per ognuna: policy USING + WITH CHECK su `workspace_id` (o equivalente tenant scope). Pattern `(SELECT auth.uid())` wrap applicato (initPlan caching → no cliff performance >50ms). Helper functions `current_workspace_id()` con SECURITY DEFINER. Cross-tenant JOIN gates. Usa MCP tool `mcp__plugin_supabase_supabase__get_advisors` con `type: "security"` per Splinter scan. Skill: `multiverbe-supabase-rls-patterns`.
6. **[Multiverbe-specific] PII Pseudonymization Outbound** — Verifica `frontend/multiverbe-app/src/lib/pii-pseudonymize.ts` applicato a TUTTI i call outbound Anthropic (US, fuori EU Data Boundary). Lo stesso pattern serve server-side in API routes Vercel `api/ai/*`. Per ogni call AI: nome cliente → token, email → token, telefono → token, indirizzo → token, dati fiscali → token, contenuti business → preservati. Mappa pseudonimo → originale resta SOLO lato server, mai inviata a US. Skill: `multiverbe-ch-compliance`.
7. **[Multiverbe-specific] Stripe Webhook Signature** — Endpoint webhook Stripe (Vercel `api/stripe/webhook` o equivalente): valida header `Stripe-Signature` con `STRIPE_WEBHOOK_SECRET`, rifiuta se signature invalid → 400. Idempotency: store `event.id` in DB, no replay (re-processare stesso evento = no-op). Timeout: response <3s. No fast-fail nascondendo errori. Skill: `multiverbe-stripe-checkout-edges`.
8. **[Multiverbe-specific] Security Headers** — Verifica `vercel.json` headers su tutti i progetti Vercel (multiverbe-landing, multiverbe-app, multiverbe-bos-app, multiverbe-sites, metaverbe.com). Header obbligatori: CSP (no `unsafe-inline` se possibile), HSTS (max-age ≥31536000, includeSubDomains, preload), X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy strict-origin-when-cross-origin, Permissions-Policy minimale. Test pubblico: `curl -I https://multiverbe.com` + `curl -I https://multiverbe.app` → securityheaders.com scan target A+.
9. **[Multiverbe-specific] OWASP Top 10:2025 + LLM Top 10 (2025) + Agentic AI Security (2026)** — Coverage check struttura OWASP. Focus specifico LLM:
- LLM01 Prompt Injection (i nostri prompt user-input → tool use Anthropic = vettore alto)
- LLM02 Insecure Output Handling (output AI iniettato in render dashboard?)
- LLM03 Training Data Poisoning (memoria pgvector — chi può scrivere?)
- LLM06 Sensitive Information Disclosure (PII pseudonymize ridondanza step 6)
- LLM08 Excessive Agency (Anthropic tool use con DB write — quali tool sono safe?)
- Agentic AI 2026 — autonomous decision boundary su brand memory, sector intelligence
Skill: `owasp-security`.
10. **[Multiverbe-specific] Supply Chain Audit** — Per ogni sub-processor data flow Multiverbe (Anthropic, Mistral, Google AI, Kimi K2.6, Stripe, Datatrans, Resend, Vercel, Supabase, Brevo): verifica certificazioni vigenti (SOC2 Type II / ISO 27001 / IRAP / FedRAMP a seconda del vendor), ultime advisories pubblicate ultimi 90 giorni, DPA firmato e archiviato in `Multiverbe-Business/ops/dpa/`. Per ogni dipendenza npm/pip critical: chi è maintainer, ultima release date, attacchi recenti supply chain (es. event-stream, ua-parser-js, colors.js storia). Skill: `multiverbe-security-ch`.
---
# FASE 2 · Privacy by Design (4 regole permanenti)
D'ora in avanti, per ogni funzionalità che svilupperemo insieme su Multiverbe, devi seguire e ricordarmi questi principi. Confermami esplicitamente che li adotti per il resto della sessione + sessioni future (li riporteremo anche in CLAUDE.md).
1. **Principio del Minimo Privilegio** — Multiverbe è un Business Operating System: raccoglie tanti dati di proposito (è il punto del prodotto). MA solo i dati strettamente necessari alla feature in corso. Se chiedo "raccogli X" e X non serve a un valore concreto immediato per il cliente → contestalo. Esempio: non chiedere data di nascita cliente se feature è "send invoice", chiedi solo email + indirizzo fatturazione.
2. **Protezione Dati** — Per ogni dato sensibile (PII, payment, business secret, AI brand memory): proponi sempre crittografia at-rest (Supabase managed AES-256 OK, pgcrypto per campi singoli sensibili) + in-transit (HTTPS strict TLS 1.3, no fallback TLS 1.0/1.1, HSTS preload). Se la feature scrive password/secret → mai plain, mai bcrypt-only senza pepper, preferisci Argon2id o servizio managed.
3. **Sanificazione Costante** — Ogni input utente DEVE essere validato (Zod schema in frontend + parsing strict in API route + Postgres CHECK constraint) e ripulito prima di essere elaborato/salvato. SQL injection: prepared statements / parametrized queries Supabase (no string concat mai). XSS: escape output, raw HTML injection solo con sanitization (libreria DOMPurify o equivalente). CSV/JSON import: parsing safe + size limit. Se vedi un input non sanificato → red flag immediato.
4. **Security-First** — Se ti chiedo di scrivere una funzione che ritieni insicura (es. "salva la password così in chiaro", "salta validation del webhook"), avvisami immediatamente con motivo + proponimi l'alternativa corretta. Non implementare e poi chiedermi conferma — blocca prima.
---
# FASE 3 · Compliance & Founder Liability (10 step nuovi, gap analysis)
Per ogni step: ✅ in regola / ⚠️ gap parziale / 🔴 gap critico da chiudere PRIMA del MVP-gate 31 Mag.
1. **nDSG / revFADP (Swiss FADP)** — Trigger conditions per sanzione penale CHF 250k (personal liability founder, non corporate). Verifica: due diligence trail documentato (decisions-log con motivazione security), data flow mapping Multiverbe ↔ sub-processors, DPIA (Data Protection Impact Assessment) per profilazione AI brand memory. Skill: `multiverbe-ch-compliance`.
2. **GDPR coverage (EU)** — Per clienti IT + clienti CH che processano dati EU. Verifica: Privacy Policy live su `multiverbe.com/privacy` (multilingua IT+DE+FR+EN), ToS Swiss su `/terms`, Cookie banner LPD-compliant attivo (iubenda o Klaro), DSAR endpoints `/api/dsar/export` + `/api/dsar/delete` funzionanti E2E.
3. **DPA chain** — Inbound: DPA firmato e archiviato con ogni sub-processor critico (Anthropic, Mistral, Google AI, Stripe, Supabase, Vercel, Brevo, Datatrans, Resend). Outbound: template DPA per clienti pronto e firmabile da legal (italiano + inglese). Archivio: `Multiverbe-Business/ops/dpa/inbound/` + `/outbound/`.
4. **Sub-processor list pubblica** — URL `/legal/sub-processors` (multiverbe.com) versioning (data ultima modifica visibile) + email notification automatica clienti su modifica (cron monthly check + diff alert).
5. **Breach Notification Readiness** — GDPR Article 33: 72h dal momento di consapevolezza, notifica al Garante (per IT) — form Italian Garante pronto + drafted. revFADP FDPIC (Swiss): "as soon as possible" — procedura ASAP definita. Template comunicazione clienti pronto EN+IT+DE+FR. Skill: `multiverbe-incident-response`.
6. **Audit log integrity** — Table `security_alerts` (Supabase) esiste e popolata con eventi critici (auth fail, RLS bypass attempts, admin actions). pgAudit Supabase enabled. Retention immutabile (no DELETE permitted neanche service_role; eventual archive to cold storage cifrata).
7. **Backup integrity** — Supabase PITR (Point-In-Time Recovery) enabled e verificato (last restore test date < 90 giorni). S3 dump esistente con cifratura at-rest (KMS/SSE-S3). Test scarico + restore parziale: ultimo test entro 90 giorni. Skill: `/dr-test`.
8. **MFA hardware inventory** — Yubikey acquistati e setup. 1Password (o equivalente) attivo. 15 account aziendali tracker da `ops/security-calendar.md` riga 80-104: tutti ✅ tranne Register.it (⚠️ password-only — fix in calendar). 6 account personali critici verificati (founder + Loris).
9. **Secret rotation cadence** — Last rotation date per ogni secret critico: Supabase service_role, Anthropic, Mistral, Gemini, Stripe (test + live), GitHub PAT, Vercel deployment, 1Password master. Pattern operativo: 1 secret/settimana rotato (no cliff). Full cycle annuale documentato.
10. **Incident Response drill** — Last drill date (skill `/incident-start` simulated breach). 5-step playbook: Contain → Assess → Notify Legal → Communicate → Remediate, target 4h totale dalla detection. Drill quarterly, last simulazione documentata in decisions-log.
---
# OUTPUT ATTESO
1. **Report Fase 1** — 10 step con ✅/⚠️/🔴 + evidence file:line + suggested fix per ogni step.
2. **Conferma Fase 2** — Claude conferma esplicitamente di adottare i 4 principi per resto sessione + sessioni future (riportabili in CLAUDE.md repo Multiverbe).
3. **Report Fase 3** — 10 step compliance con gap analysis per legal/founder review.
4. **Action items consolidati** — Lista prioritized: hard-block 🔴 (da chiudere entro 31 Mag MVP-gate), medium ⚠️ (entro 10 Giu 5-paganti gate), low (post-launch). Da copiare in `Multiverbe-Business/source/11-pending-actions.md`.
5. **Sintesi finale** — 1 paragrafo: stato sicurezza Multiverbe pre-MVP, top-3 rischi residui, raccomandazione GO/NO-GO per launch commerciale 10 Giu.
Inizia ora con Fase 1 step 1 e procedi sequenzialmente. Per ogni step lungo, dopo l'evidence chiedimi conferma prima di passare al successivo.
Link a skills + master reference
Skills custom:
multiverbe-security-ch— playbook completo cybersecurity + cadenze + OWASP + supply chainmultiverbe-supabase-rls-patterns— RLS multi-tenant + initPlan + workspace isolationmultiverbe-ch-compliance— nDSG + GDPR + DPA + DSAR + sub-processormultiverbe-stripe-checkout-edges— webhook sig + idempotency + dunningmultiverbe-incident-response— 5-step playbook + breach 72howasp-security— OWASP Top 10:2025 + LLM Top 10 + Agentic AI 2026
Slash commands:
/security-weekly(Lun 9:00, 35 min)/security-monthly(1° del mese, 85 min)/dr-test(quarterly DR test PITR)/incident-start(incident response kickoff)/launch-checklist(pre-deadline 10 Giu hardgate)
Master reference: ops/security-calendar.md — cadenze + secret rotation + account tracker + quick checklist.
Dopo l'esecuzione
- Update status.json — action_item
security-hardening-max-pre-mvp→status: "done"+completed_date: "2026-05-25". - Decisions log — Aggiungi entry in
execution/decisions-log.mdcon sintesi findings + top-3 gap residui + decisione GO/NO-GO commerciale. - Pending actions — Sposta hard-block 🔴 in
source/11-pending-actions.mdcon deadline 31 Mag (MVP-gate). - Build BOS — Da
D:\Desktop\Multiverbe-Business\runnpm run buildper rigenerarebuild/bos.html. - Commit + push —
git push origin main→ auto-deploybos.multiverbe.com.
Ultimo update: 2026-05-13 (creato in plan mode, push live) Owner: Gregorio (esecuzione 2026-05-25) Status: scheduled · one-shot · NON ricorrente