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ú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.
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.