
Lancé et piraté en quelques secondes, Radiant Protocol subit une perte de 4,5 millions de dollars
TechFlow SélectionTechFlow Sélection

Lancé et piraté en quelques secondes, Radiant Protocol subit une perte de 4,5 millions de dollars
La raison en est qu'un problème d'arrondi mathématique dans la fonction « burn » a été exploité et amplifié sur le nouveau marché USDC, permettant aux pirates d'extraire des USDC supplémentaires.
Rédaction : Daniel Tan
Le 3 janvier 2024 à Pékin, le protocole Radiant sur Arbitrum a subi une attaque par prêt flash. Le pirate a lancé trois attaques contre le protocole #Radiant, entraînant une perte totale de 1902 ETH (valeur de 4,5 millions de dollars). La cause racine réside dans l'exploitation d'un problème d'arrondi mathématique présent dans la fonction « burn » du nouveau marché $USDC, permettant au pirate d'extraire un montant supplémentaire de $USDC.
MetaTrust Labs a mené une recherche et une analyse approfondies sur cette attaque, révélant comment le pirate a exploité la vulnérabilité.
Protocole de prêt Radiant Protocol
Radiant est un protocole de prêt décentralisé et non gardien, opérant sur plusieurs chaînes, notamment Arbitrum, BNBChain et Ethereum.

Après l’attaque, la valeur totale verrouillée (TVL) du protocole Radiant restait à 313 millions de dollars, car l’équipe projet avait rapidement suspendu le protocole juste après l’incident, empêchant des pertes supplémentaires.

Ligne chronologique

Transactions
0xc5c4bbddec70edb58efba60c1f27bce6515a45ffcab4236026a5eeb3e877fc6d
0x2af556386c023f7ebe7c662fd5d1c6cc5ed7fba4723cbd75e00faaa98cd14243
0x1ce7e9a9e3b6dd3293c9067221ac3260858ce119ecb7ca860eac28b2474c7c9b
Pertes d'actifs
Les trois transactions d'attaque ont causé une perte totale supérieure à 1902 ETH, soit plus de 4,5 millions de dollars. Au moment de la rédaction, les 1902 $ETH sont toujours conservés dans le portefeuille du pirate (0x826d5f4d8084980366f975e10db6c4cf1f9dde6d).
Attaquant
0x826d5f4d8084980366f975e10db6c4cf1f9dde6d
Contrat utilisé pour l'attaque
0x39519c027b503f40867548fb0c890b11728faa8f
Contrat attaqué
Radiant : Lending Pool :
0xf4b1486dd74d07706052a33d31d7c0aafd0659e1
rUSDCn :
0x3a2d44e354f2d88ef6da7a5a4646fd70182a7f55
Ce qui s'est produit avant l'attaque
Quinze secondes avant l'attaque, l'équipe projet venait de créer un nouveau marché USDC natif sur Arbitrum. Le pirate a été la première personne à interagir avec ce nouveau marché.

Étapes de l'attaque
Prenons comme exemple la première transaction d'attaque : 0x1ce7e9a9e3b6dd3293c9067221ac3260858ce119ecb7ca860eac28b2474c7c9b.
1. Emprunter 3 millions de dollars en USDC via la fonction de prêt flash d'AAVE ;
2. Déposer 2M $USDC dans le pool Radiant, où liquidityIndex vaut alors 1e27 ;

3. Effectuer un prêt flash de 2 millions de dollars sur le pool de prêt Radiant, amplifiant ainsi le liquidityIndex jusqu'à 1,8e36 ;
4. Répéter l'étape 3 pendant 151 fois, élevant le liquidityIndex à 2,7e38, soit 270 milliards de fois sa valeur initiale ;

5. Emprunter 90,6 $ETH depuis le pool Radiant, d'une valeur de 215 000 $, représentant le profit de cette attaque ;
6. Créer un nouveau contrat (0xd8b591) ;
7. Approuver un montant illimité d'USDC vers ce nouveau contrat, transférer 543K $USDC dedans, puis exécuter les étapes suivantes via ce contrat ;
8. Déposer 543K $USDC dans le pool Radiant, frapper 2 wei de jetons, car amountScaled = 2, selon le calcul : 543600000002 * 1e27 / 271800000000999999999999998631966035920 = 2 ;


9. Retirer 407K $USDC du pool Radiant, tout en brûlant seulement 1 wei de jeton, car amountScaled = 1. En effet, 407700000000 * 1e27 / 271800000000999999999999998631966035920 = 1,5, mais en raison du problème d'arrondi mathématique. Notez que amountScaled est une variable de type uint256, qui tronque 1,5 en 1 ;


10. Déposer 271K $USDC dans le pool Radiant, frappant 1 jeton amountScaled, car 271800000001 * 1e27 / 271800000000999999999999998631966035920 = 1 ;
11. Retirer 407K $USDC du pool Radiant, tout en détruisant uniquement 1 jeton amountScaled ;
12. Répéter les étapes 10 et 11 jusqu'à 18 fois, vidant ainsi progressivement tous les $USDC précédemment déposés par le pirate sur ce nouveau marché ;
13. Échanger 2 $WETH contre 4,73K $USDC, puis convertir 3,23K $USDC en 1,36 $WETH ;
14. Rembourser le prêt flash AAVE avec 3 millions de dollars USDC en capital et 15 000 dollars USDC en frais ;
15. Obtenir un profit de 90 ETH.
Causes fondamentales
La cause fondamentale est que le pirate a été le premier utilisateur à interagir avec le nouveau marché USDC natif fraîchement créé. Il a exploité la fonction de prêt flash de Radiant pour amplifier massivement le liquidityIndex, puis tiré parti d’un problème d’arrondi mathématique afin de voler des actifs du pool de prêt.
Code clé


Bienvenue dans la communauté officielle TechFlow
Groupe Telegram :https://t.me/TechFlowDaily
Compte Twitter officiel :https://x.com/TechFlowPost
Compte Twitter anglais :https://x.com/BlockFlow_News










