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 Chain sofreu um ataque de reentrada devido a uma vulnerabilidade do contrato, resultando em uma perda de aproximadamente 2,9 milhões de dólares. As perdas específicas incluem 2.844.766 USDT na Ethereum e 191.606 BUSD na Binance Chain.
Análise do Processo de Ataque
O atacante primeiro criou um contrato Token e realizou operações de transferência e autorização, preparando-se para o ataque subsequente. Em seguida, 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 a troca de tokens.
O caminho de troca é definido como [USDC, Token criado pelo atacante, USDT]. Durante o processo de troca, devido à função de callback existente no contrato do Token criado pelo atacante, o atacante conseguiu continuar chamando o método depositAsset do contrato ExchangeWithAtomic através do método Transfer do Token, permitindo assim um ataque de reentrância, fazendo com que o valor do depósito se acumulasse continuamente. No final, o atacante completou o lucro através da operação de retirada.
Análise de Vulnerabilidades
O cerne da vulnerabilidade reside na função doSwapThroughOrionPool do contrato ExchangeWithAtomic. Esta função apresenta os seguintes problemas ao executar _doSwapTokens:
A variável curBalance só é atualizada após a operação de transferência.
Não seguiu o padrão "Verificações-Efeitos-Interações" (Checks-Effects-Interactions).
Os atacantes exploraram esta vulnerabilidade, adicionando uma funcionalidade de callback na função transfer do contrato Token falsificado, fazendo com que chamasse a função depositAsset durante a transferência. Isso resultou na atualização incorreta da variável curBalance, permitindo que os atacantes retirassem fundos em excesso através da função withdraw após reembolsar o empréstimo relâmpago.
Fluxo de Fundos
O capital inicial do atacante vem da conta da carteira quente de uma determinada 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.
Sugestões de prevenção
Para evitar ataques semelhantes, a equipe do projeto deve prestar atenção aos seguintes pontos:
Ao projetar o contrato, é necessário considerar as possíveis situações inesperadas que podem surgir devido a vários Tokens e caminhos de troca.
Seguir rigorosamente a norma de codificação "verificação-efeito-interação", garantindo que primeiro se faça a avaliação, depois se atualizem as variáveis de estado e, por último, se efetue a chamada externa.
Implementar verificações de segurança e restrições mais rigorosas para operações críticas envolvendo transferências de fundos.
Realizar auditorias de segurança de contratos regularmente, para detectar e corrigir vulnerabilidades potenciais a tempo.
Este evento lembra-nos mais uma vez que a segurança é fundamental no desenvolvimento de contratos inteligentes. As equipas de projeto devem manter-se sempre alerta e adotar múltiplas medidas de proteção para minimizar ao máximo os riscos dos contratos.
Ver original
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.
OrionProtocol sofreu um ataque de reentrada, com perdas de 2,9 milhões de USDT e BUSD.
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 Chain sofreu um ataque de reentrada devido a uma vulnerabilidade do contrato, resultando em uma perda de aproximadamente 2,9 milhões de dólares. As perdas específicas incluem 2.844.766 USDT na Ethereum e 191.606 BUSD na Binance Chain.
Análise do Processo de Ataque
O atacante primeiro criou um contrato Token e realizou operações de transferência e autorização, preparando-se para o ataque subsequente. Em seguida, 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 a troca de tokens.
O caminho de troca é definido como [USDC, Token criado pelo atacante, USDT]. Durante o processo de troca, devido à função de callback existente no contrato do Token criado pelo atacante, o atacante conseguiu continuar chamando o método depositAsset do contrato ExchangeWithAtomic através do método Transfer do Token, permitindo assim um ataque de reentrância, fazendo com que o valor do depósito se acumulasse continuamente. No final, o atacante completou o lucro através da operação de retirada.
Análise de Vulnerabilidades
O cerne da vulnerabilidade reside na função doSwapThroughOrionPool do contrato ExchangeWithAtomic. Esta função apresenta os seguintes problemas ao executar _doSwapTokens:
Os atacantes exploraram esta vulnerabilidade, adicionando uma funcionalidade de callback na função transfer do contrato Token falsificado, fazendo com que chamasse a função depositAsset durante a transferência. Isso resultou na atualização incorreta da variável curBalance, permitindo que os atacantes retirassem fundos em excesso através da função withdraw após reembolsar o empréstimo relâmpago.
Fluxo de Fundos
O capital inicial do atacante vem da conta da carteira quente de uma determinada 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.
Sugestões de prevenção
Para evitar ataques semelhantes, a equipe do projeto deve prestar atenção aos seguintes pontos:
Este evento lembra-nos mais uma vez que a segurança é fundamental no desenvolvimento de contratos inteligentes. As equipas de projeto devem manter-se sempre alerta e adotar múltiplas medidas de proteção para minimizar ao máximo os riscos dos contratos.