Le 18 octobre 2023 à 19 :48 :59, heure de Beijing, le pool de prêts de Hope.money a été attaqué sur la base de prêts flash.
Hope.money a construit un service financier décentralisé complet, y compris la plate-forme de prêt HopeLend, l’échange décentralisé HopeSwap, le $HOPE stablecoin et le jeton de gouvernance $LT.
Le protocole impliqué dans l’attaque est HopeLend, une plateforme de prêt décentralisée qui permet aux utilisateurs de fournir des liquidités au protocole ou de surcollatéraliser pour gagner un revenu.
Début et fin de l’événement
Dans l’implémentation du code de HopeLend, il y avait une vulnérabilité exploitable dans le pool de prêt, en raison d’un problème de division d’entiers erroné lors de la destruction des certificats de dépôt, ce qui entraînait la troncature de la virgule décimale, la destruction de moins de certificats que prévu et l’obtention de jetons de même valeur que prévu.
L’attaquant a exploité cette faille pour vider plusieurs pools de prêts de fonds sur Hope.money.
Le pool de prêt hEthWbtc a été déployé il y a 73 jours, mais il n’y avait pas de fonds dedans, de sorte que les pirates ont injecté de grandes sommes d’argent dans le pool de prêt pour faire monter en flèche le taux d’actualisation, vidant ainsi rapidement tous les autres pools de prêt dans une transaction de bloc.
Plus dramatiquement, le pirate exploité n’a pas reçu les fonds pour l’exploit, et sa transaction d’attaque a été découverte par le voleur qui a imité son attaque et a réussi à voler tous les fonds du produit de l’attaque (527 ETH), et finalement 50% des fonds du produit de l’attaque (263 ETH) ont été utilisés par les voleurs pour soudoyer les mineurs qui ont emballé le bloc (charge utile).
Le pirate initial qui a découvert la vulnérabilité a créé un contrat d’attaque dans le bloc 18377039 et a fait un appel pour attaquer le contrat dans le bloc 18377042, à ce moment-là, le voleur a surveillé la transaction dans le pool de mémoire et a simulé son contrat d’attaque, en tant qu’entrée du contrat de snatching, et l’a exploité dans le même bloc 18377042, et la transaction du pirate initial dans le bloc 18377042 a échoué parce qu’elle a été triée derrière le voleur de fonds.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/vgmwbfe1izd6m7c3.png!webp)
Où va l’argent
Une heure après que le voleur a reçu le produit, les fonds sont transférés à : 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/xs8c5jce3oyl7qj1.png!webp)
Le 20 octobre à 13 :30 :23, l’équipe officielle présumée a contacté l’adresse, permettant aux coureurs de laisser 26 ETH (10% de bénéfice) en récompense, et d’obtenir une réponse des coureurs.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/2k6prrcrl8b9ynve.png!webp)
Les fonds finaux ont été transférés dans le coffre-fort multisig de GnosisSafe après une heure de communication.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/to197jlp4ce8qoq1.png!webp)
Ci-dessous, nous montrerons les vulnérabilités réelles et les détails des pirates exploités.
Pré-information
*Le protocole de prêt de HopeLend implémente des forks d’Aave, de sorte que la logique métier de base liée aux vulnérabilités est référencée dans le livre blanc d’Aave.
0x00 Dépôts et prêts
Aave est une pure DeFi, l’activité de prêt est réalisée par le biais de pools de liquidité, les utilisateurs s’attendent à recevoir les revenus de l’emprunt lorsque les dépôts Aave fournissent des liquidités.
Les revenus de prêts ne sont pas entièrement distribués aux utilisateurs, une petite partie des revenus d’intérêts sera incluse dans la réserve de risque, cette partie est une proportion plus faible, la plupart des revenus de prêts seront distribués à l’utilisateur qui fournit des liquidités.
Lors de l’octroi de prêts de dépôts dans Aave, Aave convertit le nombre de dépôts à différents moments dans le temps en part du nombre de dépôts au point de temps initial du pool de liquidité par le biais de l’escompte, de sorte que la somme du principal et des intérêts correspondant aux actifs sous-jacents de chaque nombre d’actions peut être directement calculée avec l’indice de montant *, ce qui facilite grandement le calcul et la compréhension.
Il peut être compris comme un processus similaire à l’achat de fonds, la valeur nette initiale du fonds est de 1, l’utilisateur investit 100 yuans pour obtenir 100 actions, en supposant qu’après une période de gain, la valeur nette devient 1,03, à ce moment-là, l’utilisateur investit à nouveau 100 yuans, la part obtenue est de 97 et la part totale de l’utilisateur est de 197.
Il s’agit en fait d’actualiser l’actif en fonction de l’indice. La raison en est que le capital et les intérêts réels de l’utilisateur sont multipliés par l’indice actuel par le solde. Lorsque le deuxième dépôt, la somme correcte du capital et des intérêts de l’utilisateur doit être de 100 * 1,03 + 100 = 203, si elle n’est pas actualisée, le deuxième utilisateur dépose 100 après que la somme du principal et des intérêts devienne ( 100 + 100) * 1,03 = 206, est fausse, si elle est actualisée, la somme du principal et des intérêts devient (100 + 100 / 1,03) * 1,03 = 103 + 100 = 203, 203 Le résultat est correct.
1. Prêtez les fonds initiaux du prêt flash et mettez-les en gage
L’attaquant emprunte d’abord 2300 WBTC à Aave Lightning, met en jeu 2000 WBTC à HopeLend, et les fonds seront transférés sur le contrat hEthWbtc de HopeLende (0x251 ... 907), ainsi que d’acquérir les 2000 hETHWBTC correspondants.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/anso762vnbov1zr2.png!webp)
2. Manipulation du taux d’escompte initial (liquidityIndex) avec des pools de prêts vides
Empruntez 2000 WBTC à HopeLend pour un prêt flash.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021102/74cv8ydz0ubnh1dd.png!webp)
La valeur actuelle est 1 hETHWBTC = 1 WBTC.
Selon le fonctionnement normal de l’accès à l’ETHWBTC pour l’échanger contre WBTC, cela n’affectera pas le ratio d’échange (ce n’est que lorsque les intérêts sont gagnés que cela affectera le ratio d’échange, 1 hETHWBTC obtiendra plus de WBTC).
À ce stade, les pirates ont commencé à manipuler le taux d’actualisation par le biais d’une série d’opérations complexes :
• Le pirate a directement transféré les fonds 2000 WBTC vers le contrat hEthWbtc de HopeLen (0x 251 ... 907), cette étape n’a pas pour but de rembourser le prêt.
• Le pirate se retire alors, la grande majorité du WBTC (1999.999 ... ), de sorte que l’étape précédente nécessite de revenir au WBTC pour reconstituer les ressources du pool.
• Enfin, le hacker ne conserve que la plus petite unité (1 e-8) de hEthWbtc, qui ne peut pas être complètement mentionnée ici, car il faut laisser un peu, comme calcul de l’indice de liquidité, il sera basé sur l’addition plus existante, si elle est compensée, ce qui fait que l’indice de liquidité devient 0, vous ne pouvez pas déséquilibrer la proportion dans le pool.
• Détruisez la majeure partie des wBTC échangés contre des hEthWbtc à l’étape précédente, ajoutez les wBTC restants du prêt flash précédent et retournez le prêt flash prêté au pool HopeLend, en payant un total de 2001,8 WBTC (y compris les intérêts de 1,8 wBTC).
Le processus ci-dessus détruit la majeure partie des hEthWbtc, ne laissant qu’une seule plus petite unité (1 e-8) de hEthWbtc dans le compte du pirate, de sorte que le montant total de hETHWBTC est réduit, et il y a 2001,8 wBTC dans le pool de prêt, auquel cas l’indice de liquidité atteint un montant stupéfiant de 126 000 000. Cela implique de savoir que l’intérêt des utilisateurs de dépôts provient fondamentalement de la croissance de la liquidité dans le pool, et que le pool de prêts ajustera dynamiquement les taux d’intérêt d’emprunt et de dépôt en fonction du taux de dépôt et du taux d’utilisation.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/5iww6yvocq828lnk.png!webp)
Ici, lorsque le pool reçoit des liquidités supplémentaires de l’intérêt du prêt flash (1,8 WBTC), soixante-dix pour cent (126 000 000) sont inclus dans le liquidityIndex (liquidityIndex), qui est utilisé pour calculer la valeur actualisée par unité de dépôt (hEthWbt).
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/0y2avv1q0k0d6dvq.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/he1rfuj0gcks7icu.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/z8wqinijs1xrxj4q.png!webp)
Étant donné que le pool était vide avant le piratage, totalLiquidity n’est que de 1 après remboursement, le montant est de 126000000 et le liquidityIndex initial est de 1, ce qui donne un résultat de 126000001.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/4obpc8c6fmseyxxt.png!webp)
3. Continuer d’amplifier le taux d’actualisation
Les pirates ont ensuite emprunté 2 000 WBTC à HopeLend pour des prêts flash et ont retourné 1,8 WBTC supplémentaires à chaque fois, permettant à chaque indice de liquidité d’accumuler 126 000 000.
Les pirates ont répété le processus 60 fois, et finalement l’indice de liquidité a atteint 7 560 000 001, et la valeur actualisée de la plus petite unité de hEthWBTC détenue par l’attaquant a pu atteindre 75,6 WBTC (environ 2,14 millions de dollars).
Cela permet aux pirates de manipuler hEthWBTC, en déformant sa valeur.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/6c3vhd5dzcqouduz.png!webp)
4. Vider d’autres pools de prêts là où il existe des fonds pour générer des revenus.
Les attaquants ont ensuite misé 1 plus petite unité de hEthWBTC et ont prêté une grande quantité d’actifs des cinq autres pools de jetons de HopeLond.
Inclure:
175.4 - WETH
145, 522.220985 - USDT
123, 406.134999 - USDC
844, 282.284002229528476039 - ESPOIR
220, 617.821736563540747967 - stHOPE
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/xloltizb5ua2puhd.png!webp)
Ces jetons ont été échangés contre WBTC et WETH par l’intermédiaire d’Uniswap en tant que produit, et après déduction de divers frais, le pirate a finalement réalisé un bénéfice d’environ 263 WETH (à l’exclusion des 263,9 WETH qui ont soudoyé la charge utile).
Pourquoi les pirates peuvent emprunter de grosses sommes d’argent à d’autres pools :
Lors de l’emprunt ou du retrait de dépôts, le contrat de prêt vérifiera l’état des actifs garantis de l’utilisateur pour s’assurer que le prêt n’excède pas la garantie.
Étant donné que le taux d’actualisation a été manipulé par des pirates informatiques et que le taux d’actualisation est calculé dans la valeur de garantie dans le multiplicateur de revenu normalisé, la valeur de garantie d’une unité de hEthWBTC entre ses mains est aussi élevée que 75,6 WBTC.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/l92lr3astj8pxwg6.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/fz7hdciyi6ismgwr.png!webp)
Chaque fois qu’il a emprunté de l’argent à d’autres pools, le pirate a facilement passé la vérification des actifs collatéraux.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/8n7rgjpvl64lytjz.png!webp)
À ce stade, les attaquants ont investi un total de 2000+ 1,8* 60 WBTC dans HopeLend pour manipuler liquidityIndex, ne laissant qu’une seule unité de hEtthWBTC.
5. Exploitez les points de vulnérabilité critiques (erreurs de division d’entiers) pour encaisser
Pour retirer l’investissement précédent wBTC, les attaquants ont déployé un autre contrat d’attaque : 0x 5 a 63 e... 844 e 74 et appelez la méthode withdrawAllBtc()
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/gxsep176zr1ulz6y.png!webp)
Le processus de vulnérabilité est le suivant :
(1) Premier dépôt 151,20000002 wBTC, selon l’indice de liquidité actuel (1 plus petite unité hEthWBTC = 75,6 wBTC), l’attaquant obtient 2 plus petites unités de hEthWBTC.
(2) Retirez (retirez) 113,4 wBTC, calculez inversement sa part hEthWBTC correspondante et brûlez hEthWBTC.
(3) 113,4 wBTC doivent détruire 1,99999999998 plus petites unités de hEthWBTC, mais en raison de la précision de la fonction div, une seule plus petite unité de hEthWBTC est détruite, elle devient donc une vulnérabilité exploitable, et les pirates peuvent toujours conserver 1 plus petite unité de hEthWBTC.
Vulnérabilités critiques
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/i8sobsuj4gkdna0o.png!webp)
La méthode de gravure de hEthWBTC appelle la division de haute précision rayDiv.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/xw84ns4thoyh5i1g.png!webp)
Bien que (a* 1e27+b/2)/b = 1.99999999998, la méthode div intégrée de Solidity tronque et renvoie 1, ce qui équivaut à 11340000000 / 7560000001 décimales sont tronquées après la division.
0x5a63 (Attack Contract - Cash Out) continue de déposer 75,60000001 WBTC exactement pour obtenir 1 unité minimale supplémentaire hEthWBTC, continuant ainsi à détenir 2 unités minimum hEthWBTC.
Dans cette boucle, 113,4000000000 wBTC sont retirés et 75,60000001 wBTC déposés, chaque attaquant peut obtenir 37,8 wBTC à partir de rien.
Après 58 cycles, les attaquants ont retiré tous les wBTC investis à l’avance et ont rendu en douceur le prêt flash d’Aave.
En conclusion
Étant donné que le pool de prêt hEthWBTC n’est pas initialisé, l’attaquant peut facilement manipuler le liquidityIndex pour l’augmenter au maximum, et le taux de retrait est considérablement amplifié en tant que diviseur, ce qui facilite le retrait de l’investissement précédent dans un bloc en raison de l’erreur de troncature de la division entière.
Dans un pool de prêts qui fonctionne bien, il n’est pas facile d’augmenter de manière significative le taux d’actualisation en raison d’une légère augmentation des intérêts de prêt en raison de la liquidité existante dans le pool.
Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
CertiK : Analyse des attaques de prêt sur la plateforme de prêt décentralisée HopeLend
Le 18 octobre 2023 à 19 :48 :59, heure de Beijing, le pool de prêts de Hope.money a été attaqué sur la base de prêts flash.
Hope.money a construit un service financier décentralisé complet, y compris la plate-forme de prêt HopeLend, l’échange décentralisé HopeSwap, le $HOPE stablecoin et le jeton de gouvernance $LT.
Le protocole impliqué dans l’attaque est HopeLend, une plateforme de prêt décentralisée qui permet aux utilisateurs de fournir des liquidités au protocole ou de surcollatéraliser pour gagner un revenu.
Début et fin de l’événement
Dans l’implémentation du code de HopeLend, il y avait une vulnérabilité exploitable dans le pool de prêt, en raison d’un problème de division d’entiers erroné lors de la destruction des certificats de dépôt, ce qui entraînait la troncature de la virgule décimale, la destruction de moins de certificats que prévu et l’obtention de jetons de même valeur que prévu.
L’attaquant a exploité cette faille pour vider plusieurs pools de prêts de fonds sur Hope.money.
Le pool de prêt hEthWbtc a été déployé il y a 73 jours, mais il n’y avait pas de fonds dedans, de sorte que les pirates ont injecté de grandes sommes d’argent dans le pool de prêt pour faire monter en flèche le taux d’actualisation, vidant ainsi rapidement tous les autres pools de prêt dans une transaction de bloc.
Plus dramatiquement, le pirate exploité n’a pas reçu les fonds pour l’exploit, et sa transaction d’attaque a été découverte par le voleur qui a imité son attaque et a réussi à voler tous les fonds du produit de l’attaque (527 ETH), et finalement 50% des fonds du produit de l’attaque (263 ETH) ont été utilisés par les voleurs pour soudoyer les mineurs qui ont emballé le bloc (charge utile).
Le pirate initial qui a découvert la vulnérabilité a créé un contrat d’attaque dans le bloc 18377039 et a fait un appel pour attaquer le contrat dans le bloc 18377042, à ce moment-là, le voleur a surveillé la transaction dans le pool de mémoire et a simulé son contrat d’attaque, en tant qu’entrée du contrat de snatching, et l’a exploité dans le même bloc 18377042, et la transaction du pirate initial dans le bloc 18377042 a échoué parce qu’elle a été triée derrière le voleur de fonds.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/vgmwbfe1izd6m7c3.png!webp)
Où va l’argent
Une heure après que le voleur a reçu le produit, les fonds sont transférés à : 0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/xs8c5jce3oyl7qj1.png!webp)
Le 20 octobre à 13 :30 :23, l’équipe officielle présumée a contacté l’adresse, permettant aux coureurs de laisser 26 ETH (10% de bénéfice) en récompense, et d’obtenir une réponse des coureurs.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/2k6prrcrl8b9ynve.png!webp)
Les fonds finaux ont été transférés dans le coffre-fort multisig de GnosisSafe après une heure de communication.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/to197jlp4ce8qoq1.png!webp)
Ci-dessous, nous montrerons les vulnérabilités réelles et les détails des pirates exploités.
Pré-information
*Le protocole de prêt de HopeLend implémente des forks d’Aave, de sorte que la logique métier de base liée aux vulnérabilités est référencée dans le livre blanc d’Aave.
0x00 Dépôts et prêts
Aave est une pure DeFi, l’activité de prêt est réalisée par le biais de pools de liquidité, les utilisateurs s’attendent à recevoir les revenus de l’emprunt lorsque les dépôts Aave fournissent des liquidités.
Les revenus de prêts ne sont pas entièrement distribués aux utilisateurs, une petite partie des revenus d’intérêts sera incluse dans la réserve de risque, cette partie est une proportion plus faible, la plupart des revenus de prêts seront distribués à l’utilisateur qui fournit des liquidités.
Lors de l’octroi de prêts de dépôts dans Aave, Aave convertit le nombre de dépôts à différents moments dans le temps en part du nombre de dépôts au point de temps initial du pool de liquidité par le biais de l’escompte, de sorte que la somme du principal et des intérêts correspondant aux actifs sous-jacents de chaque nombre d’actions peut être directement calculée avec l’indice de montant *, ce qui facilite grandement le calcul et la compréhension.
Il peut être compris comme un processus similaire à l’achat de fonds, la valeur nette initiale du fonds est de 1, l’utilisateur investit 100 yuans pour obtenir 100 actions, en supposant qu’après une période de gain, la valeur nette devient 1,03, à ce moment-là, l’utilisateur investit à nouveau 100 yuans, la part obtenue est de 97 et la part totale de l’utilisateur est de 197.
Il s’agit en fait d’actualiser l’actif en fonction de l’indice. La raison en est que le capital et les intérêts réels de l’utilisateur sont multipliés par l’indice actuel par le solde. Lorsque le deuxième dépôt, la somme correcte du capital et des intérêts de l’utilisateur doit être de 100 * 1,03 + 100 = 203, si elle n’est pas actualisée, le deuxième utilisateur dépose 100 après que la somme du principal et des intérêts devienne ( 100 + 100) * 1,03 = 206, est fausse, si elle est actualisée, la somme du principal et des intérêts devient (100 + 100 / 1,03) * 1,03 = 103 + 100 = 203, 203 Le résultat est correct.
Processus d’attaque
0x25126...... 403907(pool hETHWBTC)
0x5a63e...... 844e74 (Contrat d’attaque - Encaissement)
Assaillant:
1. Prêtez les fonds initiaux du prêt flash et mettez-les en gage
L’attaquant emprunte d’abord 2300 WBTC à Aave Lightning, met en jeu 2000 WBTC à HopeLend, et les fonds seront transférés sur le contrat hEthWbtc de HopeLende (0x251 ... 907), ainsi que d’acquérir les 2000 hETHWBTC correspondants.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22020909/anso762vnbov1zr2.png!webp)
2. Manipulation du taux d’escompte initial (liquidityIndex) avec des pools de prêts vides
Empruntez 2000 WBTC à HopeLend pour un prêt flash.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021102/74cv8ydz0ubnh1dd.png!webp)
La valeur actuelle est 1 hETHWBTC = 1 WBTC.
Selon le fonctionnement normal de l’accès à l’ETHWBTC pour l’échanger contre WBTC, cela n’affectera pas le ratio d’échange (ce n’est que lorsque les intérêts sont gagnés que cela affectera le ratio d’échange, 1 hETHWBTC obtiendra plus de WBTC).
À ce stade, les pirates ont commencé à manipuler le taux d’actualisation par le biais d’une série d’opérations complexes :
• Le pirate a directement transféré les fonds 2000 WBTC vers le contrat hEthWbtc de HopeLen (0x 251 ... 907), cette étape n’a pas pour but de rembourser le prêt.
• Le pirate se retire alors, la grande majorité du WBTC (1999.999 ... ), de sorte que l’étape précédente nécessite de revenir au WBTC pour reconstituer les ressources du pool.
• Enfin, le hacker ne conserve que la plus petite unité (1 e-8) de hEthWbtc, qui ne peut pas être complètement mentionnée ici, car il faut laisser un peu, comme calcul de l’indice de liquidité, il sera basé sur l’addition plus existante, si elle est compensée, ce qui fait que l’indice de liquidité devient 0, vous ne pouvez pas déséquilibrer la proportion dans le pool.
• Détruisez la majeure partie des wBTC échangés contre des hEthWbtc à l’étape précédente, ajoutez les wBTC restants du prêt flash précédent et retournez le prêt flash prêté au pool HopeLend, en payant un total de 2001,8 WBTC (y compris les intérêts de 1,8 wBTC).
Le processus ci-dessus détruit la majeure partie des hEthWbtc, ne laissant qu’une seule plus petite unité (1 e-8) de hEthWbtc dans le compte du pirate, de sorte que le montant total de hETHWBTC est réduit, et il y a 2001,8 wBTC dans le pool de prêt, auquel cas l’indice de liquidité atteint un montant stupéfiant de 126 000 000. Cela implique de savoir que l’intérêt des utilisateurs de dépôts provient fondamentalement de la croissance de la liquidité dans le pool, et que le pool de prêts ajustera dynamiquement les taux d’intérêt d’emprunt et de dépôt en fonction du taux de dépôt et du taux d’utilisation.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/5iww6yvocq828lnk.png!webp)
Ici, lorsque le pool reçoit des liquidités supplémentaires de l’intérêt du prêt flash (1,8 WBTC), soixante-dix pour cent (126 000 000) sont inclus dans le liquidityIndex (liquidityIndex), qui est utilisé pour calculer la valeur actualisée par unité de dépôt (hEthWbt).
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/0y2avv1q0k0d6dvq.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/he1rfuj0gcks7icu.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021101/z8wqinijs1xrxj4q.png!webp)
Étant donné que le pool était vide avant le piratage, totalLiquidity n’est que de 1 après remboursement, le montant est de 126000000 et le liquidityIndex initial est de 1, ce qui donne un résultat de 126000001.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/4obpc8c6fmseyxxt.png!webp)
3. Continuer d’amplifier le taux d’actualisation
Les pirates ont ensuite emprunté 2 000 WBTC à HopeLend pour des prêts flash et ont retourné 1,8 WBTC supplémentaires à chaque fois, permettant à chaque indice de liquidité d’accumuler 126 000 000.
Les pirates ont répété le processus 60 fois, et finalement l’indice de liquidité a atteint 7 560 000 001, et la valeur actualisée de la plus petite unité de hEthWBTC détenue par l’attaquant a pu atteindre 75,6 WBTC (environ 2,14 millions de dollars).
Cela permet aux pirates de manipuler hEthWBTC, en déformant sa valeur.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/6c3vhd5dzcqouduz.png!webp)
4. Vider d’autres pools de prêts là où il existe des fonds pour générer des revenus.
Les attaquants ont ensuite misé 1 plus petite unité de hEthWBTC et ont prêté une grande quantité d’actifs des cinq autres pools de jetons de HopeLond.
Inclure:
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/xloltizb5ua2puhd.png!webp)
Ces jetons ont été échangés contre WBTC et WETH par l’intermédiaire d’Uniswap en tant que produit, et après déduction de divers frais, le pirate a finalement réalisé un bénéfice d’environ 263 WETH (à l’exclusion des 263,9 WETH qui ont soudoyé la charge utile).
Pourquoi les pirates peuvent emprunter de grosses sommes d’argent à d’autres pools :
Lors de l’emprunt ou du retrait de dépôts, le contrat de prêt vérifiera l’état des actifs garantis de l’utilisateur pour s’assurer que le prêt n’excède pas la garantie.
Étant donné que le taux d’actualisation a été manipulé par des pirates informatiques et que le taux d’actualisation est calculé dans la valeur de garantie dans le multiplicateur de revenu normalisé, la valeur de garantie d’une unité de hEthWBTC entre ses mains est aussi élevée que 75,6 WBTC.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/l92lr3astj8pxwg6.png!webp)
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021225/fz7hdciyi6ismgwr.png!webp)
Chaque fois qu’il a emprunté de l’argent à d’autres pools, le pirate a facilement passé la vérification des actifs collatéraux.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/8n7rgjpvl64lytjz.png!webp)
À ce stade, les attaquants ont investi un total de 2000+ 1,8* 60 WBTC dans HopeLend pour manipuler liquidityIndex, ne laissant qu’une seule unité de hEtthWBTC.
5. Exploitez les points de vulnérabilité critiques (erreurs de division d’entiers) pour encaisser
Pour retirer l’investissement précédent wBTC, les attaquants ont déployé un autre contrat d’attaque : 0x 5 a 63 e... 844 e 74 et appelez la méthode withdrawAllBtc()
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/gxsep176zr1ulz6y.png!webp)
Le processus de vulnérabilité est le suivant :
(1) Premier dépôt 151,20000002 wBTC, selon l’indice de liquidité actuel (1 plus petite unité hEthWBTC = 75,6 wBTC), l’attaquant obtient 2 plus petites unités de hEthWBTC.
(2) Retirez (retirez) 113,4 wBTC, calculez inversement sa part hEthWBTC correspondante et brûlez hEthWBTC.
(3) 113,4 wBTC doivent détruire 1,99999999998 plus petites unités de hEthWBTC, mais en raison de la précision de la fonction div, une seule plus petite unité de hEthWBTC est détruite, elle devient donc une vulnérabilité exploitable, et les pirates peuvent toujours conserver 1 plus petite unité de hEthWBTC.
Vulnérabilités critiques
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/i8sobsuj4gkdna0o.png!webp)
La méthode de gravure de hEthWBTC appelle la division de haute précision rayDiv.
! [CertiK : Analyse de l’attaque de prêt sur la plateforme de prêt décentralisée HopeLend] (https://piccdn.0daily.com/202310/22021356/xw84ns4thoyh5i1g.png!webp)
Ici:
a= 113400000000 (WBTC destiné à être supprimé)
b=7560000001000000000000000009655610336(taux d’actualisation)
Bien que (a* 1e27+b/2)/b = 1.99999999998, la méthode div intégrée de Solidity tronque et renvoie 1, ce qui équivaut à 11340000000 / 7560000001 décimales sont tronquées après la division.
0x5a63 (Attack Contract - Cash Out) continue de déposer 75,60000001 WBTC exactement pour obtenir 1 unité minimale supplémentaire hEthWBTC, continuant ainsi à détenir 2 unités minimum hEthWBTC.
Dans cette boucle, 113,4000000000 wBTC sont retirés et 75,60000001 wBTC déposés, chaque attaquant peut obtenir 37,8 wBTC à partir de rien.
Après 58 cycles, les attaquants ont retiré tous les wBTC investis à l’avance et ont rendu en douceur le prêt flash d’Aave.
En conclusion
Étant donné que le pool de prêt hEthWBTC n’est pas initialisé, l’attaquant peut facilement manipuler le liquidityIndex pour l’augmenter au maximum, et le taux de retrait est considérablement amplifié en tant que diviseur, ce qui facilite le retrait de l’investissement précédent dans un bloc en raison de l’erreur de troncature de la division entière.
Dans un pool de prêts qui fonctionne bien, il n’est pas facile d’augmenter de manière significative le taux d’actualisation en raison d’une légère augmentation des intérêts de prêt en raison de la liquidité existante dans le pool.