Em 3 de janeiro de 2024, de acordo com Beosin EagleEye, o projeto Radiant Capital foi vítima de um ataque relâmpago de empréstimo por um invasor. Por meio de três transações, o invasor roubou mais de 1.900 ETH, avaliados em mais de US$ 4,5 milhões. Os fundos roubados estão atualmente mantidos no endereço do invasor e a equipe de segurança da Beosin analisou prontamente o incidente.

Análise de Vulnerabilidade

A causa raiz deste incidente está no cálculo da quantidade de tokens do projeto Radiant Capital, que envolve expansão e arredondamento de precisão. O invasor explorou a capacidade de controlar a precisão e, combinada com arredondamentos, ampliou as margens de lucro do ataque.

No código observado, a função rayDiv recebe dois dados uint256, a e b. Todo o processo pode ser simplificado como (a RAY + b/2) / b, onde RAY são dados de expansão de precisão, iguais a 10²⁷. Isso resulta em um RAY/b + 0,5, alcançando a funcionalidade de arredondamento. A principal fonte de erro neste cálculo vem de b. Se b for significativamente menor que a, o erro se torna insignificante. No entanto, se b for de magnitude semelhante a a, o erro pode ser substancial.

Por exemplo, se a RAY = 10.000 eb = 3, o resultado calculado será 3.333, que é 1/10.000 menor que o valor real. Se a RAY = 10.000 eb = 3.000, o resultado calculado é 3, que é 1/10 menor que o valor real.

Neste incidente, o invasor manipulou o valor de b para ter uma magnitude semelhante a a, fazendo com que o cálculo fosse equivalente a 3/2,0001 = 1. O valor calculado é 1/3 menor que o valor real.

Processo de ataque

  1. O invasor inicialmente emprestou 3 milhões de USDC por meio de um empréstimo instantâneo AAVE como capital inicial para o ataque.

2. 2 milhões de USDC foram prometidos no contrato da Radiant e o invasor obteve 2 milhões de certificados de token rUSDCn.

3. O invasor usou um empréstimo rápido por meio do contrato Radiant para emprestar 2 milhões de USDC. Na função de retorno de chamada, foram reembolsados ​​2 milhões de USDC, extraindo simultaneamente o USDC prometido da segunda etapa. A função de empréstimo rápido chamada de função transferfrom, transferindo o USDC do invasor para o contrato, com uma taxa de 9/10.000 cobrada como liquidez para o pool.

4. Ao repetir a etapa 3, o invasor controlou em grande parte o liquidityIndex, atingindo liquidityIndex=271800000000999999999999998631966035920.

5. Posteriormente, o invasor criou um novo contrato e depositou nele 543.600 USDC. Este valor corresponde ao dobro do valor do liquidityIndex do passo 4, facilitando o controle de arredondamentos.

6. O invasor comprometeu todos os 543.600 USDC no contrato Radiant, obtendo uma quantia equivalente de rUSDCn.

7. O invasor retirou 407.700 USDC. Embora 407.700 rUSDCn devessem ter sido queimados, como mencionado acima, a função de queima envolvia expansão precisa e cálculos de arredondamento. 4077000000000000000000000000000000000/27180000000099999999999998631966035920 = 1,49999999, mas o arredondamento resulta em 1, fazendo com que o resultado seja 1/3 menor que o valor real. Conforme mostrado abaixo, em vez de queimar 407.700, apenas 271.800 foram queimados, permitindo ao invasor sacar 407.700 USDC.

8. Explorando a vulnerabilidade da etapa 7, o invasor repetiu as operações de promessa e retirada, retirando consistentemente 1/3 a mais do que o valor prometido e, em última análise, trocando todos os USDC do pool.

Acompanhamento de fundos

No momento em que este artigo foi escrito, o ETH de 1902 roubado permanecia no endereço do hacker sem movimento. Beosin Trace continuará monitorando os fundos.

No início de 2024, testemunhamos dois casos de roubo de alto valor. (Revisão do incidente de segurança de ontem: O que aconteceu no primeiro caso do ano, o roubo de US$ 80 milhões da Orbit Chain?) Esta série de eventos serve como um lembrete de que no ecossistema Web3, as precauções de segurança continuam cruciais!

Contato

Se você precisar de algum serviço de segurança blockchain, entre em contato conosco:

Site Oficial Beosin EagleEye Twitter Telegram Linkedin