Voltar a reforçar a vulnerabilidade? Analise o ataque à Stars Arena

fundo

De acordo com o aviso de segurança do sistema Slow MistEye, em 7 de outubro de 2023, a Stars Arena, o protocolo social on-chain da Avalanche, foi atacada, resultando em um prejuízo de cerca de US$ 2,9 milhões. A equipe de segurança do Slow Mist analisou brevemente o ataque e compartilhou os resultados abaixo.

Informações relacionadas

Endereço do atacante:

Contrato de ataque:

Comércio de Ataque:

Núcleo de ataque

Um invasor explora uma vulnerabilidade de reentrância para adulterar o preço correspondente à sua parte de depósito. Subsequentemente, aquando da venda, uma manipulação de preços semelhante é causada pela dependência da manipulação maliciosa dos cálculos de preços. Ao calcular com precisão o preço das ações atualizado no reentrante, o atacante rouba os fundos do contrato.

Análise de transações

Podemos descobrir que há uma chamada de reentrância na transação de ataque, e analisamos o método de chamada passo a passo, descompilando o código.

! [Re-entrincheira de novo?] Análise do ataque à Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)

O atacante primeiro cria um contrato de ataque (0x7f283 e 0xdd9af), chama o método 0xe9ccf3a3 da Stars Arena: Compartilha contrato através do contrato de ataque e, em seguida, deposita 1 token AVAX.

! [Re-entrincheira de novo?] Análise do ataque da Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)

De acordo com o rastreamento passo-a-passo do código descompilado, o método 0xe9ccf3a3 usado primeiro pelo invasor é uma função semelhante a um depósito que chama os métodos 0x326c e 0x2058. O método 0x326c é uma chamada que é retornada apenas como um parâmetro, enquanto o método 0x2058 é semelhante a uma função que lida com a compra ou troca de algum tipo de token, e o método usa a quantidade e o endereço dos tokens AVAX passados pelo 0xe9ccf3a3 para calcular a próxima operação e o cálculo de ações e taxas.

! [Re-entrincheira de novo?] Análise do ataque da Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)

Seguindo a lógica de chamada da linha 92 do método 0x2058, pode-se encontrar que o método 0x1a9b é uma função de cálculo, e o resultado calculado é um valor semelhante ao preço, e seu valor de retorno é o recém-calculado v24 / 0xde0b6b3a7640000 ou _initialPrice.

As próximas linhas 109, 110 e 116 dos métodos 0x307c e 0x30ef têm uma chamada para chamada de baixo nível, e a chamada 0x30ef ainda é uma chamada externa para o g1, ou seja, o endereço do contrato de ataque de 0xdd9af de entrada. A função não tem uma restrição de bloqueio de reentrante, e depois que a chamada externa é executada, esse método só executará o julgamento subsequente if para atualizar os parâmetros field0.length e field0. Não há dúvida de que a reentrância está acontecendo aqui.

! [Re-entrincheira de novo?] Análise do ataque da Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)

Vejamos os dados que o invasor constrói na chamada de reentrância.

! [Re-entrincheira de novo?] Análise do ataque à Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)

A reentrância externa chama o método 0x5632b2e4 e passa em quatro parâmetros construídos pelo atacante, que convertem 153005ce00 para 910000000000 por decimal.

Como 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 field0.lengt é 0 e não é atualizado. Desta forma, o atacante ignora o julgamento no método 0x5632b2e4 e modifica o estado dos seguintes quatro parâmetros de msg.sender, ou seja, o contrato de ataque 0xdd9af, a ser construído quando a chamada externa é feita.

! [Re-entrincheira de novo?] Análise do ataque da Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)

Depois de fazer isso, o atacante chamou sellShares para vender sua ação, obtendo 266.102,97278 AVAX.

! [Re-entrincheira de novo?] Análise do ataque à Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)

Indo mais fundo na função sellShares, a função inicialmente chama o método 0x1a9b, que foi chamado no método 0x2058 anterior, que é uma função que lida com a compra ou troca de algum tipo de token. Podemos ver que o método 0x2329 no método 0x1a9b atualiza o proprietário_9f[g0] e este parâmetro foi modificado para 910000000000 construído pelo atacante na reentrância.

! [Re-entrincheira de novo?] Análise do ataque da Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)

De volta ao método 0x1a9b, recalcule com base no valor construído anteriormente de forma maliciosa (ver nota para o valor calculado).

! [Re-entrincheira de novo?] Análise do ataque à Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)

Após o cálculo acima, o preço correspondente à ação recém-calculada foi alterado, e o resultado é 274.333,061476814e18. Depois que uma série de taxas são cobradas, o invasor usa construções maliciosas para manipular o preço sem modificar a ação, vendê-la e obter lucro com sucesso.

Resumo

No centro deste ataque está a atualização da dependência de cálculo de preços causada pelo ataque de reentrância, que leva a uma manipulação de preços maliciosa semelhante. A equipe de segurança do Slow Mist sugere que a equipe do projeto deve tentar ser auditada por várias empresas de segurança antes de implantar o contrato. Ao mesmo tempo, ao codificar, ele deve atender à especificação de codificação Checks-Effects-Interactions tanto quanto possível e adicionar bloqueio anti-reentrância.

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.
  • Recompensa
  • Comentário
  • Compartilhar
Comentário
0/400
Sem comentários
Faça trade de criptomoedas em qualquer lugar e a qualquer hora
qrCode
Escaneie o código para baixar o app da Gate
Comunidade
Português (Brasil)
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)