Resíduo fatal: um ataque na cadeia de 300 mil dólares originado por armazenamento transitório
No dia 30 de março de 2025, um sistema de monitoramento de segurança detectou que um projeto de negociação alavancada na cadeia Ethereum havia sofrido um ataque, resultando na perda de mais de 300 mil dólares em ativos. A equipe de segurança realizou uma análise aprofundada sobre este evento e agora compartilha os resultados abaixo:
Contexto
A versão 0.8.24 do Solidity (lançamento em janeiro de 2024) introduziu características de armazenamento transitório baseadas no EIP-1153. Esta é uma nova localização de armazenamento de dados, destinada a fornecer aos desenvolvedores uma maneira de armazenamento temporário de baixo custo e eficaz durante a transação.
As principais características do armazenamento transitório incluem:
Baixo custo de gas: O custo de gas das operações TSTORE e TLOAD é fixo em 100.
Persistência na transação: os dados permanecem válidos durante todo o período da transação.
Limpeza automática: Após a conclusão da transação, o armazenamento transitório é automaticamente redefinido para zero.
Fonte do ataque
A causa fundamental deste evento é que o valor armazenado temporariamente com tstore na função não foi limpo após o término da chamada da função. Isso permitiu que os atacantes utilizassem esta característica para construir endereços maliciosos específicos, contornando a verificação de permissões para transferir tokens.
Processo de Ataque
O atacante cria dois tokens maliciosos A e B, cria pools para esses dois tokens em um DEX e injeta liquidez, onde o token A é o contrato de ataque.
O atacante chama a função initialize do contrato Vault, utilizando o token A como colateral e o token B como dívida para criar o mercado de negociação alavancada APE-21.
O atacante chama a função mint do contrato Vault, depositando o token de dívida B para cunhar o token alavancado APE. Durante este processo, são realizadas duas operações de armazenamento transitório: primeiro, armazena-se o endereço de um pool DEX, e depois, armazena-se a quantidade de tokens cunhados.
O atacante cria um contrato malicioso por meio de um método especial, cujo endereço é o mesmo que o valor armazenado temporariamente na segunda vez.
O atacante chama diretamente a função de callback do contrato Vault através do contrato malicioso para retirar tokens. Como os valores no armazenamento transitório não foram limpos, a verificação da identidade do chamador foi erroneamente aprovada.
Por fim, o atacante chama a função de callback do contrato Vault através do contrato de ataque (token A), transferindo outros tokens do contrato Vault (como WBTC, WETH) para obter lucro.
Análise do fluxo de fundos
De acordo com a análise da ferramenta de análise na cadeia, os atacantes roubaram cerca de 300 mil dólares em ativos, incluindo 17.814,8626 USDC, 1,4085 WBTC e 119,871 WETH. Esses ativos foram posteriormente integrados e convertidos em WETH, sendo finalmente transferidos para um protocolo de negociação privada.
O capital inicial do atacante provém de 0,3 ETH transferidos para o protocolo de transação privada.
Resumo e Sugestões
O núcleo deste ataque reside no fato de que o atacante aproveitou a característica de armazenamento transitório que mantém o valor inalterado durante toda a transação, contornando assim a verificação de permissões da função de retorno para obter lucro. Para evitar situações semelhantes, recomenda-se que a equipe do projeto:
De acordo com a lógica de negócios, use imediatamente tstore(key, 0) para limpar os valores do armazenamento transitório após o término da chamada da função.
Reforçar a auditoria de código de contrato e os testes de segurança.
Use com cautela as características recentemente introduzidas, compreendendo plenamente os seus riscos potenciais.
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.
12 Curtidas
Recompensa
12
6
Compartilhar
Comentário
0/400
LayerZeroHero
· 11h atrás
Um ataque deve ter uma porta dos fundos.
Ver originalResponder0
Web3ProductManager
· 08-01 12:37
Ataque ao ponto de fricção clássico da experiência do utilizador
Incidente de ataque na cadeia de 300 mil dólares: falha de armazenamento transitório afeta projeto de Negociação com margem
Resíduo fatal: um ataque na cadeia de 300 mil dólares originado por armazenamento transitório
No dia 30 de março de 2025, um sistema de monitoramento de segurança detectou que um projeto de negociação alavancada na cadeia Ethereum havia sofrido um ataque, resultando na perda de mais de 300 mil dólares em ativos. A equipe de segurança realizou uma análise aprofundada sobre este evento e agora compartilha os resultados abaixo:
Contexto
A versão 0.8.24 do Solidity (lançamento em janeiro de 2024) introduziu características de armazenamento transitório baseadas no EIP-1153. Esta é uma nova localização de armazenamento de dados, destinada a fornecer aos desenvolvedores uma maneira de armazenamento temporário de baixo custo e eficaz durante a transação.
As principais características do armazenamento transitório incluem:
Fonte do ataque
A causa fundamental deste evento é que o valor armazenado temporariamente com tstore na função não foi limpo após o término da chamada da função. Isso permitiu que os atacantes utilizassem esta característica para construir endereços maliciosos específicos, contornando a verificação de permissões para transferir tokens.
Processo de Ataque
O atacante cria dois tokens maliciosos A e B, cria pools para esses dois tokens em um DEX e injeta liquidez, onde o token A é o contrato de ataque.
O atacante chama a função initialize do contrato Vault, utilizando o token A como colateral e o token B como dívida para criar o mercado de negociação alavancada APE-21.
O atacante chama a função mint do contrato Vault, depositando o token de dívida B para cunhar o token alavancado APE. Durante este processo, são realizadas duas operações de armazenamento transitório: primeiro, armazena-se o endereço de um pool DEX, e depois, armazena-se a quantidade de tokens cunhados.
O atacante cria um contrato malicioso por meio de um método especial, cujo endereço é o mesmo que o valor armazenado temporariamente na segunda vez.
O atacante chama diretamente a função de callback do contrato Vault através do contrato malicioso para retirar tokens. Como os valores no armazenamento transitório não foram limpos, a verificação da identidade do chamador foi erroneamente aprovada.
Por fim, o atacante chama a função de callback do contrato Vault através do contrato de ataque (token A), transferindo outros tokens do contrato Vault (como WBTC, WETH) para obter lucro.
Análise do fluxo de fundos
De acordo com a análise da ferramenta de análise na cadeia, os atacantes roubaram cerca de 300 mil dólares em ativos, incluindo 17.814,8626 USDC, 1,4085 WBTC e 119,871 WETH. Esses ativos foram posteriormente integrados e convertidos em WETH, sendo finalmente transferidos para um protocolo de negociação privada.
O capital inicial do atacante provém de 0,3 ETH transferidos para o protocolo de transação privada.
Resumo e Sugestões
O núcleo deste ataque reside no fato de que o atacante aproveitou a característica de armazenamento transitório que mantém o valor inalterado durante toda a transação, contornando assim a verificação de permissões da função de retorno para obter lucro. Para evitar situações semelhantes, recomenda-se que a equipe do projeto: