Skill per agenti AI · Claude · Codex · Antigravity · Apache-2.0

Un audit vale quanto la sua onestà.

Due skill per il tuo agente AI che valutano sicurezza e privacy di un'applicazione web, dimostrano ciò che dichiarano e scrivono nero su bianco ciò che non hanno potuto verificare.

EsaminatoProvatoIgnoto

Versione 1.4.2 · di Samuele Cucurnia e Pietro Previtali · non sostituisce un penetration tester, un DPO o un legale

Apache-2.0Libere, anche per uso professionale
Solo libreria standardPython; PDF con reportlab
169 controlli automaticisu app e pagine finte con difetti noti
Mai «conforme»né «sicuro»: quattro stati dichiarati

Perché esistono

Un report tipico dice «tutto ok». Questo dice quanto ha guardato.

Chi decide budget e priorità si fida di ciò che il report dichiara testato. Dichiarare un test mai eseguito è peggio di non averlo fatto.

Un report tipico
Con sentinel
«Nessuna vulnerabilità critica trovata»
«14 route lette su 309: oltre 280 restano ignote»
Lo scanner dice «critico», quindi è critico
Ipotesi da validare, severità provvisoria, raggiungibilità da verificare
Test descritti ma mai lanciati
«Preparato, non eseguito»: un comando scritto non è un test superato
«L'applicazione è conforme al GDPR»
Quattro stati, mai «conforme», domande pronte per DPO e legale
Segreti e dati personali negli allegati
Solo posizione, tipo e forma; controllo di redazione prima della consegna

Le due skill

Sicurezza e privacy, con lo stesso metodo

Funzionano da sole. Insieme condividono la cartella di audit e producono un unico report PDF.

Sicurezza

appsec-sentinel

Assessment di application e cloud security: codice, configurazione, API, infrastruttura, supply chain.

  • Gate di autorizzazione prima di qualsiasi test attivo
  • Finding con stato: riprodotto, confermato da codice, ipotesi, non verificabile
  • Copertura con denominatori reali: file, endpoint, controlli
  • Audit documentale: ciò che i documenti dicono contro ciò che il codice fa
Privacy

gdpr-sentinel

Valutazione tecnica e documentale GDPR/ePrivacy sul trattamento che il sistema fa davvero.

  • Mappa dei trattamenti reali e matrice dei controlli A–N
  • Informativa contro codice, cookie, fornitori, retention, diritti
  • Non dichiara mai «conforme»: quattro stati e domande pronte
  • Domande per titolare, DPO, legale e fornitori, con il materiale necessario
Le due skill condividono una cartella di audit e producono un solo report PDF
Dalla sicurezza alla privacy e ritorno: privacy <repo> e sicurezza <repo> passano il lavoro alla skill gemella.

Per chi sono

Consulenti IT e NIS2

Un primo giro rapido e un report presentabile, con i limiti scritti e la mappatura indicativa sulle misure dell'art. 21.

PA, enti e associazioni

Chi gestisce un gestionale web e deve capire cosa dichiara l'informativa rispetto a ciò che il software fa.

Sviluppatori e team piccoli

Una revisione di sicurezza della propria app prima del rilascio, con finding riproducibili e un piano di retest.

Il metodo

Prima l'autorizzazione, poi il lavoro

Nessun test attivo parte senza perimetro e conferma scritta. Le fasi attive dipendono dalla modalità: rapido, standard o completo.

  1. Intake e gate di autorizzazioneProprietà, ambienti autorizzati, test consentiti, limiti e responsabile del kill switch. Senza conferma: solo analisi locale.
  2. InventarioFile, route, ruoli, dati, ambienti; matrice endpoint.
  3. Threat modelFlussi, confini di fiducia, STRIDE e LINDDUN, percorsi concatenati.
  4. Identità e autorizzazioneSessioni, MFA, OAuth, segreti, accesso a oggetti e funzioni, tenant.
  5. Input, API, file, logicaInjection, XSS, SSRF, CSRF, webhook, logica di business.
  6. Infrastruttura e supply chainDatabase, crittografia, container, CI/CD, SBOM, ripristino.
  7. AI e automazioni se presentiPrompt injection, RAG, strumenti e agenti.
  8. Disponibilità e costi solo se autorizzataDoS applicativo e denial of wallet, con limiti numerici e soglie di arresto.
  9. PrivacyTrattamento reale contro informativa: passa a gdpr-sentinel.
  10. Validazione e pianoFalsi positivi, smentita dei finding alti da un verificatore indipendente, deduplica, retest, domande aperte per chi decide.

Anatomia di un finding

Ogni finding dice anche quanto è provato

Scegli uno stato: vedi cosa significa e cosa serve per salire al livello successivo. Esempio anonimizzato.

