BlockPulseNews
Définition

Overflow : définition

Un overflow ou un underflow se produit lorsqu'un calcul dépasse la valeur maximale ou minimale qu'une variable peut contenir. Dans un smart contract, cette erreur peut fausser des soldes, d'où les vérifications ajoutées par défaut depuis Solidity 0.8.

Thème : Sécurité et arnaques

Overflow : comment ça marche ?

Les nombres d'un programme sont stockés sur un nombre fixe de bits. Un entier non signé de 8 bits, par exemple, va de 0 à 255. Si l'on ajoute 1 à 255, le résultat repart à 0 : c'est un overflow. Si l'on retire 1 à 0, on obtient 255 : c'est un underflow. Dans un smart contract qui gère des soldes, un tel bouclage peut permettre à un attaquant de se créer un solde gigantesque ou de contourner une vérification.

Avant la version 0.8 de Solidity, ces dépassements se produisaient silencieusement. Les développeurs utilisaient des bibliothèques comme SafeMath pour vérifier chaque opération. Depuis la version 0.8, le compilateur ajoute ces vérifications automatiquement : un dépassement provoque l'annulation de la transaction. Il reste possible de désactiver ces contrôles dans un bloc unchecked pour économiser du gas, ce qui réintroduit le risque si le développeur se trompe.

Un exemple concret

Un vieux contrat de token fictif, compilé avant Solidity 0.8 et sans SafeMath, permet de transférer des tokens en retirant le montant du solde de l'expéditeur. Un attaquant possédant 0 token demande à en envoyer 1. Le solde passe à la valeur maximale possible par underflow, et l'attaquant se retrouve avec une quantité astronomique de tokens.

Les risques à connaître

Les contrats anciens restent vulnérables s'ils n'utilisent pas de vérifications. Dans les contrats récents, le danger vient des blocs unchecked, du code en assembleur, ou des conversions entre types de tailles différentes, qui ne sont pas toujours contrôlées. D'autres langages et blockchains appliquent des règles différentes.

À ne pas confondre avec

  • Réentrance : La réentrance est une faille liée à l'ordre des appels entre contrats, alors que l'overflow est une erreur de calcul arithmétique.

Questions fréquentes sur Overflow

Les overflows sont-ils encore un risque avec Solidity récent ?

Beaucoup moins, car le compilateur annule les transactions en cas de dépassement depuis la version 0.8. Le risque subsiste dans les blocs unchecked, le code assembleur et certaines conversions de types.

Qu'est-ce que SafeMath ?

C'est une bibliothèque Solidity qui vérifiait chaque opération arithmétique pour empêcher les dépassements. Elle est devenue largement inutile depuis que Solidity intègre ces vérifications par défaut.

Dans le même thème : Sécurité et arnaques

Tous les termes du thème Sécurité et arnaques →

À lire

L'actualité : Sécurité et arnaques

Les derniers articles de BlockPulseNews sur ce sujet.

Approfondir avec l'Académie : La Sécurité Crypto Un module gratuit, en leçons courtes et quiz, pour maîtriser ce thème pas à pas.
Découvrir le module

Les autres termes en O

← Tout le lexique crypto de A à Z