O projeto Euler Finance sofreu um ataque de empréstimo flash, resultando em perdas de quase 200 milhões de dólares.
No dia 13 de março de 2023, o projeto Euler Finance sofreu um ataque de empréstimo flash devido a uma vulnerabilidade no contrato, resultando em perdas de até 197 milhões de dólares. O atacante explorou a falha na função donateToReserves do contrato do projeto, que não tinha verificação de liquidez, para obter lucros maciços através de múltiplas operações.
Análise do Processo de Ataque
O atacante primeiro pediu emprestado 30 milhões de DAI de uma plataforma de empréstimos flash e implementou dois contratos: contrato de empréstimo e contrato de liquidação.
O atacante colocou 20 milhões de DAI emprestados em um contrato do Euler Protocol, recebendo 195 mil eDAI.
Utilizando a funcionalidade de alavancagem de 10 vezes do Euler Protocol, o atacante emprestou 1.956.000 eDAI e 2.000.000 dDAI.
O atacante usou os 10 milhões de DAI restantes para pagar parte da dívida, destruiu a quantidade correspondente de dDAI e, em seguida, tomou emprestado novamente a mesma quantidade de eDAI e dDAI.
Passos chave: O atacante chama a função donateToReserves, doa 1 milhão de eDAI, e em seguida liquida através da função liquidate, obtendo 3,1 milhões de dDAI e 2,5 milhões de eDAI.
Por fim, o atacante extraiu 389 mil DAI, devolveu 300 mil DAI de empréstimos flash, e obteve um lucro final de 88,7 mil DAI.
Causa da vulnerabilidade
A vulnerabilidade central deste ataque reside na falta de verificações de liquidez necessárias na função donateToReserves do contrato Euler Finance. Ao contrário de outras funções críticas como mint, a função donateToReserves não executa a operação checkLiquidity. Isso permite que os atacantes contornem as verificações de liquidez normais, criando artificialmente um estado que pode ser liquidado e, em seguida, completando a liquidação para obter lucro.
Normalmente, a função checkLiquidity chama o módulo RiskManager, garantindo que a quantidade de Etoken do usuário seja maior que a quantidade de Dtoken, a fim de manter a segurança do contrato. No entanto, devido à falta deste passo crítico na função donateToReserves, os atacantes conseguiram explorar essa vulnerabilidade para realizar ataques.
Sugestões de Segurança
Para esse tipo de ataque, recomendamos que os projetos de blockchain:
Realizar uma auditoria de segurança abrangente antes do lançamento do contrato, garantindo a segurança do contrato.
Para projetos de empréstimo, é necessário prestar atenção especial aos aspectos críticos como reembolso de fundos, detecção de liquidez e liquidação de dívidas.
Assegure-se de que todas as funções que possam afetar o estado dos ativos dos utilizadores incluam as verificações de segurança necessárias, como a verificação de liquidez.
Realizar revisões e atualizações de código regularmente, corrigindo prontamente as vulnerabilidades identificadas.
Estabelecer um mecanismo de resposta a emergências para que possa reagir e lidar rapidamente em caso de incidentes de segurança.
Ao adotar essas medidas, a equipe do projeto pode reduzir significativamente o risco de sofrer ataques semelhantes, aumentando a segurança geral do contrato.
Esta página pode conter conteúdo de terceiros, que é fornecido apenas para fins informativos (não para representações/garantias) e não deve ser considerada como um endosso de suas opiniões pela Gate nem como aconselhamento financeiro ou profissional. Consulte a Isenção de responsabilidade para obter detalhes.
9 Curtidas
Recompensa
9
5
Repostar
Compartilhar
Comentário
0/400
WhaleWatcher
· 08-11 16:40
Outra vez um idiota entrou no mercado.
Ver originalResponder0
Lonely_Validator
· 08-10 08:22
Blockchain segurança agora está tão ruim? Sem palavras.
Ver originalResponder0
StakeWhisperer
· 08-10 08:10
Outra armadilha de comer moeda
Ver originalResponder0
GweiWatcher
· 08-10 07:58
Mais uma vez a plataforma é lançada sem verificar o contrato?
Euler Finance sofreu ataque de empréstimo flash com uma perda de quase 200 milhões de dólares
O projeto Euler Finance sofreu um ataque de empréstimo flash, resultando em perdas de quase 200 milhões de dólares.
No dia 13 de março de 2023, o projeto Euler Finance sofreu um ataque de empréstimo flash devido a uma vulnerabilidade no contrato, resultando em perdas de até 197 milhões de dólares. O atacante explorou a falha na função donateToReserves do contrato do projeto, que não tinha verificação de liquidez, para obter lucros maciços através de múltiplas operações.
Análise do Processo de Ataque
O atacante primeiro pediu emprestado 30 milhões de DAI de uma plataforma de empréstimos flash e implementou dois contratos: contrato de empréstimo e contrato de liquidação.
O atacante colocou 20 milhões de DAI emprestados em um contrato do Euler Protocol, recebendo 195 mil eDAI.
Utilizando a funcionalidade de alavancagem de 10 vezes do Euler Protocol, o atacante emprestou 1.956.000 eDAI e 2.000.000 dDAI.
O atacante usou os 10 milhões de DAI restantes para pagar parte da dívida, destruiu a quantidade correspondente de dDAI e, em seguida, tomou emprestado novamente a mesma quantidade de eDAI e dDAI.
Passos chave: O atacante chama a função donateToReserves, doa 1 milhão de eDAI, e em seguida liquida através da função liquidate, obtendo 3,1 milhões de dDAI e 2,5 milhões de eDAI.
Por fim, o atacante extraiu 389 mil DAI, devolveu 300 mil DAI de empréstimos flash, e obteve um lucro final de 88,7 mil DAI.
Causa da vulnerabilidade
A vulnerabilidade central deste ataque reside na falta de verificações de liquidez necessárias na função donateToReserves do contrato Euler Finance. Ao contrário de outras funções críticas como mint, a função donateToReserves não executa a operação checkLiquidity. Isso permite que os atacantes contornem as verificações de liquidez normais, criando artificialmente um estado que pode ser liquidado e, em seguida, completando a liquidação para obter lucro.
Normalmente, a função checkLiquidity chama o módulo RiskManager, garantindo que a quantidade de Etoken do usuário seja maior que a quantidade de Dtoken, a fim de manter a segurança do contrato. No entanto, devido à falta deste passo crítico na função donateToReserves, os atacantes conseguiram explorar essa vulnerabilidade para realizar ataques.
Sugestões de Segurança
Para esse tipo de ataque, recomendamos que os projetos de blockchain:
Realizar uma auditoria de segurança abrangente antes do lançamento do contrato, garantindo a segurança do contrato.
Para projetos de empréstimo, é necessário prestar atenção especial aos aspectos críticos como reembolso de fundos, detecção de liquidez e liquidação de dívidas.
Assegure-se de que todas as funções que possam afetar o estado dos ativos dos utilizadores incluam as verificações de segurança necessárias, como a verificação de liquidez.
Realizar revisões e atualizações de código regularmente, corrigindo prontamente as vulnerabilidades identificadas.
Estabelecer um mecanismo de resposta a emergências para que possa reagir e lidar rapidamente em caso de incidentes de segurança.
Ao adotar essas medidas, a equipe do projeto pode reduzir significativamente o risco de sofrer ataques semelhantes, aumentando a segurança geral do contrato.