Aggiornato il 14 settembre 2026. Un audit di uno smart contract può essere una prova utile, ma non costituisce un certificato di sicurezza. La domanda più importante non è "Questo progetto è stato sottoposto ad audit?", bensì "Cosa è stato esattamente verificato, quale versione è stata esaminata, cosa è rimasto irrisolto e il codice distribuito corrisponde ancora al sistema esaminato?".
Le linee guida di sicurezza di Ethereum avvertono esplicitamente che gli audit non sono una soluzione miracolosa e non possono individuare ogni bug. Allo stesso modo, il flusso di lavoro di audit di OpenZeppelin considera ambito, risultati, gravità, stato di risoluzione e revisione delle correzioni come elementi separati del quadro di sicurezza. L'obiettivo pratico per un acquirente è quindi quello di leggere il report come un documento di valutazione del rischio, non come un semplice strumento di marketing.
Lista di controllo rapida per i segnali di allarme
| Cosa controllare |
Segnale a basso rischio |
Tartaruga Rossa |
| Ambito di applicazione |
Vengono elencati in dettaglio repository, file, contratti, reti ed esclusioni. |
Il termine "verificato" viene utilizzato senza specificarne chiaramente l'ambito di applicazione. |
| Versione |
Viene identificato l'hash del commit, il tag o la versione esatta del codice. |
Nessun commit o codice distribuito è stato modificato dopo l'audit. |
| Risultati critici/elevati |
Problema risolto e ricontrollato in modo indipendente. |
Aperto, parzialmente risolto, accettato senza una valida attenuante o revisione senza soluzione. |
| Poteri amministrativi |
I ruoli sono documentati e protetti tramite firma multipla/blocco temporale, ove opportuno. |
Un singolo portafoglio può essere utilizzato per creare, sospendere, svuotare, aggiornare o modificare i parametri istantaneamente. |
| Aggiornabilità |
Il modello proxy e l'autorità di aggiornamento sono inclusi nell'ambito del progetto e chiaramente documentati. |
L'implementazione verificata può essere sostituita dopo la verifica senza ritardi o revisioni significative. |
| Dipendenze e oracoli |
Vengono identificati i presupposti di fiducia e i sistemi esterni. |
Il rapporto esclude un componente che controlla i prezzi, la custodia, i bridge o il comportamento del protocollo principale. |
| età di revisione |
Abbastanza recente per il codice sorgente attuale, con revisioni successive a modifiche importanti. |
Vecchi audit riutilizzati come prova per un prodotto sostanzialmente diverso. |
Passaggio 1: Verificare che il rapporto sia autentico e provenga dal revisore dei conti.
Didascalia: Iniziate leggendo l'identità del rapporto, la data, il revisore e il riepilogo della gravità prima di esaminare i singoli risultati.
Verificato: i report di audit affidabili solitamente identificano il progetto, il periodo di valutazione, il revisore e il codice esaminato. I report pubblicati da OpenZeppelin e i report di Consensys Diligence includono comunemente una sezione relativa all'ambito di applicazione e alla revisione del codice. Ad esempio, il report USDKG di Consensys identifica l'hash esatto del commit esaminato, mentre i report di OpenZeppelin specificano di routine il repository e il commit o la pull request oggetto dell'analisi.
Errore comune: un PDF caricato dal progetto è automaticamente affidabile perché contiene il logo di un revisore. Questo non basta. I file possono essere obsoleti, modificati o decontestualizzati.
Azione: reperire il report sul sito o nel repository del revisore, ove possibile. Confrontare il nome del progetto, la data del report, l'URL e i dettagli della versione con la copia condivisa dal team dei token.
Riferimenti principali: documentazione di audit di OpenZeppelin e audit di Diligence USDKG di Consensys .
Fase 2: Leggere l'ambito prima di esaminare i risultati
Didascalia: Il badge di audit è meno importante della portata: identifica esattamente quali contratti e componenti sono stati esaminati.
Un audit copre solo ciò che rientra nel suo ambito di applicazione. Un report può esaminare un contratto di token, ma escludere lo staking, i bridge, i vault, la governance, l'infrastruttura front-end, le dipendenze esterne o un successivo aggiornamento.
Verificato: l'audit Panoptic di OpenZeppelin elenca il suo ambito e nota anche che le correzioni sono state distribuite su diversi repository. Un altro report di OpenZeppelin su un emulatore EVM afferma esplicitamente che sono state verificate solo le modifiche in una specifica pull request, non i file completi nella loro interezza. Questi esempi mostrano perché affermare che "il progetto è stato verificato" può essere una conclusione troppo generica.
Idea sbagliata: se un contratto nell'ecosistema viene sottoposto a verifica, l'intero protocollo è coperto. Non è così.
Azione: elenca ogni componente in grado di detenere fondi, trasferire fondi, impostare prezzi, modificare autorizzazioni, coniare token o aggiornare contratti. Quindi, indica se ciascuno di essi rientra nell'ambito di verifica. Qualsiasi campo mancante importante richiederà una domanda di approfondimento.
Riferimenti di esempio: audit OpenZeppelin Panoptic e audit OpenZeppelin EVM Emulator .
Passaggio 3: associare l'hash del commit al codice effettivamente distribuito
Didascalia: Un report è collegato a una revisione del codice; verificare che la revisione sottoposta ad audit corrisponda ancora ai contratti implementati.
Questo è uno dei controlli più trascurati. Un audit potrebbe essere stato eccellente, ma il progetto potrebbe aver modificato il codice in seguito.
Verificato: la documentazione di Code Inspector di OpenZeppelin afferma che i report sono collegati a un commit specifico e le linee guida di Ethereum sulla verifica dei contratti spiegano che il codice sorgente verificato aiuta gli utenti a stabilire che il codice sorgente pubblicato corrisponde al bytecode distribuito.
Errore comune: "verificato il mese scorso" significa che il contratto attualmente in vigore è quello verificato. Il solo trascorrere del tempo non è sufficiente a dimostrarlo.
Azione: individua l'hash del commit, il tag o la pull request nel report. Quindi controlla la documentazione di distribuzione del progetto e il codice sorgente verificato sul relativo block explorer. Se l'implementazione distribuita è più recente, cerca un audit di follow-up o una revisione delle differenze documentata.
Fonti principali: documentazione di OpenZeppelin Code Inspector e guida alla verifica dei contratti di Ethereum.org .
Passaggio 4: Trattare il rilevamento dello stato con la stessa serietà della gravità
Didascalia: "Critico", "Elevato" o "Medio" è solo una parte della storia; verifica se ogni problema è stato risolto, parzialmente risolto o è ancora aperto.
La gravità indica la potenziale importanza di un problema. Lo stato indica cosa è successo in seguito. Gli strumenti di audit di OpenZeppelin distinguono stati come risolto, parzialmente risolto, riconosciuto come non risolto e nessuna risposta.
Errore comune: la frase "audit completato" significa che il progetto ha risolto tutto. Non è così. L'audit può essere completato anche se rimangono ancora delle criticità da risolvere.
Azione: creare un breve elenco di tutti i problemi critici e di elevata gravità, quindi registrare lo stato finale e la documentazione relativa alla revisione della soluzione. Per i problemi di media gravità, prestare particolare attenzione quando più problematiche indicano la stessa debolezza di progettazione, come il controllo degli accessi, la manipolazione dei prezzi o gli errori contabili.
Non bisogna però scartare a priori i risultati di minore gravità. La loro importanza dipende dal contesto del sistema, dalle combinazioni con altri problemi e da come gli attori privilegiati possono utilizzare la funzionalità interessata.
Passaggio 5: Leggere i risultati, l'impatto, i prerequisiti e la soluzione, non solo il titolo.
Didascalia: Le etichette di gravità sono un punto di partenza; è fondamentale comprendere le condizioni di sfruttamento, le risorse interessate e il ragionamento del revisore.
Un risultato utile di solito spiega cosa può andare storto, perché è importante, il percorso del codice rilevante, i prerequisiti e una raccomandazione. Un risultato "Elevato" che richiede un amministratore con privilegi compromessi può rappresentare un rischio pratico diverso rispetto a uno sfruttamento senza autorizzazioni che qualsiasi utente può attivare.
Verificato: OpenZeppelin descrive la gravità dei problemi come un riflesso di fattori quali impatto, probabilità e difficoltà di sfruttamento. L'analisi di Trail of Bits su 246 vulnerabilità relative a smart contract ha inoltre rilevato che i problemi più gravi si presentano in diverse categorie, non solo nelle classi di bug più note come la reentrancy. Il loro set di dati ha evidenziato il controllo degli accessi, l'autenticazione, la temporizzazione, i calcoli numerici, la validazione e altre classi come importanti fonti di rischio.
Idea sbagliata: la rientranza è l'unico bug degli smart contract di cui ci si debba preoccupare. Non è così. La logica di business, il controllo degli accessi, la validazione, la progettazione dell'oracolo e la contabilità possono essere altrettanto importanti.
Azione: per ogni problema grave, rispondere a quattro domande: Chi può causarlo? Cosa possono guadagnare o perdere? Quali presupposti sono necessari? È stata esaminata la soluzione esatta?
Riferimenti principali: modello di problemi di audit di OpenZeppelin , analisi dei risultati dell'audit di Trail of Bits e considerazioni sulla sicurezza di Solidity .
Passaggio 6: Esaminare i ruoli privilegiati, le chiavi di amministrazione, la sospensione, la creazione di nuove licenze e i diritti di aggiornamento.
Didascalia: Le funzioni privilegiate meritano un'attenzione particolare perché un percorso di codice sicuro può comunque comportare rischi di governance o di gestione delle chiavi.
Molti protocolli includono deliberatamente ruoli privilegiati. Ciò non li rende automaticamente insicuri, ma modifica il modello di fiducia.
Verificato: le linee guida di sicurezza per gli smart contract di Ethereum avvertono che un singolo proprietario può diventare un punto critico di vulnerabilità. Descrivono il controllo degli accessi basato sui ruoli e il controllo multifirma come metodi per ridurre tale rischio. La documentazione di OpenZeppelin relativa al timelock spiega che l'esecuzione ritardata può dare agli utenti il tempo di esaminare le azioni di manutenzione e di uscire quando opportuno.
Idea sbagliata: "assenza di vulnerabilità critiche" significa che gli amministratori non possono arrecare danno agli utenti. La severità degli audit e il potere di governance sono questioni diverse.
Azione: cerca nel report termini come owner, admin, role, multisig, timelock, pause, mint, upgrade, blacklist, e withdraw. Quindi identifica chi ricopre ciascun ruolo oggi e con quale rapidità tale ruolo può agire.
Riferimenti principali: Linee guida sulla sicurezza degli smart contract di Ethereum e documentazione sul controllo degli accessi di OpenZeppelin .
Passaggio 7: Verifica dell'aggiornabilità, degli oracoli, dei bridge e di altri presupposti di fiducia esterni
Didascalia: Verifica il confine di fiducia, non solo i file Solidity: proxy, oracoli, bridge e dipendenze esterne possono alterare il rischio reale.
Un proxy aggiornabile può mantenere lo stesso indirizzo pubblico pur modificando la logica di implementazione. Gli oracoli possono fornire prezzi che determinano le liquidazioni. I bridge possono introdurre presupposti di custodia o validazione separati. Le librerie e i protocolli esterni possono fallire in modo indipendente.
Verificato: OpenZeppelin documenta che i sistemi basati su proxy separano un indirizzo proxy stabile dal codice di implementazione modificabile. La sua documentazione avverte inoltre che l'aggiornabilità richiede un'attenta autorizzazione. La guida alla sicurezza di Ethereum spiega il rischio di manipolazione dell'oracolo e osserva che input di prezzo errati possono causare l'esecuzione di contratti con dati non validi.
Idea sbagliata: il codice sorgente verificato all'indirizzo proxy dimostra che il comportamento futuro non può cambiare. Per i sistemi aggiornabili, questo non è necessariamente vero.
Azione: determinare se il contratto è aggiornabile, chi autorizza gli aggiornamenti, se gli aggiornamenti sono in ritardo e se l'implementazione corrente è verificata. Quindi elencare tutti i sistemi esterni il cui malfunzionamento potrebbe influire sui fondi degli utenti.
Riferimenti principali: documentazione sui proxy di OpenZeppelin e linee guida sulla sicurezza degli smart contract di Ethereum .
Fase 8: Prendere una decisione di acquisto/evitare/indagare in base al rischio residuo
Didascalia: La decisione finale dovrebbe riflettere i rischi che permangono dopo le correzioni, non la presenza di un badge di audit.
Anche dopo le correzioni, il rischio rimane. OpenZeppelin ha esplicitamente dichiarato nei rapporti di audit pubblicati che le revisioni a tempo limitato non possono garantire l'individuazione di ogni bug o rischio. Nell'audit di Audius, ad esempio, i revisori hanno raccomandato test beta, un sistema di ricompense per la segnalazione di bug e future revisioni a seguito di un numero elevato di gravi problematiche riscontrate. Nell'audit di Panoptic, hanno raccomandato un monitoraggio aggiuntivo e un ulteriore audit dopo modifiche significative al codice.
Errore comune: si crede che audit multipli riducano a zero il rischio degli smart contract. Non è così. Migliorano la sicurezza, ma quest'ultima dipende anche dall'accuratezza dell'implementazione, dalle operazioni, dalla sicurezza delle chiavi di amministrazione, dal monitoraggio, dalla risposta agli incidenti, dalle ipotesi economiche e dai futuri aggiornamenti.
Azione: classificare il progetto in una delle tre categorie:
- Acquista / continua la ricerca: il codice attualmente distribuito corrisponde all'ambito esaminato; i risultati gravi sono stati risolti e ricontrollati; i privilegi sono accettabili e trasparenti; le dipendenze esterne sono comprese.
- Approfondire la questione: mancano informazioni chiave, l'audit è precedente ad aggiornamenti importanti oppure alcuni problemi di media/alta entità sono stati risolti o riconosciuti solo parzialmente.
- Da evitare per ora: i problemi critici/elevati persistono, l'implementazione non corrisponde alla revisione verificata, i contratti principali erano fuori ambito o gli amministratori hanno divulgato in modo inadeguato il controllo unilaterale sui fondi degli utenti.
Come interpretare le frasi più comuni utilizzate nei processi di revisione contabile
| Frase |
Cosa significa solitamente |
La tua prossima azione |
| "Nessun problema critico rilevato" |
La revisione non ha individuato alcuna anomalia critica nell'ambito e nei tempi previsti. |
Leggere comunque le sezioni Alto, Medio, presupposti di fiducia, esclusioni e poteri amministrativi. |
| “Risolto” |
Il progetto ha modificato il codice e il revisore ha accettato la correzione inclusa nel set di correzioni esaminato. |
Conferma che la correzione sia inclusa nel codice distribuito. |
| "Riconosciuto" |
Il team accetta o riconosce il problema, ma potrebbe non aver modificato il codice. |
Leggi la motivazione; non considerarlo equivalente a un prezzo fisso. |
| “Parzialmente risolto” |
La misura di mitigazione riduce il rischio ma non elimina completamente il problema. |
Comprendere il percorso di sfruttamento o l'ipotesi rimanente. |
| “Fuori dall'ambito di applicazione” |
Il revisore non ha valutato tale componente. |
Non dedurre la sicurezza di quel componente dal report. |
| “Presunto affidabile” |
Il modello di audit si basa sul presupposto che tale attore o dipendenza si comporti correttamente. |
Decidi se sei disposto ad accettare tale presupposto di fiducia. |
Cinque segnali d'allarme che meritano un arresto immediato
- Il progetto non può mostrare il report originale ospitato dal revisore dei conti. Uno screenshot o un logo non sono sufficienti.
- Il report non ha un ambito o una versione riproducibili. Senza un commit, un tag o i file esatti, è difficile sapere cosa è stato esaminato.
- Le questioni critiche o di elevata importanza rimangono aperte senza una solida motivazione documentata.
- Il protocollo è aggiornabile, ma il rapporto tratta solo marginalmente delle autorizzazioni di aggiornamento o dei ruoli privilegiati.
- L'implementazione è cambiata sostanzialmente dopo la verifica e non è disponibile alcuna revisione successiva.
Se si presenta una qualsiasi di queste situazioni, il passo successivo più sicuro non è quello di razionalizzarla. Sospendi la decisione di investimento e richiedi prove aggiornate.
Una routine di audit e reportistica pre-acquisto di 10 minuti
- Apri il rapporto dal sito ufficiale del revisore dei conti.
- Registra la data del report, il repository, l'ambito e l'hash del commit.
- Conferma i contratti attivati e gli indirizzi di implementazione.
- Leggere tutti i risultati critici e di livello elevato.
- Verifica lo stato finale di ogni problema serio.
- Ricerca di ruoli privilegiati e poteri di emergenza.
- Identificare gli aggiornamenti dei proxy e chi li controlla.
- Identificare oracoli, ponti, sistemi di custodia e dipendenze esterne.
- Cerca le modifiche apportate dopo il commit verificato.
- Prima di acquistare, decidi quale rischio residuo sei disposto ad accettare.
In conclusione
Un audit di uno smart contract è la prova di una revisione, non una dimostrazione di sicurezza. Il segnale più forte non è il logo dell'auditor, ma la catena di prove che collega un ambito chiaramente definito, una revisione precisa del codice, risultati significativi, correzioni verificate, bytecode implementato e controlli operativi trasparenti.
L'errore di lettura più pericoloso è fermarsi alla parola "verificato". La domanda più utile è: cosa potrebbe ancora andare storto dopo questa verifica? Se si riesce a rispondere chiaramente a questa domanda e si è a proprio agio con i rischi rimanenti, si sta prendendo una decisione più consapevole. Se l'ambito, lo stato delle correzioni, i poteri di amministratore o la versione distribuita non sono chiari, la cosa giusta da fare è indagare prima di acquistare.
Fonti primarie
Questo articolo ha scopo puramente informativo e non costituisce consulenza finanziaria. Un audit non può eliminare i rischi relativi a smart contract, governance, oracoli, economia, operatività o mercato.