Análise do Ataque de Reentrada de Empréstimos Flash ao Jarvis Network
No dia 15 de janeiro de 2023, o projeto Jarvis_Network sofreu um ataque significativo, resultando na perda de 663,101 MATIC. Este ataque explorou uma combinação de Empréstimos Flash e ataques de reentrada, expondo uma grave vulnerabilidade no contrato do projeto.
O atacante explorou habilidosamente uma vulnerabilidade na função remove_liquidity. Esta função devolve os tokens adicionados pelo usuário ao remover liquidez. Como a rede Polygon é compatível com EVM, quando MATIC é transferido para o contrato, isso aciona a lógica de reentrada do contrato.
A análise revelou que a chave do ataque reside na chamada da função getUnderlyingPrice. Esta função retornou preços significativamente diferentes antes e depois da reinicialização: antes da reinicialização era 1002157321772769944, e depois da reinicialização subiu para 10091002696492234934, com uma diferença de quase 10 vezes.
A raiz do problema está no momento inadequado da atualização da variável self.D no contrato. A ordem de execução da função remove_liquidity é: 1) destrói os tokens LP do usuário; 2) envia os fundos apostados para o usuário; 3) atualiza self.D. O atacante realizou uma reentrada na segunda etapa, aproveitando o valor de self.D que ainda não havia sido atualizado para obter informações de preço incorretas, o que permitiu operações de empréstimo lucrativas.
Embora a função remove_liquidity utilize o decorador @nonreentrant('lock') para prevenir reentrância, essa medida de proteção falhou devido ao ataque envolver operações entre contratos.
Este evento destacou vários princípios de segurança chave:
A modificação de variáveis deve ser concluída antes da chamada externa, para evitar inconsistências de estado.
O mecanismo de obtenção de preços deve utilizar múltiplas fontes de dados para aumentar a fiabilidade.
A lógica do código deve seguir o padrão "Checks-Effects-Interactions"(, ou seja, primeiro realizar a verificação das condições, depois modificar as variáveis de estado e, por último, fazer chamadas externas.
![Análise do incidente de ataque de reentrada de Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-a0f03c13dd2d37ba67ccf538fec62aa0.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-fcd66f4cc03bb8e822c9414526681442.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash do Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
Este ataque mais uma vez prova que a auditoria de segurança de contratos inteligentes é crucial. As equipes de projeto devem prestar mais atenção à segurança dos contratos, garantindo que o código passe por uma auditoria completa e rigorosa, para prevenir a ocorrência de vulnerabilidades semelhantes.
![Análise do evento de ataque de reentrada do Empréstimos Flash 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.
A Jarvis Network sofreu um ataque de reentrada através de Empréstimos Flash, resultando em uma perda de 66 mil MATIC.
Análise do Ataque de Reentrada de Empréstimos Flash ao Jarvis Network
No dia 15 de janeiro de 2023, o projeto Jarvis_Network sofreu um ataque significativo, resultando na perda de 663,101 MATIC. Este ataque explorou uma combinação de Empréstimos Flash e ataques de reentrada, expondo uma grave vulnerabilidade no contrato do projeto.
O atacante explorou habilidosamente uma vulnerabilidade na função remove_liquidity. Esta função devolve os tokens adicionados pelo usuário ao remover liquidez. Como a rede Polygon é compatível com EVM, quando MATIC é transferido para o contrato, isso aciona a lógica de reentrada do contrato.
A análise revelou que a chave do ataque reside na chamada da função getUnderlyingPrice. Esta função retornou preços significativamente diferentes antes e depois da reinicialização: antes da reinicialização era 1002157321772769944, e depois da reinicialização subiu para 10091002696492234934, com uma diferença de quase 10 vezes.
A raiz do problema está no momento inadequado da atualização da variável self.D no contrato. A ordem de execução da função remove_liquidity é: 1) destrói os tokens LP do usuário; 2) envia os fundos apostados para o usuário; 3) atualiza self.D. O atacante realizou uma reentrada na segunda etapa, aproveitando o valor de self.D que ainda não havia sido atualizado para obter informações de preço incorretas, o que permitiu operações de empréstimo lucrativas.
Embora a função remove_liquidity utilize o decorador @nonreentrant('lock') para prevenir reentrância, essa medida de proteção falhou devido ao ataque envolver operações entre contratos.
Este evento destacou vários princípios de segurança chave:
![Análise do incidente de ataque de reentrada de Empréstimos Flash da Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-a0f03c13dd2d37ba67ccf538fec62aa0.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-fcd66f4cc03bb8e822c9414526681442.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-9b2de9b00c52d3ff96d5a361df65769a.webp(
![Análise do evento de ataque de reentrada do Empréstimos Flash do Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-88f9283ee0923cff2a22405715721cd2.webp(
![Jarvis Network Empréstimos Flash重入攻击事件分析])https://img-cdn.gateio.im/webp-social/moments-d41ac025ee561569cce3b941d7e07967.webp(
Este ataque mais uma vez prova que a auditoria de segurança de contratos inteligentes é crucial. As equipes de projeto devem prestar mais atenção à segurança dos contratos, garantindo que o código passe por uma auditoria completa e rigorosa, para prevenir a ocorrência de vulnerabilidades semelhantes.
![Análise do evento de ataque de reentrada do Empréstimos Flash Jarvis Network])https://img-cdn.gateio.im/webp-social/moments-2c4474781d661306bc8c432dad3942c0.webp(