ALTAEndpoint di seed demo esente da autenticazione, crea utenti con password fissa
Statoconfermato da codice o configurazione · confidenza media
ProvaIl middleware elenca il percorso tra quelli pubblici; il gestore non controlla sessione, ruolo né token.
Atteso / osservatoAtteso: disattivato in produzione o protetto da ruolo. Osservato: raggiungibile senza autenticazione.
ImpattoReale: non dimostrato, nessun test eseguito. Potenziale: creazione di account con password nota.
SubitoBloccare il percorso sul reverse proxy; verificare se esistono account demo in produzione.
RetestRichiesta anonima su staging: attesa risposta 401 o 404, nessun utente creato.
LimitiNon verificato se la route è nella build di produzione.
SmentitaVerificatore diverso dall'autore: ha provato a dimostrare che sia sbagliato e non c'è riuscito (esito «resiste»).

Un caso reale, anonimizzato

Cosa esce da un collaudo rapido

Applicazione web Next.js con PostgreSQL, quattro ruoli, deploy con Docker. Modalità rapido, sola analisi statica, proprietario e sviluppatore coincidono. Nomi e identificatori sono stati tolti.

2 alti
finding su 7, più 5 medi o bassi
0 riprodotti
nessun test dinamico era autorizzato: tutti «confermati da codice»
14 su 309
route API lette; oltre 280 restano «ignote»
0 su 9
endpoint censiti con test eseguito
IDSeveritàCosa
APP-002altaEndpoint di seed demo esente da autenticazione, crea utenti con password fissa
APP-005altaFramework e libreria di autenticazione con advisory noti, inclusi bypass del middleware
APP-003mediaRoute di debug e seed senza controllo di ruolo, mutazioni via GET
APP-004mediaAccettazione preventivo senza controllo di proprietà, password temporanea nella risposta
APP-001mediaFile di configurazione «example» con valori dall'aspetto reale, tracciato in Git

Cinque dei sette finding. Il collaudo ha anche trovato uno scostamento fra informativa privacy e codice: la pagina dice «nessun trasferimento extra-SEE», il codice carica font da Google e invia messaggi tramite un fornitore statunitense. Sul piano contrattuale la skill dichiara «non verificabile» e prepara le domande.

La domanda più utile del report: queste route sono nella build di produzione? Un finding «alto» può essere irrilevante o urgente a seconda della risposta, e la skill non finge di saperla.

Automazioni

Script che accelerano, senza decidere al posto tuo

Solo libreria standard di Python, salvo il PDF (reportlab) e la scansione cookie (playwright). Ognuno dichiara il proprio limite.

