{
  "date": "2026-10-27",
  "scope": "Cinque strumenti, funzioni circoscritte su dati sintetici; nessun costo o account creato.",
  "tools": [
    {
      "id": "invid",
      "tool": "InVID-WeVerify / MeVer",
      "version": "Servizio web, 27 ottobre 2026",
      "art": 452,
      "status": "Prova del componente forense completata",
      "input": "JPEG geometrico 960 x 640 creato per la prova, con metadati EXIF fittizi. Nessuna persona, località o evento reale.",
      "method": "Caricamento del campione nel componente ufficiale Image Verification Assistant, apertura del confronto originale/ELA e lettura dei metadati.",
      "expected": "Dimensioni 960 x 640; Software = Consuleria QA; data dichiarata 2026:10:27 09:10:00; mappe disponibili.",
      "observed": "Dimensioni e tre campi EXIF corretti; 13 mappe forensi e 4 fusioni disponibili. Il confronto ELA è stato aperto e osservato nel browser.",
      "limit": "È stato testato il componente integrato in InVID-WeVerify, tramite il suo servizio standalone. Non sono stati collaudati installazione dell’estensione, video, ricerca inversa e servizi riservati. I punteggi di un rilevatore non dimostrano la verità o falsità di un evento.",
      "conclusion": "Il flusso immagine → metadati → mappa funziona sul campione. Il file è artificiale: non misura sensibilità o accuratezza del rilevatore.",
      "source": "https://weverify.eu/tools/image-verification-assistant/",
      "result": "https://mever.iti.gr/forensics/results/a12e77f85749c90819e4bf461b29e1a6f030c0f7/",
      "command": "Apri MeVer → scegli geometria.jpg → Verify → apri Error Level Analysis.",
      "fixture": "geometria.jpg"
    },
    {
      "id": "c2pa",
      "tool": "Content Credentials / C2PA",
      "version": "c2patool 0.28.4 + verificatore web",
      "art": 453,
      "status": "Tre stati verificati",
      "input": "Lo stesso JPEG in tre varianti: senza credenziali, firmato con certificato pubblico di sviluppo, poi alterato in un byte del metadato EXIF.",
      "method": "Lettura con c2patool dei tre file e ispezione del file firmato nel verificatore Content Credentials.",
      "expected": "Assenza di manifesto; firma e hash coerenti ma emittente non attendibile; mismatch dell’hash dopo alterazione.",
      "observed": "No claim found; stato Valid con signingCredential.untrusted; stato Invalid con assertion.dataHash.mismatch. Nel browser: Non riconosciuto e C2PA Test Signing Cert.",
      "limit": "Validità matematica, fiducia nell’emittente e verità del contenuto sono tre cose diverse. Il certificato di sviluppo non autentica Consuleria né l’autore della scena. L’alterazione riguarda un metadato, non i pixel.",
      "conclusion": "Il controllo distingue correttamente assenza di credenziali, integrità e alterazione. La prova negativa è parte del risultato.",
      "source": "https://opensource.contentauthenticity.org/docs/c2patool/",
      "result": "https://verify.contentauthenticity.org/",
      "command": "c2patool geometria-firmata.jpg\nc2patool geometria-alterata.jpg",
      "fixture": "geometria-firmata.jpg"
    },
    {
      "id": "zap",
      "tool": "ZAP",
      "version": "2.17.0",
      "art": 454,
      "status": "Scansione passiva locale completata",
      "input": "Una pagina HTML e un cookie sintetici, serviti esclusivamente su 127.0.0.1:8781. Configurazione volutamente incompleta.",
      "method": "Automation Framework: una richiesta GET, analisi passiva, attesa completamento e report JSON. Nessuna scansione attiva, crawler o sito di terzi.",
      "expected": "Rilievi su CSP assente, protezione framing assente, cookie senza HttpOnly/SameSite e altre intestazioni carenti.",
      "observed": "Sei regole segnalate: 10038, 10020, 10010, 10054, 10036 e 10021. Il rapporto contiene soltanto 127.0.0.1:8781.",
      "limit": "Questa prova verifica il motore passivo e il report. Non è un penetration test completo né una scansione di consuleria.org. Assenza di altri avvisi non dimostra assenza di vulnerabilità.",
      "conclusion": "Gli avvisi corrispondono alle carenze predisposte. In un incarico reale vanno verificati contesto, esposizione, evidenze e correzioni.",
      "source": "https://www.zaproxy.org/docs/automate/automation-framework/",
      "result": "risultati/zap-passive.json",
      "command": "java -jar zap-2.17.0.jar -cmd -dir ./zap-qa -silent -notel -autorun zap-plan.yaml",
      "fixture": "zap-fixture.py"
    },
    {
      "id": "osv",
      "tool": "OSV-Scanner",
      "version": "2.7.0",
      "art": 455,
      "status": "Confronto di due lockfile completato",
      "input": "Due package-lock.json sintetici: lodash 4.17.20 e 4.17.21, con origine npm pubblica dichiarata. Nessun pacchetto vulnerabile installato.",
      "method": "Scansione dei soli lockfile contro il database OSV, senza risoluzione transitiva né analisi del codice. Confronto degli identificativi nei due risultati.",
      "expected": "Rilevare CVE-2021-23337 e CVE-2020-28500 in 4.17.20; non ritrovarli in 4.17.21. Non assumere che quest’ultima sia priva di altri problemi.",
      "observed": "Cinque segnalazioni su 4.17.20, tre su 4.17.21. Le due CVE attese scompaiono; restano CVE-2026-2950, CVE-2026-4800 e CVE-2025-13465. Dati osservati il 27 ottobre 2026.",
      "limit": "Il confronto riguarda segnalazioni note e versioni dichiarate, non la sfruttabilità sul sistema. I dati possono cambiare. Un lockfile senza origine del registro può essere interpretato come sorgente locale: la prima fixture incompleta è stata corretta prima dell’accettazione.",
      "conclusion": "La versione di confronto non viene chiamata sicura. È verificata la risoluzione di due segnalazioni, con tre residue da valutare.",
      "source": "https://google.github.io/osv-scanner/",
      "result": "risultati/osv-4.17.20.json",
      "command": "osv-scanner scan source --lockfile lodash-4.17.20/package-lock.json --format json --no-resolve",
      "fixture": "lodash-4.17.20/package-lock.json"
    },
    {
      "id": "velociraptor",
      "tool": "Velociraptor",
      "version": "0.77.3",
      "art": 456,
      "status": "Query locale e controllo negativo completati",
      "input": "CSV di quattro eventi su lab-01 e lab-02. Email riservate agli esempi, nessun dato del computer o di utenti reali.",
      "method": "Esecuzione VQL locale: filtro login_failed e ordinamento per UTC. Seconda query con evento inesistente. Nessun agente, servizio o server distribuito.",
      "expected": "Due eventi login_failed, ordinati 09:10 e 09:12 UTC. Nessun risultato per event_absent.",
      "observed": "Due righe esatte nel caso positivo. Output vuoto nel controllo negativo. Le quattro righe originali sono preservate.",
      "limit": "È una prova di parsing CSV e filtro VQL, non una raccolta forense completa né un test di distribuzione su endpoint. Versioni e permessi del sistema operativo possono influire sull’avvio.",
      "conclusion": "Il risultato è confrontabile riga per riga con la fixture: nessuna interpretazione degli eventi come attacco è implicita.",
      "source": "https://docs.velociraptor.app/docs/cli/commands/query/",
      "result": "risultati/velociraptor.json",
      "command": "velociraptor query -f query.vql --format json",
      "fixture": "events.csv"
    }
  ],
  "assistant": {
    "model": "Qwen3-1.7B-q4f16_1-MLC",
    "cases": 5,
    "model_drafts": 4,
    "literal_fallbacks": 1,
    "important": "Sono prove del flusso con controllo, non cinque risposte IA garantite corrette.",
    "tests": [
      {
        "name": "Sintesi italiana: file, orari e incertezza",
        "input": "Campione sintetico. Alle 09:10 UTC è stato acquisito il file esempio.txt. Alle 09:12 UTC è stato calcolato il suo hash SHA-256. Alle 09:18 UTC una copia è stata aperta per analisi. Autore e provenienza precedente non sono noti.",
        "mode": "summary",
        "output": "1. Acquisito il file esempio.txt alle 09:10 UTC.  \n2. Calcolato il hash SHA-256 alle 09:12 UTC.  \n3. Aperta una copia per analisi alle 09:18 UTC.  \n\nLIMITE: Manca l'autore e la provenienza dell'originale.",
        "warnings": [],
        "finishReason": "stop",
        "effectiveMode": "model-draft",
        "rejectedDraft": null,
        "elapsedSeconds": 7.7,
        "stopped": false,
        "checks": {
          "identifiers": true,
          "notEcho": true,
          "controlled": true,
          "complete": true,
          "noThink": true,
          "uncertainty": true,
          "noMetadataInvention": true
        },
        "pass": true
      },
      {
        "name": "Cronologia: tre eventi in ordine",
        "input": "Campione sintetico. Alle 09:10 UTC è stato acquisito il file esempio.txt. Alle 09:12 UTC è stato calcolato il suo hash SHA-256. Alle 09:18 UTC una copia è stata aperta per analisi. Autore e provenienza precedente non sono noti.",
        "mode": "timeline",
        "output": "09:10 UTC - Acquisizione del file esempio.txt  \n09:12 UTC - Calcolo del hash SHA-256  \n09:18 UTC - Apertura di una copia per analisi",
        "warnings": [],
        "finishReason": "stop",
        "effectiveMode": "model-draft",
        "rejectedDraft": null,
        "elapsedSeconds": 4.3,
        "stopped": false,
        "checks": {
          "identifiers": true,
          "notEcho": true,
          "controlled": true,
          "complete": true,
          "noThink": true,
          "actions": true,
          "noMetadataInvention": true,
          "order": true
        },
        "pass": true
      },
      {
        "name": "Log sintetici: nessuna attribuzione personale",
        "input": "Log sintetici del 27 ottobre 2026. Alle 10:00 UTC lab-01 registra un accesso fallito per qa@example.invalid. Alle 10:02 UTC lab-01 registra un secondo accesso fallito. Alle 10:05 UTC registra un accesso riuscito. Non sono disponibili indirizzo IP, motivazione o identità della persona.",
        "mode": "summary",
        "output": "Citazioni letterali, nell’ordine della fonte:\n\n• Log sintetici del 27 ottobre 2026.\n• Alle 10:00 UTC lab-01 registra un accesso fallito per qa@example.invalid.\n• Alle 10:02 UTC lab-01 registra un secondo accesso fallito.\n• Alle 10:05 UTC registra un accesso riuscito.\n• Non sono disponibili indirizzo IP, motivazione o identità della persona.",
        "warnings": [
          "Identificativi o orari assenti dalla fonte: 10:00, 1.0.",
          "Riferimenti della fonte omessi o modificati: 10:00 UTC."
        ],
        "finishReason": "stop",
        "effectiveMode": "literal-extraction",
        "rejectedDraft": "1. Accessi falliti registrati a lab-01 il 27 ottobre 2026 alle 10:00 e 10:02 UTC.  \n2. Accesso riuscito registrato alle 10:05 UTC, ma mancano dettagli come IP, motivazione e identità.  \n3. Manca l'identità della persona e informazioni sul motivo dell'accesso.  \nLIMITE: Manca l'identità della persona e dettagli sul motivo dell'accesso.  \nVERSIONE: 1.0 | ORARIO: 27 ottobre 2026 | IDENTIFICATO: lab-01",
        "elapsedSeconds": 13.9,
        "stopped": false,
        "checks": {
          "identifiers": true,
          "notEcho": true,
          "controlled": true,
          "complete": true,
          "noThink": true,
          "uncertainty": true,
          "noMetadataInvention": true
        },
        "pass": true
      },
      {
        "name": "CVE: segnalazione distinta dallo sfruttamento",
        "input": "Inventario sintetico: una dipendenza riporta la versione lodash 4.17.20. Il database segnala CVE-2021-23337 per questa versione. Non sono stati verificati configurazione, raggiungibilità del codice o sfruttamento sul sistema. La segnalazione richiede una verifica tecnica.",
        "mode": "summary",
        "output": "1. Inventario sintetico: versione lodash 4.17.20 segnata come vulnerabile con CVE-2021-23337.  \n2. Database segnala vulnerabilità, ma non verificata configurazione, accesso o sfruttamento.  \n3. Segnalazione richiede verifica tecnica.  \nLIMITE: Manca informazione su configurazione, accesso e sfruttamento del sistema.  \nVersione: 4.17.20  \nOrario: [da determinare]",
        "warnings": [],
        "finishReason": "stop",
        "effectiveMode": "model-draft",
        "rejectedDraft": null,
        "elapsedSeconds": 10.9,
        "stopped": false,
        "checks": {
          "identifiers": true,
          "notEcho": true,
          "controlled": true,
          "complete": true,
          "noThink": true,
          "uncertainty": true,
          "noMetadataInvention": true
        },
        "pass": true
      },
      {
        "name": "Domande: informazioni mancanti",
        "input": "Log sintetici del 27 ottobre 2026. Alle 10:00 UTC lab-01 registra un accesso fallito per qa@example.invalid. Alle 10:02 UTC lab-01 registra un secondo accesso fallito. Alle 10:05 UTC registra un accesso riuscito. Non sono disponibili indirizzo IP, motivazione o identità della persona.",
        "mode": "questions",
        "output": "1. Qual è l'identità della persona?  \n2. Cosa è l'indirizzo IP mancante?  \n3. Qual è la motivazione mancante?",
        "warnings": [],
        "finishReason": "stop",
        "effectiveMode": "model-draft",
        "rejectedDraft": null,
        "elapsedSeconds": 3.5,
        "stopped": false,
        "checks": {
          "identifiers": true,
          "notEcho": true,
          "controlled": true,
          "complete": true,
          "noThink": true,
          "noMetadataInvention": true,
          "questions": true,
          "missingTopics": true,
          "notKnownTimes": true
        },
        "pass": true
      }
    ]
  },
  "review": "Revisione diretta e test. Worker Qwen separato senza letture verificabili: revisione indipendente non accettata.",
  "download_integrity": {
    "fixtures": "campioni-sintetici.zip",
    "ela": "ela-originale.zip",
    "note": "Immagini singole ottimizzate dall’hosting: usare i file ZIP per preservare byte e metadati. Il file YAML individuale resta protetto dalla configurazione dell’hosting ed è incluso nel ZIP."
  }
}