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ú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.
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.