Blog

Traduction automatique · Lire en anglais

Module SSO 2 - Vulnérabilités des contrats intelligents : plongée approfondie dans les attaques par réentrance

Les contrats intelligents offrent de la transparence mais comportent des risques. Cet article dévoile des vulnérabilités comme la réentrance, avec la perte de 150 M$ de DAO comme cas d'école. Un dépassement d'entier a causé le revers de 900 M$ de BeautyChain. DAOMaker a perdu 4 M$ à cause de failles de contrôle d'accès. Les attaques par prêt flash ont fait perdre 38 M$ à Harves Finance.

Par Markos Mebellis

Module SSO 2 - Vulnérabilités des contrats intelligents : plongée approfondie dans les attaques par réentrance
Sur cette page

Les contrats intelligents révolutionnent les industries mondiales par leur efficacité, leur transparence et leurs caractéristiques immuables. Pourtant, leur conception ouverte et automatisée les expose aussi à des risques. Pour maximiser leur potentiel tout en minimisant les menaces, il est essentiel de comprendre leurs vulnérabilités et les voies d'attaque possibles. La création et la maintenance de ces contrats exigent une attention particulière et le respect des bonnes pratiques. Cet article explore les vulnérabilités courantes, en les illustrant par des cas réels pour faciliter la compréhension. Examinons l'article suivant, gracieusement fourni par Salus Security.

Vulnérabilités clés :

**Réentrance :** Ici, les attaquants exploitent une faille en réentrant dans des fonctions avant que les opérations clés ne soient terminées ou que les valeurs ne soient mises à jour.

Réentrance sur une seule fonction : Cela se produit lorsqu'un contrat interagit avec un contrat malveillant, permettant à ce dernier de réentrer dans une fonction. Par exemple, des contrats malveillants peuvent réentrer continuellement dans la fonction 'withdrawBalance', siphonnant davantage d'ether avant que les soldes ne soient mis à jour.

Attaques notables :

  • The DAO (2016) : Après avoir levé 150 millions de dollars, il a été piraté en raison de vulnérabilités de codage. Cela a conduit à une scission du réseau Ethereum.
  • PolyDex (2021) : A perdu 500 k$ à cause d'une attaque par réentrance sur le contrat intelligent PLX Locker.
  • Bacon Protocol (2022) : A subi une perte de 1 M$ due à un bug de réentrance dans la fonction lend().
  • Lendf.Me (2020) : A perdu environ 24,7 millions de dollars répartis sur plusieurs cryptomonnaies.

**Réentrance inter-fonctions :** Elle découle d'états partagés entre différentes fonctions et d'une protection insuffisante contre la réentrance. L'exemple des 'balances' ci-dessus indique que malgré la protection de 'withdrawAll', les attaquants peuvent encore exploiter la fonction 'transfer'.

Incidents tristement célèbres :

  • DFX Finance (2022) : A perdu plus de 7 millions de dollars à cause d'une attaque exploitant une fonction sans protection contre la réentrance.
  • Hundred Finance (2022) : A perdu environ 6,5 millions de dollars après qu'une attaque par réentrance a exploité la fonction borrowFresh.
  • Fei Protocol (2022) : A perdu environ 80 millions de dollars lors d'une attaque tirant parti d'une faille de réentrance.

**Réentrance inter-contrats :** Elle résulte d'états partagés entre différents contrats et de séquences incorrectes de modification de variables. Même si des fonctions sont protégées, d'autres fonctions, comme 'burnAccount', peuvent encore être exploitées.

Attaques marquantes :

  • Rari Capital (2021) : A perdu environ 10 millions de dollars (~2600 ETH) en moins d'une heure.
  • ValueDefi (2021) : A perdu 5345,314 WBNB en raison de calculs de parts invalides, qui reposaient sur des données externes.

Réentrance en lecture seule:

La réentrance en lecture seule exploite une fonction qui, bien qu'elle ne modifie pas l'état du contrat, peut tout de même produire des résultats erronés lorsque l'état n'est pas cohérent.

Attaques notables:

  • QuickSwap (2022): Les exploiteurs ont détourné un prêt flash pour modifier le prix spot de l'actif, escroquant 138 ETH et 700 jetons MATIC. Cela a été possible en raison d'une faille dans l'oracle Curve LP.
  • dForce (2023): Un bug de réentrance en lecture seule se trouvait dans le code accédant aux oracles de prix sur les chaînes Arbitrum et Optimism avec Curve Finance.
  • Sentimente (2023): Une attaque, exploitant une faille de réentrance en lecture seule, a entraîné un vol de 1 million de dollars. Heureusement, 90 % ont été restitués par l'auteur.
  • Sturdy (2023): A perdu environ 442 ETH à cause d'un problème de réentrance en lecture seule de Balancer où le prix de B-stETH-STABLE a été altéré.

Prévention des vulnérabilités de réentrance:

  1. Respectez toujours le modèle vérification-effet-interaction.
  2. Employez une protection contre la réentrance pour toutes les opérations sensibles.
  3. Gérez chaque appel externe avec minutie.

Dépassement d'entier:

Lorsque les calculs dépassent les limites, ils débordent, ce qui conduit souvent à des valeurs minuscules ou gigantesques.

Attaques illustratives:

  • BeautyChain (2018): Les attaquants ont obtenu 10^58 BEC grâce à un dépassement d'entier, écoulant la somme stupéfiante de 900 millions de dollars.
  • Poolz (2023): A entraîné une perte d'environ 665 000 $ sur les chaînes Ethereum, Binance et Polygon.

