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.
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.
Jetons un coup d’œil au processus d’attaque du pirate informatique :






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.


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 ! **