Je vous raconte une erreur que j’ai moi-même commise : au début, je n’avais pas du tout compris ça.

Dans la DeFi, les dépôts, les prêts et les échanges sont exécutés automatiquement par des contrats intelligents. Il n’y a ni vérification humaine ni service client capable de récupérer les fonds envoyés par erreur. Quand un contrat est bien écrit, il constitue la règle la plus fiable qui soit ; quand il comporte une erreur, sa faille est tout aussi scrupuleusement « exécutée ».

$ETH Ethereum est l’une des premières blockchains publiques à prendre en charge les contrats intelligents généralistes. Actuellement : 2347.97 (24 h : +0.86 %).

▍Le code fait loi, et les failles aussi

Une fois déployés sur la blockchain, les contrats intelligents s’exécutent automatiquement selon leur code. Cela apporte transparence et prévisibilité : tout le monde peut lire le code, et les règles d’un contrat non modifiable ne changeront pas au gré de la volonté de quelqu’un.

À l’inverse, dès qu’une faille dans le code est découverte et exploitée, les fonds peuvent être détournés en quelques transactions, et il est souvent difficile de les récupérer. The DAO, en 2016, en est un exemple : le contrat a été attaqué à cause d’une faille de réentrance. Ethereum a ensuite réagi par un hard fork, tandis que la chaîne d’origine, qui n’a pas bifurqué, a continué sous le nom d’Ethereum Classic (ETC).

▍Que couvre exactement un audit ?

Un audit de sécurité est une vérification effectuée par une équipe de sécurité tierce, à un moment donné, sur une version précise du code. Le rapport d’audit répertorie généralement les problèmes détectés, leur niveau de gravité et indique si le projet les a corrigés.

Les vérifications portent souvent sur les problèmes de réentrance, les erreurs de contrôle des permissions, les problèmes de précision des calculs et les risques de manipulation des oracles, entre autres. Un audit aide à détecter et à réduire ces vulnérabilités courantes, mais il reste limité par le temps, les ressources humaines et le périmètre de l’audit.

▍Pourquoi des incidents surviennent-ils malgré un audit ?

Premièrement, un audit ne couvre que le périmètre de code spécifié. Les contrats qui en sont exclus et les fonctionnalités ajoutées par la suite n’en font pas partie. Si le code est modifié après l’audit, ou si la version réellement déployée diffère de celle qui a été auditée, les conclusions ne peuvent pas s’appliquer telles quelles.

Deuxièmement, certains risques ne viennent pas du code lui-même : un oracle ou un autre protocole dont dépend le protocole peut rencontrer un problème, la clé d’administrateur disposant des droits de mise à niveau peut être volée, ou le site web peut être falsifié pour inciter les utilisateurs à signer des transactions malveillantes. Tous ces cas peuvent entraîner des pertes.

▍Que peuvent faire les utilisateurs ordinaires ?

Lorsque vous consultez un rapport d’audit, prêtez attention à sa date, à son périmètre et aux problèmes qui n’ont pas encore été corrigés. Ne vous arrêtez pas aux mots « audité ». Vous pouvez aussi vérifier si le contrat peut être mis à niveau unilatéralement et si les droits de mise à niveau sont contrôlés par une multisignature et un verrou temporel.

Les protocoles qui fonctionnent depuis longtemps et ont résisté à l’épreuve de volumes importants sont généralement considérés comme plus fiables, mais cela ne signifie pas qu’ils sont exempts de failles. Dans la DeFi, ne déposez donc que des fonds dont vous pouvez supporter la perte, répartissez les montants importants entre différents protocoles et pensez à révoquer les autorisations des protocoles que vous n’utilisez plus.

▍Quelques mots pour conclure

L’audit est un point de départ pour la sécurité, pas une fin en soi. Il est plus réaliste de considérer les risques liés aux contrats intelligents comme un coût inhérent à la participation à la DeFi que de se fier aux seuls mots « audité ». Les connaissances peuvent vous aider à éviter certains pièges, mais elles ne remplacent pas la gestion des risques.

Quels autres sujets aimeriez-vous découvrir ? Dites-le-moi dans les commentaires.