Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, os contratos OrionProtocol na Ethereum e na Binance Chain sofreram um ataque de reentrada devido a uma vulnerabilidade. O atacante conseguiu roubar cerca de 2,9 milhões de dólares em fundos, incluindo 2.844.766 USDT na Ethereum e 191.606 BUSD na BSC.
Análise do processo de ataque
O atacante primeiro criou um contrato de Token especial e realizou operações de transferência e autorização, preparando-se para o ataque subsequente. Em seguida, o atacante tomou emprestado usando o método swap do UNI-V2 e chamou o método swapThroughOrionPool do contrato ExchangeWithAtomic para trocar tokens.
O caminho de troca é definido como [USDC, Token criado pelo atacante, USDT]. Durante o processo de troca, devido à funcionalidade de callback incluída no contrato do Token criado pelo atacante, um ataque de reentrada foi desencadeado durante a execução do método ExchangeWithAtomic.swapThroughOrionPool. O atacante continuou a chamar o método ExchangeWithAtomic.depositAsset através do Token.Transfer, fazendo com que o montante do depósito acumulasse continuamente, e, finalmente, completou 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 determinada plataforma de negociação. Dos 1.651 ETH obtidos com o ataque, 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 aparece na função doSwapThroughOrionPool. Esta função atualiza a variável curBalance após a execução da transferência de tokens, o que cria uma oportunidade para o atacante. O atacante adicionou uma função de callback na função transfer do contrato Token que criou, que chama novamente a função depositAsset. Isso leva à atualização errônea da variável curBalance, permitindo ao atacante retirar fundos adicionais através da função withdraw após reembolsar o empréstimo relâmpago.
Reproduzindo o Ataque
Os pesquisadores forneceram parte do código POC, simulando o processo de ataque. Os resultados dos testes mostraram que o atacante conseguiu explorar uma vulnerabilidade do contrato para obter USDT extra.
Sugestões de segurança
Para este tipo de ataques, recomenda-se que os desenvolvedores do projeto considerem os seguintes pontos ao projetar o contrato:
Avaliar de forma abrangente os riscos de segurança que podem surgir de vários Tokens e caminhos de troca.
Seguir a norma de codificação "primeiro avaliar, depois escrever na variável e, em seguida, realizar chamadas externas" (modo Checks-Effects-Interactions).
Ao implementar a funcionalidade de troca de tokens, preste especial atenção para prevenir ataques de reentrada.
Realizar auditorias de código regularmente para identificar e corrigir vulnerabilidades potenciais a tempo.
Considerar a implementação de limites de montante de transação ou outras medidas de controle de risco.
Este evento destaca novamente a importância da segurança dos contratos inteligentes. As equipes de projeto devem manter um foco contínuo na segurança dos contratos e tomar medidas proativas para proteger os ativos dos usuários, a fim de preservar o desenvolvimento saudável de todo o ecossistema Web3.
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.
16 Curtidas
Recompensa
16
6
Compartilhar
Comentário
0/400
SybilSlayer
· 07-28 15:34
Mais uma vez reentrada, que aborrecido.
Ver originalResponder0
CantAffordPancake
· 07-28 11:05
Mais uma falha de contrato, estou rendido.
Ver originalResponder0
GateUser-26d7f434
· 07-25 18:03
Parece que vai puxar o tapete~
Ver originalResponder0
OvertimeSquid
· 07-25 17:55
Outra vez contratos a serem Cupões de Recorte, estou tonto.
Ver originalResponder0
BrokenYield
· 07-25 17:55
outro dia, outro hack de defi... as vulnerabilidades do protocolo nunca dormem
OrionProtocol sofreu um ataque de reentrada, quase 3 milhões de dólares em fundos foram roubados.
Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023 à tarde, os contratos OrionProtocol na Ethereum e na Binance Chain sofreram um ataque de reentrada devido a uma vulnerabilidade. O atacante conseguiu roubar cerca de 2,9 milhões de dólares em fundos, incluindo 2.844.766 USDT na Ethereum e 191.606 BUSD na BSC.
Análise do processo de ataque
O atacante primeiro criou um contrato de Token especial e realizou operações de transferência e autorização, preparando-se para o ataque subsequente. Em seguida, o atacante tomou emprestado usando o método swap do UNI-V2 e chamou o método swapThroughOrionPool do contrato ExchangeWithAtomic para trocar tokens.
O caminho de troca é definido como [USDC, Token criado pelo atacante, USDT]. Durante o processo de troca, devido à funcionalidade de callback incluída no contrato do Token criado pelo atacante, um ataque de reentrada foi desencadeado durante a execução do método ExchangeWithAtomic.swapThroughOrionPool. O atacante continuou a chamar o método ExchangeWithAtomic.depositAsset através do Token.Transfer, fazendo com que o montante do depósito acumulasse continuamente, e, finalmente, completou 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 determinada plataforma de negociação. Dos 1.651 ETH obtidos com o ataque, 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 aparece na função doSwapThroughOrionPool. Esta função atualiza a variável curBalance após a execução da transferência de tokens, o que cria uma oportunidade para o atacante. O atacante adicionou uma função de callback na função transfer do contrato Token que criou, que chama novamente a função depositAsset. Isso leva à atualização errônea da variável curBalance, permitindo ao atacante retirar fundos adicionais através da função withdraw após reembolsar o empréstimo relâmpago.
Reproduzindo o Ataque
Os pesquisadores forneceram parte do código POC, simulando o processo de ataque. Os resultados dos testes mostraram que o atacante conseguiu explorar uma vulnerabilidade do contrato para obter USDT extra.
Sugestões de segurança
Para este tipo de ataques, recomenda-se que os desenvolvedores do projeto considerem os seguintes pontos ao projetar o contrato:
Este evento destaca novamente a importância da segurança dos contratos inteligentes. As equipes de projeto devem manter um foco contínuo na segurança dos contratos e tomar medidas proativas para proteger os ativos dos usuários, a fim de preservar o desenvolvimento saudável de todo o ecossistema Web3.