Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023, às 15:40, o OrionProtocol na Ethereum e na Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato, com perdas totais de aproximadamente 2,9 milhões de dólares, das quais 2.844.766 USDT foram perdidos na cadeia Ethereum e 191.606 BUSD na cadeia Binance Smart.
Análise do Processo de Ataque
O atacante primeiro implantou um contrato de Token personalizado e realizou operações de transferência e autorização relevantes, 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 a troca de tokens. O caminho de troca foi configurado como [USDC, Token do atacante, USDT].
Durante o processo de troca, devido à funcionalidade de callback incluída no contrato do Token do atacante, foi feita uma nova chamada ao método ExchangeWithAtomic.depositAsset durante o processo de Token.Transfer, resultando em um ataque de reentrada. Isso fez com que o montante do depósito fosse acumulado, e, no final, o atacante obteve lucro através da operação de retirada.
Fluxo de Capital
O capital inicial do atacante vem da conta de uma carteira quente de uma grande 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 núcleo da vulnerabilidade está na função doSwapThroughOrionPool do contrato ExchangeWithAtomic e na função _doSwapTokens que ela chama. Essas funções atualizam a variável curBalance somente após a execução da transferência de Token, dando ao atacante a oportunidade de explorar um ataque de reentrância.
Os atacantes adicionaram lógica de callback à função transfer do Token personalizado, fazendo com que a função depositAsset fosse chamada novamente durante o processo de transferência. Isso levou a uma 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.
Sugestões de Segurança
Para projetos com funcionalidade de troca de tokens, é necessário considerar os seguintes pontos:
Considere os riscos de segurança que podem surgir de múltiplos Tokens e caminhos de troca.
Seguir o padrão de codificação "Verificações-Efeitos-Interações" (Checks-Effects-Interactions), ou seja, primeiro realizar a verificação de estado, em seguida atualizar o estado do contrato e, por último, interagir com contratos externos.
Utilize bloqueios de reentrada ou mecanismos semelhantes ao executar operações críticas para prevenir ataques de reentrada.
Realizar uma verificação e tratamento rigorosos dos valores de retorno das chamadas externas.
Realizar auditorias de código e testes de segurança regularmente, corrigindo prontamente as vulnerabilidades encontradas.
Ao tomar essas medidas, o projeto pode reduzir significativamente o risco de sofrer ataques semelhantes, melhorando a segurança e a estabilidade do contrato.
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.
15 gostos
Recompensa
15
4
Partilhar
Comentar
0/400
CryptoSurvivor
· 07-09 04:25
Chega, mais uma empresa cancerígena.
Ver originalResponder0
GateUser-5854de8b
· 07-06 19:22
Ai, fui apanhado a usar Cupões de Recorte novamente.
Ver originalResponder0
SurvivorshipBias
· 07-06 19:21
É outro buraco de contrato...
Ver originalResponder0
CoconutWaterBoy
· 07-06 19:08
Se não fizer auditoria de código, merece perder dinheiro.
OrionProtocol sofreu um ataque de reentrada, com perdas de quase 2,9 milhões de dólares.
Análise do incidente de ataque de reentrada do OrionProtocol
No dia 2 de fevereiro de 2023, às 15:40, o OrionProtocol na Ethereum e na Binance Smart Chain sofreu um ataque de reentrada devido a uma vulnerabilidade no contrato, com perdas totais de aproximadamente 2,9 milhões de dólares, das quais 2.844.766 USDT foram perdidos na cadeia Ethereum e 191.606 BUSD na cadeia Binance Smart.
Análise do Processo de Ataque
O atacante primeiro implantou um contrato de Token personalizado e realizou operações de transferência e autorização relevantes, 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 a troca de tokens. O caminho de troca foi configurado como [USDC, Token do atacante, USDT].
Durante o processo de troca, devido à funcionalidade de callback incluída no contrato do Token do atacante, foi feita uma nova chamada ao método ExchangeWithAtomic.depositAsset durante o processo de Token.Transfer, resultando em um ataque de reentrada. Isso fez com que o montante do depósito fosse acumulado, e, no final, o atacante obteve lucro através da operação de retirada.
Fluxo de Capital
O capital inicial do atacante vem da conta de uma carteira quente de uma grande 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 núcleo da vulnerabilidade está na função doSwapThroughOrionPool do contrato ExchangeWithAtomic e na função _doSwapTokens que ela chama. Essas funções atualizam a variável curBalance somente após a execução da transferência de Token, dando ao atacante a oportunidade de explorar um ataque de reentrância.
Os atacantes adicionaram lógica de callback à função transfer do Token personalizado, fazendo com que a função depositAsset fosse chamada novamente durante o processo de transferência. Isso levou a uma 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.
Sugestões de Segurança
Para projetos com funcionalidade de troca de tokens, é necessário considerar os seguintes pontos:
Ao tomar essas medidas, o projeto pode reduzir significativamente o risco de sofrer ataques semelhantes, melhorando a segurança e a estabilidade do contrato.