ScriptCosa faLimite dichiarato
inventory_routes.pyElenca route e metodi (Next.js, Express, Flask, FastAPI, Django, Laravel, Spring, ASP.NET, Rails, Go) e segnala quelle senza auth evidenteEuristico: non prova che un controllo sia corretto o assente
dynamic_authz_check.pyProva gli accessi per identitàSolo localhost o host autorizzato; solo letture di default; nessun corpo salvato
prepass.pyTutti gli strumenti in ordine fisso e checklist di 14 aree pre-compilataStesso risultato tra due giri; i candidati sono ipotesi
merge_audits.pyUnisce più giri sullo stesso repo e misura quanto concordanoUna causa vista da un solo giro non è meno vera
run_scanners.pyDipendenze sul solo lockfile e segreti nella storia Git, classificati senza riportarne il valoreEuristico; se uno scanner non parte lo dichiara
import_openapi.pyImporta OpenAPI/Swagger e lo confronta con le route nel codiceLa specifica dichiara l'intento, non prova la protezione
iac_check.py14 regole su Docker, compose, Kubernetes, Terraform, GitHub ActionsIndizi a pattern, non sostituisce trivy/checkov
import_scanner.pyImporta npm audit, SARIF, gitleaks, osv, semgrep, trivy, ZAPSempre ipotesi, severità mai oltre «media», segreti mai riportati
verify_findings.pyRevisore: riferimenti inesistenti, severità senza prova, duplicati; brief di smentita per i finding altiMeccanico: domande e smentita restano a chi legge
coverage_carry.pyAudit ripetuti: riporta la copertura con contenuto invariato, segna le voci cambiate e i file mai copertiL'impronta prova che il contenuto non è cambiato, non che l'esame fosse giusto
redact_check.pyCerca segreti e dati personali in file e PDFNon stampa mai il valore; esito pulito non è garanzia
cookie_scan.pyCookie, storage e terze parti prima del consenso, browser pulitoURL locali o con conferma del titolare
draft_ropa.pyBozza del registro art. 30 e dei fornitori dal codiceTutto «ipotesi»: ruoli e basi giuridiche le conferma il titolare
draft_dpia.pyBozza di scheda DPIA (art. 35) dalla mappa dei trattamenti, con indicatori di necessitàNon è una DPIA e non decide se serve: lo stabilisce il titolare con il DPO
retention_check.pyEvidenze di cancellazione e confronto con i tempi dichiaratiL'assenza di evidenza non è una violazione
check_delivery.pyUn solo controllo prima della consegna: schema, smentite dei finding alti, matrice GDPR, redazione (anche i valori dei segreti dell'app), parole vietate, coperturaMeccanico: un esito pulito non prova che l'audit sia corretto; non vede i messaggi di chat
canonicalize.pyRiporta ai valori canonici italiani stati e severità scritti in ingleseTocca solo valori enumerati, mai il testo libero
compare_audits.py, export_findings.pyRetest tra due audit; CSV, SARIF, Markdown«Risolto» significa assente, non verificato
build_report_pdf.pyReport PDF: completo, --sintetico, --lang en, --previous, --nis2La mappatura NIS2 è indicativa, non una valutazione di conformità

Gli script sono collaudati contro app e pagine finte con difetti noti, comprese un'istanza locale e una pagina nel browser (tests/run_checks.py). Non sono un benchmark su app pubbliche. Guida breve in inglese: README.en.md in ogni repository.

Report PDF

Un documento da consegnare a un cliente

Copertina, indice, sintesi per il proprietario, finding, audit documentale, matrici di copertura, domande e piano di intervento. Tema teal per la sicurezza, ambra per la privacy. Clic su una pagina per ingrandirla.

Copertina · sicurezza
Sintesi e priorità
Quadro dei finding
Dettaglio di un finding
Matrici di copertura
Copertina · privacy

Opzioni: --sintetico per la direzione, --lang en per le etichette in inglese, --previous per il confronto con un audit precedente, --nis2 per una mappatura indicativa sulle misure dell'art. 21.

Installazione

Pronte in due minuti

  1. Scarica appsec-sentinel.skill e gdpr-sentinel.skill dalle Release dei repository.
  2. Caricali da Impostazioni → Capacità → Skill.
  3. Scrivi /appsec-sentinel rapido <repo>: ti chiederà proprietà, tipo di attività e modalità prima di toccare nulla.

Comandi

Una parola e si parte

Scrivi il comando dopo il nome della skill, in italiano o in inglese (quick = rapido, refute = smentita…). Nessun comando salta il gate di autorizzazione.

ComandoCosa fa
rapido <repo>Triage mirato, analisi statica
standard <repo> [url]Threat model, statica, verifiche dinamiche autorizzate
inventario <repo>Matrice endpoint, route senza auth evidente in testa
scanner <file…>Importa gli scanner come ipotesi da validare
dinamico <config> <test>Test di accesso su locale o host autorizzato
documentale <repo>Documenti contro codice
revisione · smentitaFalsi positivi; un verificatore diverso dall'autore prova a confutare i finding alti
riprendi · redazioneAudit ripetuto con copertura riportata; segreti e dati personali prima della consegna
chiudiControllo di consegna in un solo passo: tutti i controlli meccanici prima di mandare l'audit
pdf · confronta · esportaReport, retest, CSV/SARIF/Markdown

Limiti

Cosa non fanno

  • Non trovano «tutte» le vulnerabilità e non certificano sicurezza o conformità.
  • Non sostituiscono un penetration tester, un DPO o un legale.
  • Non eseguono test su produzione o su sistemi non autorizzati.
  • Non modificano il prodotto: propongono correzioni da applicare con un mandato successivo.
  • Non eseguono strumenti che non hanno: preparano i comandi per l'ambiente del cliente.
  • Non portano segreti, dati personali o codice privato su servizi di terzi senza autorizzazione.
Uso responsabile. Usale solo su sistemi tuoi o con autorizzazione scritta del titolare: l'accesso non autorizzato a un sistema informatico può costituire reato. I report contengono dettagli sensibili: tienili fuori da Git e dai repository pubblici.

Domande frequenti

FAQ

Posso usarle sul sito di un cliente?Solo con autorizzazione scritta del titolare dei sistemi. Le skill non eseguono test attivi senza perimetro confermato, ma la responsabilità dell'uso resta tua.
Gli script sostituiscono gli scanner?No. Gli scanner restano i tuoi: le skill ne importano l'output come candidati «ipotesi da validare» e governano regole, copertura, validazione e report.
«Nessun finding» significa che è sicuro?No. La copertura riguarda solo ciò che è stato inventariato e provato: il report dice quanto è stato davvero esaminato e quanto resta ignoto.
La bozza del registro dei trattamenti è il registro dell'art. 30?No: è una bozza ricavata dal codice, tutta in «ipotesi da validare». Ruoli, basi giuridiche, paesi e tempi di conservazione li conferma il titolare.
Funzionano anche con altri agenti, non solo Claude?Sono state provate una volta su Codex e su Antigravity (Windows, modalità rapido, app finta, solo analisi statica): le regole sono state rispettate e le lacune emerse sono state corrette. Non è una garanzia di compatibilità: la guida con i percorsi di installazione e i limiti è in docs/ALTRI-AGENTI.md nel repository.
Serve avere installate tutte e due?No. Funzionano separatamente. Se sono installate entrambe, una passa il lavoro all'altra e il report è unico.
Dove finiscono i file di audit?In una cartella riservata creata fuori dal repository. I segreti non entrano mai nei report: si registrano posizione, tipo e forma.