Le 3 janvier 2024, selon Beosin EagleEye, le projet Radiant Capital a été victime d'une attaque de prêt flash par un attaquant. Au cours de trois transactions, l'attaquant a volé plus de 1900 ETH, évalués à plus de 4,5 millions de dollars. Les fonds volés sont actuellement détenus à l'adresse de l'attaquant, et l'équipe de sécurité de Beosin a rapidement analysé l'incident.

Analyse de la vulnérabilité

La cause principale de cet incident réside dans le calcul de la quantité de jetons du projet Radiant Capital, qui implique une expansion de précision et un arrondi. L'attaquant a exploité la capacité de contrôler la précision et, combinée à l'arrondi, a augmenté les marges bénéficiaires de l'attaque.

Dans le code observé, la fonction rayDiv prend deux données uint256, a et b. L'ensemble du processus peut être simplifié comme (a RAY + b/2) / b, où RAY est une donnée d'expansion de précision, égale à 10²⁷. Cela donne un RAY / b + 0,5, ce qui permet d'arrondir la fonction. La principale source d'erreur dans ce calcul provient de b. Si b est nettement inférieur à a, l'erreur devient négligeable. Cependant, si b est d'une ampleur similaire à a, l'erreur peut être substantielle.

Par exemple, si a RAY = 10000 et b = 3, le résultat calculé est 3333, ce qui est 1/10000 de moins que la valeur réelle. Si a RAY = 10000 et b = 3000, le résultat calculé est 3, ce qui est 1/10 de moins que la valeur réelle.

Dans cet incident, l'attaquant a manipulé la valeur de b pour avoir une magnitude similaire à a, ce qui a donné au calcul un résultat équivalent à 3/2,0001 = 1. La valeur calculée est inférieure de 1/3 à la valeur réelle.

Processus d'attaque

  1. L'attaquant a initialement emprunté 3 millions de dollars américains via un prêt flash AAVE comme capital de démarrage pour l'attaque.

2,2 millions d'USDC ont été promis au contrat Radiant, et l'attaquant a obtenu 2 millions de certificats de jetons rUSDCn.

3. L'attaquant a utilisé un prêt flash via le contrat Radiant pour emprunter 2 millions d'USDC. Dans la fonction de rappel, 2 millions d'USDC ont été remboursés, extrayant simultanément les USDC promis de la deuxième étape. La fonction de prêt flash a appelé la fonction transferfrom, transférant les USDC de l'attaquant dans le contrat, avec des frais de 9/10000 collectés en tant que liquidité pour le pool.

4. En répétant l’étape 3, l’attaquant a contrôlé le liquidityIndex dans une large mesure, atteignant liquidityIndex=271800000000999999999999998631966035920.

5. Par la suite, l'attaquant a créé un nouveau contrat et y a déposé 543 600 USDC. Ce montant correspond au double de la valeur liquidityIndex de l'étape 4, ce qui facilite le contrôle des arrondis.

6. L'attaquant a engagé la totalité des 543 600 USDC dans le contrat Radiant, obtenant ainsi un montant équivalent de rUSDCn.

7. L'attaquant a retiré 407 700 USDC. Bien que 407 700 rUSDCn auraient dû être brûlés, comme mentionné ci-dessus, la fonction de brûlage impliquait des calculs d'expansion et d'arrondi de précision. 40770000000000000000000000000000000000000000/27180000000099999999999998631966035920 = 1,49999999, mais l'arrondi donne 1, ce qui fait que le résultat est 1/3 inférieur à la valeur réelle. Comme indiqué ci-dessous, au lieu de brûler 407 700, seuls 271 800 ont été brûlés, ce qui a permis à l'attaquant de retirer 407 700 USDC.

8. Exploitant la vulnérabilité de l'étape 7, l'attaquant a répété les opérations de mise en gage et de retrait, retirant systématiquement 1/3 de plus que le montant promis, échangeant finalement tous les USDC du pool.

Suivi des fonds

Au moment de la rédaction de cet article, les 1902 ETH volés restent à l'adresse du pirate sans bouger. Beosin Trace continuera de surveiller les fonds.

En ce début d’année 2024, nous avons été témoins de deux cas de vols de grande valeur. (Retour sur l’incident de sécurité d’hier : que s’est-il passé dans le premier cas de l’année, le vol de 80 millions de dollars d’Orbit Chain ?) Cette série d’événements nous rappelle que dans l’écosystème Web3, les précautions de sécurité restent cruciales !

Contact

Si vous avez besoin de services de sécurité blockchain, n'hésitez pas à nous contacter :

Site officiel Beosin EagleEye Twitter Telegram Linkedin