De acordo com o alerta de segurança do sistema SlowMist MistEye, em 7 de outubro de 2023, o Stars Arena, protocolo social da rede Avalanche, foi atacado, causando um prejuízo de aproximadamente US$ 2,9 milhões. A equipe de segurança do SlowMist analisou brevemente o incidente do ataque e compartilhou os resultados da seguinte forma.
Informação relacionada
Endereço do invasor:
Contrato de ataque:
Transação de ataque:
Núcleo de Ataque
O invasor explora a vulnerabilidade de reentrada para adulterar o preço correspondente à sua parcela de depósito. Posteriormente, durante a venda, ocorreu manipulação de preços semelhante devido à dependência do cálculo de preços da manipulação maliciosa. Ao calcular com precisão o preço atualizado das ações na reentrada, o invasor rouba fundos do contrato.
Análise de transação
Podemos descobrir que há uma chamada reentrante na transação de ataque e analisamos gradualmente o método de chamada descompilando o código.
O invasor primeiro criou contratos de ataque (0x7f283 e 0xdd9af), chamado método 0xe9ccf3a3 da Stars Arena: compartilha o contrato por meio do contrato de ataque e, em seguida, depositou 1 token AVAX.
De acordo com o rastreamento passo a passo do código descompilado, o método 0xe9ccf3a3 usado pela primeira vez pelo invasor é uma função semelhante a um depósito, que chama os métodos 0x326c e 0x2058. O método 0x326c é apenas uma chamada retornada como parâmetro, enquanto o método 0x2058 é semelhante a uma função que trata da compra ou troca de um determinado token. Este método usa a quantidade e o endereço do token AVAX passados em 0xe9ccf3a3 para realizar a próxima operação , compartilhar e cobrar. calcular.
Seguindo a lógica de chamada da linha 92 do método 0x2058, podemos descobrir que o método 0x1a9b é uma função de cálculo, o resultado calculado é um valor semelhante ao preço e seu valor de retorno é o recém-calculado v24 / 0xde0b6b3a7640000 ou _initialPrice.
Existem chamadas de baixo nível nos métodos 0x307c e 0x30ef nas linhas 109, 110 e 116, e a chamada de 0x30ef ainda é uma chamada externa para g1, que é o endereço do contrato de ataque 0xdd9af de entrada. A função não possui restrições de bloqueio anti-reentrada e, após a chamada externa ser executada, este método executará o julgamento if subsequente para atualizar os parâmetros field0.length e field0. Não há dúvida de que a reentrada ocorre aqui.
Vejamos os dados construídos pelo invasor na chamada reentrante.
A chamada externa reentrante é o método 0x5632b2e4 e 4 parâmetros construídos pelo invasor são passados. Esses parâmetros são convertidos em 91000000000 por meio de conversão hexadecimal.
Conforme mencionado acima, a chamada externa para o método 0x5632b2e4 é executada antes do julgamento if (g0 == _getMyShares[address(g1)][msg.sender]). Neste momento, o valor de field0.lengt é 0 e não foi atualizado. O invasor apenas usou esse método para ignorar o julgamento do método 0x5632b2e4 e alterou os quatro estados de parâmetro a seguir de msg.sender, que é o contrato de ataque 0xdd9af, para os dados construídos quando a chamada externa é feita.
Após as operações acima, o invasor ligou para sellShares para vender sua ação e obteve 266.102,97278 AVAX.
Aprofundando-se na função sellShares, a função primeiro chamou o método 0x1a9b, e houve uma chamada no método 0x2058 anterior, que é uma função que trata da compra ou troca de determinados tokens. Podemos descobrir que o método 0x2329 no método 0x1a9b atualizará o proprietário_9f [g0] , e este parâmetro foi modificado para 91000000000 construído pelo invasor durante a reentrada.
Retorne ao método 0x1a9b e recalcule com base no valor construído anteriormente de forma maliciosa (veja os comentários para o valor do cálculo).
Após o cálculo acima, o preço correspondente à ação recém-calculada foi alterado e o resultado calculado é 274.333,061476814e18. Após uma série de cobranças de taxas, o invasor usou uma construção maliciosa para manipular o preço sem modificar as ações, vendeu as ações e obteve lucro com sucesso.
Resumir
O núcleo deste ataque reside na atualização da dependência do cálculo de preços causada pelo ataque de reentrada, que por sua vez leva a uma manipulação maliciosa de preços semelhante. A equipe de segurança do SlowMist recomenda que a parte do projeto tente o seu melhor para passar por auditorias de várias empresas de segurança antes de implantar e liberar o contrato; ao mesmo tempo, a especificação de codificação Checks-Effects-Interactions deve ser atendida tanto quanto possível durante a codificação, e bloqueios anti-reentrada devem ser adicionados.
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.
Slow Mist: Uma breve análise do Stars Arena sendo hackeado
fundo
De acordo com o alerta de segurança do sistema SlowMist MistEye, em 7 de outubro de 2023, o Stars Arena, protocolo social da rede Avalanche, foi atacado, causando um prejuízo de aproximadamente US$ 2,9 milhões. A equipe de segurança do SlowMist analisou brevemente o incidente do ataque e compartilhou os resultados da seguinte forma.
Informação relacionada
Endereço do invasor:
Contrato de ataque:
Transação de ataque:
Núcleo de Ataque
O invasor explora a vulnerabilidade de reentrada para adulterar o preço correspondente à sua parcela de depósito. Posteriormente, durante a venda, ocorreu manipulação de preços semelhante devido à dependência do cálculo de preços da manipulação maliciosa. Ao calcular com precisão o preço atualizado das ações na reentrada, o invasor rouba fundos do contrato.
Análise de transação
Podemos descobrir que há uma chamada reentrante na transação de ataque e analisamos gradualmente o método de chamada descompilando o código.
O invasor primeiro criou contratos de ataque (0x7f283 e 0xdd9af), chamado método 0xe9ccf3a3 da Stars Arena: compartilha o contrato por meio do contrato de ataque e, em seguida, depositou 1 token AVAX.
De acordo com o rastreamento passo a passo do código descompilado, o método 0xe9ccf3a3 usado pela primeira vez pelo invasor é uma função semelhante a um depósito, que chama os métodos 0x326c e 0x2058. O método 0x326c é apenas uma chamada retornada como parâmetro, enquanto o método 0x2058 é semelhante a uma função que trata da compra ou troca de um determinado token. Este método usa a quantidade e o endereço do token AVAX passados em 0xe9ccf3a3 para realizar a próxima operação , compartilhar e cobrar. calcular.
Seguindo a lógica de chamada da linha 92 do método 0x2058, podemos descobrir que o método 0x1a9b é uma função de cálculo, o resultado calculado é um valor semelhante ao preço e seu valor de retorno é o recém-calculado v24 / 0xde0b6b3a7640000 ou _initialPrice.
Existem chamadas de baixo nível nos métodos 0x307c e 0x30ef nas linhas 109, 110 e 116, e a chamada de 0x30ef ainda é uma chamada externa para g1, que é o endereço do contrato de ataque 0xdd9af de entrada. A função não possui restrições de bloqueio anti-reentrada e, após a chamada externa ser executada, este método executará o julgamento if subsequente para atualizar os parâmetros field0.length e field0. Não há dúvida de que a reentrada ocorre aqui.
Vejamos os dados construídos pelo invasor na chamada reentrante.
A chamada externa reentrante é o método 0x5632b2e4 e 4 parâmetros construídos pelo invasor são passados. Esses parâmetros são convertidos em 91000000000 por meio de conversão hexadecimal.
Conforme mencionado acima, a chamada externa para o método 0x5632b2e4 é executada antes do julgamento if (g0 == _getMyShares[address(g1)][msg.sender]). Neste momento, o valor de field0.lengt é 0 e não foi atualizado. O invasor apenas usou esse método para ignorar o julgamento do método 0x5632b2e4 e alterou os quatro estados de parâmetro a seguir de msg.sender, que é o contrato de ataque 0xdd9af, para os dados construídos quando a chamada externa é feita.
Após as operações acima, o invasor ligou para sellShares para vender sua ação e obteve 266.102,97278 AVAX.
Aprofundando-se na função sellShares, a função primeiro chamou o método 0x1a9b, e houve uma chamada no método 0x2058 anterior, que é uma função que trata da compra ou troca de determinados tokens. Podemos descobrir que o método 0x2329 no método 0x1a9b atualizará o proprietário_9f [g0] , e este parâmetro foi modificado para 91000000000 construído pelo invasor durante a reentrada.
Retorne ao método 0x1a9b e recalcule com base no valor construído anteriormente de forma maliciosa (veja os comentários para o valor do cálculo).
Após o cálculo acima, o preço correspondente à ação recém-calculada foi alterado e o resultado calculado é 274.333,061476814e18. Após uma série de cobranças de taxas, o invasor usou uma construção maliciosa para manipular o preço sem modificar as ações, vendeu as ações e obteve lucro com sucesso.
Resumir
O núcleo deste ataque reside na atualização da dependência do cálculo de preços causada pelo ataque de reentrada, que por sua vez leva a uma manipulação maliciosa de preços semelhante. A equipe de segurança do SlowMist recomenda que a parte do projeto tente o seu melhor para passar por auditorias de várias empresas de segurança antes de implantar e liberar o contrato; ao mesmo tempo, a especificação de codificação Checks-Effects-Interactions deve ser atendida tanto quanto possível durante a codificação, e bloqueios anti-reentrada devem ser adicionados.