Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, o projeto OrionProtocol nas redes Ethereum e Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato. O atacante obteve um lucro total de cerca de 2,9 milhões de dólares, o que inclui 2.844.766 USDT na rede Ethereum e 191.606 BUSD na Binance Smart Chain.
Análise do Processo de Ataque
O atacante primeiro implantou um contrato de Token personalizado e realizou uma série de operações de transferência e autorização para se preparar para o ataque subsequente. Em seguida, o atacante tomou emprestado através da funcionalidade de swap de um DEX e chamou o método ExchangeWithAtomic.swapThroughOrionPool do OrionProtocol para a troca de tokens. O caminho de troca foi definido como [USDC, Token do atacante, USDT].
Ao executar o método swapThroughOrionPool, devido à funcionalidade de callback incluída no contrato Token do atacante, ocorreu um ataque de reentrada durante o processo de transferência. O atacante utilizou o método Token.Transfer para chamar repetidamente a função ExchangeWithAtomic.depositAsset, fazendo com que o montante do depósito se acumulasse continuamente. No final, o atacante completou o lucro através da operação de retirada.
Fluxo de Capital
De acordo com os dados on-chain, o capital inicial do atacante veio 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 núcleo da vulnerabilidade está na função doSwapThroughOrionPool do contrato ExchangeWithAtomic. Esta função apresenta uma falha lógica ao executar a operação _doSwapTokens. Especificamente, o código atualiza a variável curBalance apenas após a execução da transferência, criando condições para um ataque de reentrada.
Os atacantes adicionaram lógica de callback na função transfer do Token personalizado, chamando repetidamente a função depositAsset, o que levou a uma atualização incorreta do curBalance. No final, após reembolsar o empréstimo relâmpago, os atacantes chamaram a função withdraw para retirar fundos em excesso.
Sugestões de prevenção
Para evitar ataques semelhantes, a equipe do projeto deve ter em atenção os seguintes pontos:
Ao implementar a funcionalidade de troca de tokens, é necessário considerar abrangentemente os riscos de segurança que podem advir de vários tipos de Token e caminhos de troca.
Seguir rigorosamente o padrão de codificação "Checks-Effects-Interactions"(, ou seja, primeiro realizar a verificação de condições, depois atualizar as variáveis de estado e, por último, executar chamadas externas.
Reforçar o controle de segurança sobre chamadas externas, especialmente ao lidar com Tokens personalizados dos usuários.
Realizar auditorias de código e testes de segurança regularmente, para identificar e corrigir rapidamente vulnerabilidades potenciais.
Use bibliotecas de segurança maduras e melhores práticas, como o SafeERC20 da OpenZeppelin.
Ao adotar essas medidas, é possível reduzir significativamente o risco de ataques a contratos inteligentes e aumentar a segurança geral do projeto.
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.
11 Curtidas
Recompensa
11
6
Repostar
Compartilhar
Comentário
0/400
ser_ngmi
· 21h atrás
Já não tenho dinheiro.
Ver originalResponder0
PretendingToReadDocs
· 21h atrás
Acontece alguma coisa todos os dias, para que fazer mais?
OrionProtocol sofreu um ataque de reentrada, com perdas de cerca de 2,9 milhões de dólares.
Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, o projeto OrionProtocol nas redes Ethereum e Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato. O atacante obteve um lucro total de cerca de 2,9 milhões de dólares, o que inclui 2.844.766 USDT na rede Ethereum e 191.606 BUSD na Binance Smart Chain.
Análise do Processo de Ataque
O atacante primeiro implantou um contrato de Token personalizado e realizou uma série de operações de transferência e autorização para se preparar para o ataque subsequente. Em seguida, o atacante tomou emprestado através da funcionalidade de swap de um DEX e chamou o método ExchangeWithAtomic.swapThroughOrionPool do OrionProtocol para a troca de tokens. O caminho de troca foi definido como [USDC, Token do atacante, USDT].
Ao executar o método swapThroughOrionPool, devido à funcionalidade de callback incluída no contrato Token do atacante, ocorreu um ataque de reentrada durante o processo de transferência. O atacante utilizou o método Token.Transfer para chamar repetidamente a função ExchangeWithAtomic.depositAsset, fazendo com que o montante do depósito se acumulasse continuamente. No final, o atacante completou o lucro através da operação de retirada.
Fluxo de Capital
De acordo com os dados on-chain, o capital inicial do atacante veio 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 núcleo da vulnerabilidade está na função doSwapThroughOrionPool do contrato ExchangeWithAtomic. Esta função apresenta uma falha lógica ao executar a operação _doSwapTokens. Especificamente, o código atualiza a variável curBalance apenas após a execução da transferência, criando condições para um ataque de reentrada.
Os atacantes adicionaram lógica de callback na função transfer do Token personalizado, chamando repetidamente a função depositAsset, o que levou a uma atualização incorreta do curBalance. No final, após reembolsar o empréstimo relâmpago, os atacantes chamaram a função withdraw para retirar fundos em excesso.
Sugestões de prevenção
Para evitar ataques semelhantes, a equipe do projeto deve ter em atenção os seguintes pontos:
Ao implementar a funcionalidade de troca de tokens, é necessário considerar abrangentemente os riscos de segurança que podem advir de vários tipos de Token e caminhos de troca.
Seguir rigorosamente o padrão de codificação "Checks-Effects-Interactions"(, ou seja, primeiro realizar a verificação de condições, depois atualizar as variáveis de estado e, por último, executar chamadas externas.
Reforçar o controle de segurança sobre chamadas externas, especialmente ao lidar com Tokens personalizados dos usuários.
Realizar auditorias de código e testes de segurança regularmente, para identificar e corrigir rapidamente vulnerabilidades potenciais.
Use bibliotecas de segurança maduras e melhores práticas, como o SafeERC20 da OpenZeppelin.
Ao adotar essas medidas, é possível reduzir significativamente o risco de ataques a contratos inteligentes e aumentar a segurança geral do projeto.