Contre-mesures contre le dépassement d'entier:

  1. Utilisez des méthodes de calcul sûres comme la bibliothèque safeMath.
  2. Privilégiez la vérification des limites pour s'assurer que les résultats restent dans la plage.
  3. Adoptez la version 0.8.0 ou ultérieure du compilateur Solidity pour une détection intégrée des dépassements.

Contrôle d'accès:
Les vulnérabilités de contrôle d'accès découlent de l'absence de restrictions d'accès strictes sur les fonctions gérant des opérations cruciales.

  • Attaques marquantes:
  • DAOMaker (2021): Pas moins de ~4 M$ ont été siphonnés après que la fonction init a été laissée vulnérable.
  • GymNetwork (2022): Les exploiteurs ont tiré parti d'un oubli d'authentification dans depositFromOtherContract(), facilitant une augmentation illicite du solde sans aucun paiement réel. La perte ? Environ 2 475,91 WBNB.
  • Tempdao (2023): Une approche laxiste du contrôle d'accès pour la fonction migrateStake a entraîné une perte dépassant 2,34 millions de dollars.

Vulnérabilité de contrôle d'accès

  • Description: Vulnérabilités qui découlent de mécanismes de restriction inadéquats régissant l'accès et les privilèges à des opérations spécifiques au sein d'un système.

Mesures de prévention:

  1. Vérification stricte des permissions: Appliquez toujours des protocoles de permission stricts pour les fonctions, en particulier celles qui gèrent des opérations sensibles.
  2. Mécanisme multi-signature: Pour les tâches nécessitant une décision conjointe, utilisez des protocoles multi-signatures qui exigent plusieurs approbations avant d'exécuter des opérations sensibles.

Vecteurs d'attaque courants

  • DescriptionDiverses méthodes ou canaux par lesquels les attaquants exploitent les vulnérabilités d'un système, principalement dans les smart contracts.

Exemples notables:

  • Attaques par prêt flashExploite la fonction d'emprunt instantané des systèmes de finance décentralisée pour exécuter des activités malveillantes.
  • Front-runningLes attaquants prennent connaissance de la transaction en attente d'un autre utilisateur et agissent en proposant des frais de gas plus élevés.

Attaque par prêt flash

  • Description: Bien qu'il ne s'agisse pas intrinsèquement d'une attaque, FlashLoan est une fonctionnalité DeFi qui permet aux utilisateurs d'emprunter instantanément des sommes importantes sans collatéral. Elle a été exploitée en raison de failles logiques dans les interactions et relations entre contrats.

Attaques notables:

  1. Harves Finance (2020.10.26): A entraîné une perte de 38 millions de dollars.
  2. InverseFinance (2022.6.16): A entraîné une perte de 53,2445 WBTC et 99 976,29 USDT.
  3. NewFreeDAO (2022.9.8): 4 481 WBNB drainés, soit environ 1,25 million $.
  4. Lodestar (2022.12.11): Exploité via une manipulation des prix d'oracle.
  5. 0vix (2023.4.28): A entraîné une perte de 2 millions $ sur la chaîne Polygon.

Recommandations de prévention:

  1. Reconnaître les caractéristiques des Flashloans lors du développement du projet.
  2. Pour une détermination précise des prix, utilisez une moyenne pondérée dans le temps ou plusieurs oracles.

Front-running

  • Description: Un attaquant prend connaissance de la transaction d'un autre utilisateur depuis le memPool et en tire profit en proposant des frais de gas plus élevés.

Attaques notables:

  1. Sushi Badger Digg (25.1.2021): A entraîné une perte de 81,68 ETH.
  2. Pool Sushiswap Ape-ETH (17.5.2022): L'attaquant a réalisé un profit d'environ 0,3 ETH.
  3. **Uniswap (2023.4.2)**A causé une perte d'environ 25 millions de dollars via une attaque sandwich.

Recommandations de prévention:

  1. Utilisez une protection contre le slippage lors des transactions.
  2. Exécutez les transactions en dehors des heures de pointe, surtout sur les marchés volatils.
  3. Utilisez le rpc FlashBot de 1inch pour envoyer les transactions directement aux mineurs, contournant ainsi le memPool.

Résumé

Félicitations ! Vous avez terminé le Module 2 - Vulnérabilités des contrats intelligents : une plongée approfondie dans les attaques de réentrance et les exploits courants

Passons en revue vos apprentissages :

Vulnérabilités de réentrance - Les attaquants exploitent des failles en réentrant dans des fonctions avant qu'elles ne se terminent complètement.

  • Réentrance sur une seule fonction : Un contrat malveillant réentre dans une fonction d'un autre contrat.
  • Réentrance entre fonctions : Les états partagés entre différentes fonctions sont exploités en raison d'une mauvaise protection contre la réentrance.
  • Réentrance entre contrats : Exploite les états partagés entre différents contrats.
  • Réentrance en lecture seule : Exploite une fonction produisant des sorties erronées lorsque l'état n'est pas cohérent.

Dépassement d'entier - Des calculs dépassant les limites définies, entraînant des valeurs extrêmes.

Vulnérabilités de contrôle d'accès - Découlent de l'absence de contraintes d'accès strictes sur les fonctions essentielles.

Vecteurs d'attaque courants - Méthodes par lesquelles les attaquants exploitent les vulnérabilités du système.

**Attaque FlashLoan **- Une fonctionnalité DeFi permettant un emprunt instantané de grande ampleur sans collatéral, mais exploitée en raison de failles logiques.

Attaque de front-running- Les attaquants prennent connaissance des transactions en attente et en tirent profit en proposant des frais de gas plus élevés.

Cet article vous a été présenté par :

Résumé — illustration