Defeito de armazenamento transitório resulta em ataque de 300 mil dólares ao projeto Ethereum
No dia 30 de março de 2025, um sistema de monitoramento de segurança detectou um projeto de negociação alavancada na cadeia Ethereum que foi atacado, resultando em uma perda de mais de 300 mil dólares em ativos. A equipe de segurança analisou o incidente e agora compartilha os resultados abaixo:
Conhecimento de fundo
A versão 0.8.24 do Solidity introduziu a funcionalidade de armazenamento transitório (transient storage), que é uma nova localização de armazenamento de dados. Sua característica principal é que os dados são válidos apenas durante a execução da transação atual, sendo automaticamente apagados após o término da transação. O acesso e a modificação são realizados através de duas novas instruções EVM, TSTORE e TLOAD.
O armazenamento transitório possui as seguintes características:
Custo de gas baixo: O custo de gas do TSTORE e TLOAD é fixo em 100
Persistência da transação: os dados permanecem válidos durante todo o período da transação
Limpeza automática: redefinir automaticamente para zero após o término da transação
Causa da vulnerabilidade
A causa fundamental deste evento é que os valores armazenados temporariamente usando tstore na função não foram limpos após o término da chamada da função. Isso permitiu que os atacantes aproveitassem essa característica para construir endereços maliciosos específicos e contornassem as verificações de permissão para transferir tokens.
Processo de Ataque
O atacante cria dois tokens maliciosos A e B, e cria pools para esses dois tokens em um DEX, injetando 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 token de 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, o endereço da piscina DEX e a quantidade cunhada são armazenados temporariamente um após o outro.
O atacante cria um contrato malicioso 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 na memória transitória não foram limpos, a verificação de identidade foi aprovada incorretamente.
Por fim, o atacante chama a função de callback do contrato Vault através de um ataque ao contrato (token A) e transfere outros tokens do contrato Vault (WBTC, WETH) para obter lucro.
Análise do Fluxo de Capital
Segundo a análise on-chain, os atacantes roubaram cerca de 300 mil dólares em ativos, incluindo 17,814.8626 USDC, 1.4085 WBTC e 119.871 WETH.
WBTC foi trocado por 63.5596 WETH
USDC foi trocado por 9.7122 WETH
Um total de 193.1428 WETH foi transferido para um serviço de mistura de moedas.
O capital inicial do atacante provém de 0,3 ETH transferidos de um serviço de mistura de moedas.
Resumo e Sugestões
O núcleo deste ataque reside na utilização da característica do armazenamento transitório que mantém valores durante todo o período da transação, contornando a verificação de permissões da função de callback. Recomenda-se que a equipe do projeto utilize imediatamente o tstore(key, 0) para limpar os valores no armazenamento transitório após o término da chamada de função, de acordo com a lógica de negócios. Além disso, deve-se reforçar a auditoria de código do contrato e os testes de segurança para evitar que situações semelhantes ocorram.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 gostos
Recompensa
15
4
Partilhar
Comentar
0/400
CommunitySlacker
· 7h atrás
Mais um projeto que se tornou um caixa eletrónico.
Ver originalResponder0
BlockchainDecoder
· 7h atrás
Do ponto de vista técnico, isso é um uso típico inadequado de armazenamento transitório.
Ver originalResponder0
StealthMoon
· 7h atrás
Mais uma falha de armazenamento temporário? Tenha mais cuidado.
O projeto Ethereum sofreu um ataque de 300 mil dólares devido a uma falha de armazenamento transitório.
Defeito de armazenamento transitório resulta em ataque de 300 mil dólares ao projeto Ethereum
No dia 30 de março de 2025, um sistema de monitoramento de segurança detectou um projeto de negociação alavancada na cadeia Ethereum que foi atacado, resultando em uma perda de mais de 300 mil dólares em ativos. A equipe de segurança analisou o incidente e agora compartilha os resultados abaixo:
Conhecimento de fundo
A versão 0.8.24 do Solidity introduziu a funcionalidade de armazenamento transitório (transient storage), que é uma nova localização de armazenamento de dados. Sua característica principal é que os dados são válidos apenas durante a execução da transação atual, sendo automaticamente apagados após o término da transação. O acesso e a modificação são realizados através de duas novas instruções EVM, TSTORE e TLOAD.
O armazenamento transitório possui as seguintes características:
Causa da vulnerabilidade
A causa fundamental deste evento é que os valores armazenados temporariamente usando tstore na função não foram limpos após o término da chamada da função. Isso permitiu que os atacantes aproveitassem essa característica para construir endereços maliciosos específicos e contornassem as verificações de permissão para transferir tokens.
Processo de Ataque
O atacante cria dois tokens maliciosos A e B, e cria pools para esses dois tokens em um DEX, injetando 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 token de 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, o endereço da piscina DEX e a quantidade cunhada são armazenados temporariamente um após o outro.
O atacante cria um contrato malicioso 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 na memória transitória não foram limpos, a verificação de identidade foi aprovada incorretamente.
Por fim, o atacante chama a função de callback do contrato Vault através de um ataque ao contrato (token A) e transfere outros tokens do contrato Vault (WBTC, WETH) para obter lucro.
Análise do Fluxo de Capital
Segundo a análise on-chain, os atacantes roubaram cerca de 300 mil dólares em ativos, incluindo 17,814.8626 USDC, 1.4085 WBTC e 119.871 WETH.
O capital inicial do atacante provém de 0,3 ETH transferidos de um serviço de mistura de moedas.
Resumo e Sugestões
O núcleo deste ataque reside na utilização da característica do armazenamento transitório que mantém valores durante todo o período da transação, contornando a verificação de permissões da função de callback. Recomenda-se que a equipe do projeto utilize imediatamente o tstore(key, 0) para limpar os valores no armazenamento transitório após o término da chamada de função, de acordo com a lógica de negócios. Além disso, deve-se reforçar a auditoria de código do contrato e os testes de segurança para evitar que situações semelhantes ocorram.