Plus de 1 900 ETH ont été volés et comment Radiant Capital a été piraté pour voler 4,5 millions de dollars

ForesightNews

Le 3 janvier 2024, le projet Radiant Capital a subi une attaque de prêt flash par un attaquant. L’attaquant a volé plus de 1 900 ETH en 3 transactions, d’une valeur de plus de 4,5 millions de dollars américains. Les fonds volés sont actuellement toujours stockés à l’adresse de l’attaquant. .

Écrit par : Beosin

Le 3 janvier 2024, selon la surveillance de la plateforme de surveillance des risques de sécurité, d’alerte précoce et de blocage EagleEye de Beosin, le projet ** Radiant Capital a subi une attaque de prêt flash de la part d’un attaquant. L’attaquant a volé plus de 1 900 ETH, d’une valeur de plus de 4,5 millions de dollars américains, au cours de 3 transactions. Les fonds volés sont toujours stockés à l’adresse de l’attaquant. ** L’équipe de sécurité de Beosin a immédiatement analysé cet incident.

Analyse de vulnérabilité

La cause première de cet incident est que le projet Radiant Capital a utilisé l’expansion et l’arrondi de précision dans le processus de calcul du nombre de jetons. Cela a permis à l’attaquant d’augmenter ses profits en contrôlant la précision et en la combinant avec l’arrondi. Cliquez pour attaquer. **

En observant le code ci-dessus, la fonction rayDiv transmet deux données uint256 a et b. L’ensemble du processus peut être abrégé en (a*RAY+b/2)/b, où RAY est les données étendues de précision, qui sont 10^27. , donc le résultat est tout à fait A a*RAY/b+0.5, la fonction d’arrondi est implémentée, et l’erreur de cette méthode de calcul vient principalement de b. Si b est extrêmement petit par rapport à a, alors l’erreur sera négligeable, mais si b a le même ordre de grandeur que a , alors l’erreur peut atteindre a elle-même.

Par exemple : si a*RAY=10000, b=3, alors le résultat calculé est 3333, ce qui est 1/10000 plus petit que la valeur réelle ; et si a*RAY=10000, b=3000, le résultat calculé est 3, 1/10 plus petit que la valeur réelle.

Dans cet incident, l’attaquant a manipulé la valeur de b de sorte que la valeur de b et la valeur de a aient le même ordre de grandeur, ce qui rend le calcul équivalent à 3/2,0001=1, et la valeur calculée est 1/3 inférieure à la valeur réelle.

Processus d’attaque

Jetons un coup d’œil au processus d’attaque du pirate informatique :

  1. L’attaquant a d’abord emprunté 3 millions USDC via le prêt flash AAVE, qui a été utilisé pour financer l’attaque.

  1. L’attaquant a promis 2 millions USDC pour le contrat Radiant et a obtenu 2 millions de jetons de certificat rUSDCn.

  1. L’attaquant effectue un prêt flash via le contrat Radiant, emprunte 2 millions USDC, restitue les 2 millions USDC dans la fonction de rappel et extrait l’USDC promis dans la deuxième étape. Enfin, la fonction de prêt flash appellera la fonction transferfrom avec Transférer l’USDC de l’attaquant dans le contrat. **À l’heure actuelle, des frais de traitement de 9/10 000 seront facturés, et les frais de traitement perçus deviennent la liquidité du pool. **

  1. En répétant l’étape 3 plusieurs fois, l’attaquant contrôle le LiquidIndex comme étant très grand, LiquidIndex=2718000000009999999999999998631966035920.

  1. Ensuite, l’attaquant crée un nouveau contrat et y place 543 600 USDC, **car 5436 (valeur USDC) est exactement le double du 2718 (valeur LiquidityIndex) à l’étape 4, qui peut être facilement contrôlée par arrondi. **

  1. L’attaquant a hypothéqué la totalité des 543 600 USDC dans le contrat Radiant et a obtenu le même montant de rUSDCn.

  1. L’attaquant a extrait 407 700 USDC, ce qui aurait dû détruire 407 700 rUSDCn, mais comme mentionné ci-dessus, la fonction de gravure a effectué des calculs d’expansion et d’arrondi de précision.

407700000000000000000000000000000000000/2718000000009999999999999998631966035920=1,49999999, et le résultat de l’arrondi est 1, ce qui rend le résultat 1/3 plus petit.

Comme le montre l’image ci-dessous, 407 700 USDC auraient dû être détruits, mais il en reste 271 800, ce qui indique que seulement 271 800 ont été détruits et que l’attaquant a retiré 407 700 USDC.

  1. L’attaquant exploite la vulnérabilité de l’étape 7 pour répéter l’opération de retrait du gage, et le retrait est toujours 1/3 supérieur au montant du gage, et échange finalement tous les USDC du pool. **

Suivi des fonds

Au moment de mettre sous presse, les 1 902 ETH volés ont été stockés à l’adresse du pirate informatique et n’ont pas été déplacés. Beosin Trace continuera de surveiller les fonds. **

En ce début d’année 2024, nous avons déjà été témoins de deux cas de vols à grande échelle. (Bilan des incidents de sécurité d’hier : qu’est-il arrivé au premier cas de l’année, l’incident Orbit Chain volé de 80 millions de dollars ?) Cette série d’événements nous rappelle une fois de plus que dans l’écosystème Web3, les précautions de sécurité sont toujours très importantes ! **

Avertissement : Les informations contenues dans cette page peuvent provenir de tiers et ne représentent pas les points de vue ou les opinions de Gate. Le contenu de cette page est fourni à titre de référence uniquement et ne constitue pas un conseil financier, d'investissement ou juridique. Gate ne garantit pas l'exactitude ou l'exhaustivité des informations et n'est pas responsable des pertes résultant de l'utilisation de ces informations. Les investissements en actifs virtuels comportent des risques élevés et sont soumis à une forte volatilité des prix. Vous pouvez perdre la totalité du capital investi. Veuillez comprendre pleinement les risques pertinents et prendre des décisions prudentes en fonction de votre propre situation financière et de votre tolérance au risque. Pour plus de détails, veuillez consulter l'avertissement.
Commentaire
0/400
Aucun commentaire