Em 3 de janeiro de 2024, o projeto Radiant Capital sofreu um ataque rápido de empréstimo por um invasor. O invasor roubou mais de 1.900 ETH por meio de 3 transações, no valor de mais de 4,5 milhões de dólares americanos. Os fundos roubados ainda estão armazenados no endereço do invasor. .
Escrito por: Beosin
Em 3 de janeiro de 2024, de acordo com o monitoramento da plataforma de monitoramento de risco de segurança, alerta antecipado e bloqueio EagleEye da Beosin, o projeto **Radiant Capital sofreu um ataque rápido de empréstimo de um invasor. O invasor roubou mais de 1.900 ETH por meio de 3 transações, no valor de mais de 4,5 milhões de dólares americanos. Os fundos roubados ainda estão armazenados no endereço do invasor. **A equipe de segurança da Beosin analisou este incidente imediatamente.
A causa raiz deste incidente é que o projeto Radiant Capital usou expansão e arredondamento de precisão no processo de cálculo do número de tokens. Isso permitiu ao invasor expandir os lucros controlando a precisão e combinando-a com o arredondamento. Clique para atacar. **

Observando o código acima, a função rayDiv passa dois dados uint256 a e b. Todo o processo pode ser abreviado como (a*RAY+b/2)/b, onde RAY são os dados estendidos de precisão, que são 10^27 , então o resultado é bastante Em a*RAY/b+0.5, a função de arredondamento é implementada, e o erro deste método de cálculo vem principalmente de b. Se b for extremamente pequeno em relação a a, então o erro será insignificante, mas se b tiver a mesma ordem de grandeza que a, então o erro pode atingir o próprio a.
Por exemplo: se a*RAY=10000, b=3, então o resultado calculado é 3333, que é 1/10000 menor que o valor real; e se a*RAY=10000, b=3000, o resultado calculado é 3, 1/10 menor que o valor real.
Neste incidente, o invasor manipulou o valor de b para que o valor de b e o valor de a tenham a mesma ordem de grandeza, tornando o cálculo equivalente a 3/2,0001=1, e o valor calculado seja 1/3 menor que o valor real.
Vamos dar uma olhada no processo de ataque do hacker:






40770000000000000000000000000000000/27180000000099999999999998631966035920=1,49999999, e o resultado do arredondamento é 1, fazendo com que o resultado seja 1/3 menor.
Conforme mostrado na imagem abaixo, 407.700 USDC deveriam ter sido destruídos, mas restaram 271.800, indicando que apenas 271.800 foram destruídos, e o invasor retirou 407.700 USDC.


Até o momento desta publicação, os 1.902 ETH roubados foram armazenados no endereço do hacker e não foram movidos.Beosin Trace continuará monitorando os fundos. **

No início de 2024, já testemunhamos dois casos de roubos em grande escala. (Revisão dos incidentes de segurança de ontem: O que aconteceu com o primeiro caso do ano, o incidente da Orbit Chain roubado de US$ 80 milhões?) Esta série de eventos mais uma vez nos lembra que no ecossistema Web3, as precauções de segurança ainda são muito importantes! **