Análise do ataque de reentrada de empréstimos flash no projeto Jarvis Network
Em 15 de janeiro de 2023, o projeto Jarvis_Network foi atacado, resultando no roubo de 663.101 MATIC. Este incidente levantou preocupações sobre a segurança do projeto.
Através da análise da pilha de chamadas de transações, descobriu-se que o atacante explorou uma vulnerabilidade de reentrada. Durante o processo de reentrada, a chamada da mesma função do mesmo contrato, embora com os mesmos parâmetros de entrada, apresenta diferenças significativas nos valores de retorno. Essa diferença ocorre principalmente na função remove_liquidity.
O ataque de reentrada visa principalmente a função remove_liquidity de um determinado contrato inteligente. Essa função retorna os tokens adicionados pelo usuário ao remover liquidez. Devido à homogeneidade entre Polygon e as cadeias EVM, a lógica de reentrada foi acionada ao transferir MATIC para o contrato.
Uma análise mais aprofundada revelou que o problema está na implementação da função getUnderlyingPrice. Esta função envolve vários contratos que não foram tornados públicos, o que aumenta a dificuldade de análise. No entanto, ao verificar os slots de armazenamento e a pilha de chamadas, podemos inferir os valores das variáveis chave e o caminho das chamadas de função.
O cerne do ataque reside na diferença significativa no valor retornado pela função get_virtual_price antes e depois da reentrada. Essa mudança está relacionada ao momento da atualização da variável self.D. Normalmente, self.D deveria ser atualizado após a conclusão da transferência, mas nesta ocorrência de ataque, devido à reentrada, o cálculo do preço apresentou um erro.
 destruir os tokens LP do usuário; 2) enviar os fundos de staking para o usuário; 3) atualizar o valor de self.D. O atacante realiza uma reentrada no segundo passo, aproveitando o valor de self.D que não foi atualizado a tempo para emprestar, obtendo assim benefícios indevidos.
![Análise do incidente de ataque de reentrada do Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Análise do incidente de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
Vale a pena notar que, embora a função remove_liquidity use o decorador @nonreentrant)'lock'( para prevenir reentradas, o bloqueio de reentrada não teve o efeito desejado, uma vez que o atacante, após reentrar, acessou outros contratos para realizar empréstimos.
![Análise do incidente de ataque de reentrada do Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-d41ac025ee561569cce3b941d7e07967.webp(
Este ataque expôs a importância do momento da atualização de variáveis em contratos inteligentes. Para aumentar a segurança, recomenda-se que as equipes de projeto adotem as seguintes medidas:
Realizar auditorias de segurança rigorosas
Certifique-se de que a modificação da variável seja concluída antes da chamada externa.
Adotar uma abordagem de múltiplas fontes de dados para obter informações de preços
Escrever código seguindo o padrão "Verificações-Efeitos-Interações" (Checks-Effects-Interactions)
A implementação dessas melhores práticas pode melhorar significativamente a segurança e a estabilidade dos contratos inteligentes, fornecendo uma infraestrutura mais confiável para o ecossistema Web3.
![Análise do evento de ataque de reentrada de Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-2c4474781d661306bc8c432dad3942c0.webp(
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.
Jarvis Network sofreu um ataque de reentrada através de Empréstimos Flash, 663,101 MATIC foram roubados.
Análise do ataque de reentrada de empréstimos flash no projeto Jarvis Network
Em 15 de janeiro de 2023, o projeto Jarvis_Network foi atacado, resultando no roubo de 663.101 MATIC. Este incidente levantou preocupações sobre a segurança do projeto.
Através da análise da pilha de chamadas de transações, descobriu-se que o atacante explorou uma vulnerabilidade de reentrada. Durante o processo de reentrada, a chamada da mesma função do mesmo contrato, embora com os mesmos parâmetros de entrada, apresenta diferenças significativas nos valores de retorno. Essa diferença ocorre principalmente na função remove_liquidity.
O ataque de reentrada visa principalmente a função remove_liquidity de um determinado contrato inteligente. Essa função retorna os tokens adicionados pelo usuário ao remover liquidez. Devido à homogeneidade entre Polygon e as cadeias EVM, a lógica de reentrada foi acionada ao transferir MATIC para o contrato.
Uma análise mais aprofundada revelou que o problema está na implementação da função getUnderlyingPrice. Esta função envolve vários contratos que não foram tornados públicos, o que aumenta a dificuldade de análise. No entanto, ao verificar os slots de armazenamento e a pilha de chamadas, podemos inferir os valores das variáveis chave e o caminho das chamadas de função.
O cerne do ataque reside na diferença significativa no valor retornado pela função get_virtual_price antes e depois da reentrada. Essa mudança está relacionada ao momento da atualização da variável self.D. Normalmente, self.D deveria ser atualizado após a conclusão da transferência, mas nesta ocorrência de ataque, devido à reentrada, o cálculo do preço apresentou um erro.
 destruir os tokens LP do usuário; 2) enviar os fundos de staking para o usuário; 3) atualizar o valor de self.D. O atacante realiza uma reentrada no segundo passo, aproveitando o valor de self.D que não foi atualizado a tempo para emprestar, obtendo assim benefícios indevidos.
![Análise do incidente de ataque de reentrada do Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Análise do incidente de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
Vale a pena notar que, embora a função remove_liquidity use o decorador @nonreentrant)'lock'( para prevenir reentradas, o bloqueio de reentrada não teve o efeito desejado, uma vez que o atacante, após reentrar, acessou outros contratos para realizar empréstimos.
![Análise do incidente de ataque de reentrada do Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-d41ac025ee561569cce3b941d7e07967.webp(
Este ataque expôs a importância do momento da atualização de variáveis em contratos inteligentes. Para aumentar a segurança, recomenda-se que as equipes de projeto adotem as seguintes medidas:
A implementação dessas melhores práticas pode melhorar significativamente a segurança e a estabilidade dos contratos inteligentes, fornecendo uma infraestrutura mais confiável para o ecossistema Web3.
![Análise do evento de ataque de reentrada de Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-2c4474781d661306bc8c432dad3942c0.webp(