Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, o OrionProtocol na Ethereum e na Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato, resultando em perdas de aproximadamente 2,9 milhões de dólares, incluindo 2.844.766 USDT na Ethereum e 191.606 BUSD na Binance Smart Chain.
Análise do processo de ataque
O atacante primeiro criou um contrato Token e realizou as operações de transferência e autorização relacionadas, preparando-se para o ataque subsequente. Depois, o atacante tomou um empréstimo através do método swap do UNI-V2 e chamou o método swapThroughOrionPool do contrato ExchangeWithAtomic para realizar a troca de tokens. O caminho de troca foi definido como USDC → Token criado pelo atacante → USDT.
Durante o processo de troca, devido à funcionalidade de callback incluída no contrato Token criado pelo atacante, quando o método ExchangeWithAtomic.swapThroughOrionPool é executado, o Token.Transfer continua a chamar o método ExchangeWithAtomic.depositAsset, resultando em um ataque de reentrada. Isso faz com que o montante do depósito continue a acumular, permitindo que o atacante finalize o lucro através da operação de retirada.
Fluxo de Fundos
O capital inicial do atacante vem da conta da carteira quente de uma plataforma de negociação. Dos 1.651 ETH obtidos, 657,5 ainda permanecem no endereço da carteira do atacante, enquanto o restante foi transferido através de serviços de mistura.
Análise de Vulnerabilidades
O problema central da vulnerabilidade ocorre na função doSwapThroughOrionPool. Esta função chama a função _doSwapTokens, onde a operação de transferência de tokens acontece antes da atualização de curBalance. Um atacante aproveita a funcionalidade de callback adicionada à função transfer do Token personalizado para chamar novamente a função depositAsset antes da atualização de curBalance, levando a uma atualização incorreta de curBalance. No final, após reembolsar o empréstimo relâmpago, o atacante extrai os fundos chamando a função withdraw para completar o ataque.
Sugestões de Prevenção
O design do contrato deve considerar os potenciais riscos que podem advir de várias Tokens e caminhos de troca.
Seguir a norma de codificação "primeiro avaliar, depois atualizar variáveis e, por último, realizar chamadas externas" (modelo Checks-Effects-Interactions) pode aumentar efetivamente a segurança do contrato.
Ao implementar a funcionalidade de troca de tokens, é necessário ter especial atenção ao risco de ataques de reentrada, podendo considerar o uso de mecanismos como bloqueios de reentrada para proteção.
Para funções críticas que envolvem operações financeiras, recomenda-se realizar uma auditoria de segurança abrangente e testes, incluindo simulações de várias condições limite e cenários de exceção.
Realizar verificações de segurança de contratos regularmente, atualizando e corrigindo prontamente potenciais vulnerabilidades.
Tomando essas medidas, é possível reduzir significativamente o risco de ataques a contratos inteligentes e aumentar a segurança geral do projeto. No ecossistema Web3, a segurança é sempre uma das considerações mais importantes.
Esta página pode conter conteúdos de terceiros, que são fornecidos apenas para fins informativos (sem representações/garantias) e não devem ser considerados como uma aprovação dos seus pontos de vista pela Gate, nem como aconselhamento financeiro ou profissional. Consulte a Declaração de exoneração de responsabilidade para obter mais informações.
12 gostos
Recompensa
12
6
Republicar
Partilhar
Comentar
0/400
GasFeeCrier
· 19h atrás
Não faz bem a proteção do contrato? Bem feito!
Ver originalResponder0
AirdropBuffet
· 08-12 21:06
Outro contrato inteligente falhou~
Ver originalResponder0
ZenMiner
· 08-12 21:05
A vulnerabilidade é tão grande, por que não me chamam para auditar?
Ver originalResponder0
HallucinationGrower
· 08-12 21:00
Outra oportunidade de puxar o tapete
Ver originalResponder0
TokenStorm
· 08-12 20:57
Ai, o script está todo escrito, falta apenas um passo.
OrionProtocol sofreu um ataque de reentrada, resultando na perda de 2,9 milhões de dólares em encriptação.
Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, o OrionProtocol na Ethereum e na Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato, resultando em perdas de aproximadamente 2,9 milhões de dólares, incluindo 2.844.766 USDT na Ethereum e 191.606 BUSD na Binance Smart Chain.
Análise do processo de ataque
O atacante primeiro criou um contrato Token e realizou as operações de transferência e autorização relacionadas, preparando-se para o ataque subsequente. Depois, o atacante tomou um empréstimo através do método swap do UNI-V2 e chamou o método swapThroughOrionPool do contrato ExchangeWithAtomic para realizar a troca de tokens. O caminho de troca foi definido como USDC → Token criado pelo atacante → USDT.
Durante o processo de troca, devido à funcionalidade de callback incluída no contrato Token criado pelo atacante, quando o método ExchangeWithAtomic.swapThroughOrionPool é executado, o Token.Transfer continua a chamar o método ExchangeWithAtomic.depositAsset, resultando em um ataque de reentrada. Isso faz com que o montante do depósito continue a acumular, permitindo que o atacante finalize o lucro através da operação de retirada.
Fluxo de Fundos
O capital inicial do atacante vem da conta da carteira quente de uma plataforma de negociação. Dos 1.651 ETH obtidos, 657,5 ainda permanecem no endereço da carteira do atacante, enquanto o restante foi transferido através de serviços de mistura.
Análise de Vulnerabilidades
O problema central da vulnerabilidade ocorre na função doSwapThroughOrionPool. Esta função chama a função _doSwapTokens, onde a operação de transferência de tokens acontece antes da atualização de curBalance. Um atacante aproveita a funcionalidade de callback adicionada à função transfer do Token personalizado para chamar novamente a função depositAsset antes da atualização de curBalance, levando a uma atualização incorreta de curBalance. No final, após reembolsar o empréstimo relâmpago, o atacante extrai os fundos chamando a função withdraw para completar o ataque.
Sugestões de Prevenção
O design do contrato deve considerar os potenciais riscos que podem advir de várias Tokens e caminhos de troca.
Seguir a norma de codificação "primeiro avaliar, depois atualizar variáveis e, por último, realizar chamadas externas" (modelo Checks-Effects-Interactions) pode aumentar efetivamente a segurança do contrato.
Ao implementar a funcionalidade de troca de tokens, é necessário ter especial atenção ao risco de ataques de reentrada, podendo considerar o uso de mecanismos como bloqueios de reentrada para proteção.
Para funções críticas que envolvem operações financeiras, recomenda-se realizar uma auditoria de segurança abrangente e testes, incluindo simulações de várias condições limite e cenários de exceção.
Realizar verificações de segurança de contratos regularmente, atualizando e corrigindo prontamente potenciais vulnerabilidades.
Tomando essas medidas, é possível reduzir significativamente o risco de ataques a contratos inteligentes e aumentar a segurança geral do projeto. No ecossistema Web3, a segurança é sempre uma das considerações mais importantes.