Lire un rapport d'audit de smart contract sans coder

En 2016, un exploit de réentrance a vidé 60 millions de dollars d'un projet baptisé The DAO. Le code était pourtant public, et un audit aurait pu repérer la faille. Dix ans plus tard, le même type de document — le rapport d'audit — circule sur presque tous les projets crypto sérieux, souvent affiché comme un sceau de confiance sur un site de présentation. Le problème, c'est qu'un investisseur particulier n'a généralement ni le temps ni les compétences pour vérifier si ce sceau est mérité. Il existe pourtant une grille de lecture accessible, qui ne demande pas de savoir programmer, pour distinguer un audit qui protège réellement d'un document qui rassure sans fondement.
Pourquoi un audit ne pardonne pas l'erreur
Un smart contract non upgradeable, une fois déployé sur une blockchain, ne peut plus être modifié : son code devient immuable. Si une faille s'y trouve, elle y reste de façon permanente, à moins que l'équipe ne déploie un nouveau contrat et ne migre toute la liquidité des utilisateurs vers celui-ci — une opération lourde, risquée et pas toujours possible. Certains projets contournent cette rigidité en déployant le contrat derrière un proxy upgradeable, dont la logique peut être remplacée sans changer d'adresse ni migrer la liquidité : le risque d'une faille persistante se déplace alors vers la gouvernance de cette mise à jour. C'est ce qui distingue fondamentalement un bug dans une application classique, corrigible par une mise à jour, d'une faille dans un contrat déjà en production.
L'enjeu financier n'a rien d'abstrait. Selon le guide de femtosec.io, plus de 1,8 milliard de dollars ont été perdus à cause d'exploits de smart contracts sur la seule année 2023. Et selon le guide de manimama.eu, plus de 90 % des nouvelles startups blockchain présentent encore aujourd'hui des risques élevés pour les investisseurs. Dans ce contexte, le rapport d'audit n'est pas un détail administratif : c'est souvent le seul document qui donne une idée tangible de ce qui a été vérifié, et de ce qui ne l'a pas été.
La grille de lecture, section par section
Un rapport d'audit professionnel suit une structure assez constante d'un cabinet à l'autre, ce qui permet de savoir où chercher l'information utile sans décortiquer le code source.
Le résumé exécutif
La première section, l'Executive Summary, est rédigée pour être comprise par des parties prenantes non techniques — investisseurs, membres d'une exchange, utilisateurs. C'est le point de départ logique pour un lecteur non développeur : il donne le nombre de constats par niveau de gravité et une appréciation générale de la posture de sécurité du projet.La matrice de risque
Vient ensuite la Risk Matrix, qui classe chaque constatation selon cinq niveaux de sévérité :- Critical — faille exploitable immédiatement, pouvant entraîner une perte totale de fonds
- High — risque sérieux, exploitation plus complexe ou conditionnelle
- Medium — problème réel mais à impact limité ou nécessitant des conditions particulières
- Low — défaut mineur, rarement exploitable seul
- Informational — remarque de bonne pratique, sans risque direct
Les constats détaillés
Chaque vulnérabilité listée dans les Detailed Findings est décrite avec sa sévérité, son impact concret, sa cause racine et une recommandation de correction. Un lecteur attentif peut donc vérifier, pour chaque ligne Critical ou High, si le rapport explique clairement le scénario de perte et la solution proposée — et pas seulement un intitulé vague.La version finale, et seulement elle
Un point souvent ignoré des investisseurs : dans l'idéal, le rapport final n'est délivré qu'après résolution et vérification de tous les constats critiques et de haute priorité — mais ce n'est pas une règle universelle. Un rapport peut être qualifié de « final » alors que des constats Critical ou High restent ouverts, si le client ne les a pas corrigés ou a accepté le risque ; le document doit alors en préciser le statut de correction. C'est ce document-là, et seulement celui-là, qui est destiné à être partagé avec les investisseurs, les exchanges et les utilisateurs. Un rapport « initial » ou « preliminary » qui circule encore avec des Critical non résolus n'a pas la même valeur qu'un rapport final, dont il convient de toute façon de vérifier le statut des constats restants.Que révèlent les failles passées ?
La sévérité affichée dans une matrice de risque prend tout son sens quand on la relie à des incidents réels. Le hack de The DAO en 2016, qui a coûté 60 millions de dollars, reposait sur une faille de réentrance : un contrat externe était appelé avant que l'état interne du contrat ne soit mis à jour, ce qui permettait de retirer des fonds de façon récursive, encore et encore, avant que le solde ne soit corrigé. C'est exactement le type de scénario qu'un audit sérieux classe en Critical et documente avec un scénario d'exploitation précis.
D'autres classes de vulnérabilités existent. En 2022, Mango Markets a perdu 117 millions de dollars via une manipulation de l'oracle de prix à l'aide de prêts éclair (flash loans) : l'attaquant a temporairement faussé le prix de référence utilisé par le protocole pour emprunter bien plus que ce que ses garanties justifiaient. En 2023, Euler Finance a subi une perte de 197 millions de dollars, là aussi via un flash loan manipulant l'état du contrat. Ces trois cas, échelonnés sur sept ans, montrent que le risque n'a pas disparu avec la généralisation des audits — il s'est simplement déplacé vers des mécanismes plus sophistiqués que la seule relecture de code ne suffit pas toujours à anticiper.
Quels signaux distinguent un audit rigoureux ?
Tous les rapports ne se valent pas, même lorsqu'ils affichent une matrice de risque et un résumé exécutif en bonne et due forme. Quelques éléments, repérables sans compétence technique, distinguent un audit sérieux d'un exercice de façade :
- Un gel du code (code freeze) mentionné : l'audit doit se dérouler pendant une période où aucune nouvelle fonctionnalité ni modification n'est introduite dans le code, sous peine d'invalider les constats. Un rapport qui ne précise pas cette condition laisse planer un doute sur ce qui a réellement été testé.
- Des preuves d'exploitabilité (proof-of-concept) : pour les constats significatifs, les auditeurs sérieux écrivent des scripts d'exploit testés dans un environnement forké, ce qui démontre que la faille est réellement exploitable et pas seulement théorique.
- Une étape de vérification des correctifs : après que l'équipe de développement a appliqué ses corrections, l'équipe d'audit doit relire les changements pour confirmer que chaque problème est résolu sans en introduire un nouveau. L'absence de cette section dans un rapport final est un signal d'alerte.
- Une couverture de tests élevée côté développeurs : les guides de préparation à l'audit recommandent une couverture de tests d'au moins 80 % des lignes de code avant de lancer la démarche. Un rapport qui mentionne ce chiffre traduit un projet préparé en amont, pas un audit bâclé en urgence.
Qu'est-ce qu'un audit ne couvre pas ?
Un audit de smart contract reste un examen du code, pas une évaluation complète d'un projet. La due diligence technique repose principalement sur cet audit, mené par des experts indépendants en cybersécurité pour détecter des erreurs logiques et des vulnérabilités logicielles, mais elle devrait aussi porter sur des éléments que le rapport ne couvre pas toujours : l'architecture globale du projet, son degré de décentralisation, la qualité de l'infrastructure serveur, et l'historique d'un éventuel programme de bug bounty.
Certains constats méritent une attention particulière même s'ils apparaissent en sévérité modérée dans la matrice de risque. Un audit qui révèle du code de mauvaise qualité ou la présence d'access keys centralisées — des identifiants de contrôle détenus par une seule autorité, capable par exemple de modifier des paramètres clés ou de retirer des fonds — signale un risque inacceptable de hack ou de rug pull, c'est-à-dire un retrait soudain de liquidité organisé par l'équipe elle-même. Un rapport propre sur le plan technique ne protège donc pas contre ce type de risque si les clés d'administration restent concentrées entre quelques mains.
Questions fréquentes
Un audit « propre » élimine-t-il le risque de rug pull ? Non. Un audit évalue la sécurité du code, pas la gouvernance du projet. Même un rapport sans constat Critical peut cohabiter avec des access keys centralisées entre les mains de l'équipe fondatrice. Pour écarter ce risque, il faut regarder au-delà du rapport d'audit : le degré de décentralisation du projet, la qualité de son infrastructure, et l'existence d'un programme de bug bounty actif.
Pourquoi certains projets ne publient-ils jamais de rapport final ? Un projet qui communique uniquement sur un rapport préliminaire, ou qui n'en publie aucun, peut simplement ne pas être arrivé au stade où tous les constats critiques et de haute priorité ont été résolus et vérifiés — ce qui ne signifie pas automatiquement une fraude, mais justifie d'attendre avant d'engager des fonds.
Savoir repérer une matrice de risque et distinguer un rapport final d'une version préliminaire ne transforme pas un particulier en auditeur. Cela lui donne en revanche un filtre concret pour éviter d'accorder une confiance aveugle à un logo d'audit affiché sur une page d'accueil. Reste une question que peu de rapports résolvent entièrement : qui vérifie que l'équipe d'audit elle-même n'a pas d'intérêt financier dans le projet qu'elle examine ? Cette zone grise, plus que la technique pure, continue de peser sur la fiabilité du document que l'investisseur tient entre les mains.
--- Cet article est publié à titre informatif uniquement et ne constitue pas un conseil en investissement. Consultez un conseiller financier agréé avant toute décision d'investissement.
