Residuos mortales: un ataque en cadena de 300,000 dólares originado en el almacenamiento transitorio
El 30 de marzo de 2025, un sistema de monitoreo de seguridad detectó un ataque a un proyecto de trading apalancado en la cadena de Ethereum, con pérdidas de más de 300,000 dólares en activos. El equipo de seguridad realizó un análisis exhaustivo de este incidente y ahora comparte los resultados a continuación:
Fondo
La versión 0.8.24 de Solidity (que se lanzará en enero de 2024) introduce características de almacenamiento transitorio basadas en EIP-1153. Este es un nuevo tipo de ubicación de almacenamiento de datos diseñado para proporcionar a los desarrolladores una forma de almacenamiento temporal que sea de bajo costo y efectiva durante las transacciones.
Las principales características del almacenamiento transitorio incluyen:
Bajo costo de gas: el costo de gas de las operaciones TSTORE y TLOAD está fijo en 100.
Persistencia en la transacción: los datos se mantienen válidos durante toda la transacción.
Eliminación automática: Después de que se complete la transacción, el almacenamiento transitorio se restablece automáticamente a cero.
Origen del ataque
La causa fundamental de este evento es que los valores almacenados temporalmente en la función utilizando tstore no se borran al finalizar la llamada a la función. Esto permite a los atacantes aprovechar esta característica para construir direcciones maliciosas específicas y eludir la verificación de permisos para retirar tokens.
Proceso de ataque
El atacante crea dos tokens maliciosos A y B, crea un pool para estos dos tokens en un DEX e inyecta liquidez, donde el token A es el contrato de ataque.
El atacante llama a la función initialize del contrato Vault, utilizando el token A como colateral y el token B como deuda para crear el mercado de trading apalancado APE-21.
El atacante llama a la función mint del contrato Vault, depositando el token de deuda B para acuñar el token apalancado APE. En este proceso, se realizan dos operaciones de almacenamiento transitorio: primero se almacena la dirección de un pool DEX y luego se almacena la cantidad de tokens acuñados.
El atacante crea un contrato malicioso mediante métodos especiales, cuya dirección es la misma que el valor almacenado de forma transitoria por segunda vez.
El atacante llama directamente a la función de retorno del contrato Vault a través de este contrato malicioso para retirar tokens. Debido a que los valores en el almacenamiento transitorio no se han borrado, se permite erróneamente la verificación de la identidad del llamador.
Finalmente, el atacante llama a la función de callback del contrato Vault a través del ataque al contrato (token A), transfiriendo otros tokens (como WBTC, WETH) del contrato Vault para obtener ganancias.
Análisis de flujo de fondos
Según el análisis de herramientas de análisis on-chain, los atacantes robaron aproximadamente 300,000 dólares en activos, incluidos 17,814.8626 USDC, 1.4085 WBTC y 119.871 WETH. Estos activos fueron luego consolidado y convertido a WETH, finalmente transferido a un protocolo de intercambio privado.
Los fondos iniciales del atacante provienen de 0.3 ETH transferidos del protocolo de transacciones privadas.
Resumen y recomendaciones
El núcleo de este ataque radica en que el atacante aprovechó la característica de almacenamiento transitorio que mantiene el valor constante durante toda la transacción, eludiendo así la verificación de permisos de la función de devolución de llamada para obtener ganancias. Para prevenir situaciones similares, se recomienda a las partes del proyecto:
Según la lógica de negocio, después de que se complete la llamada a la función, use inmediatamente tstore(key, 0) para limpiar los valores en el almacenamiento transitorio.
Fortalecer la auditoría del código del contrato y las pruebas de seguridad.
Utilice con precaución las características nuevas introducidas y comprenda plenamente sus riesgos potenciales.
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
13 me gusta
Recompensa
13
6
Compartir
Comentar
0/400
LayerZeroHero
· 08-02 23:27
Un ataque siempre tendrá una puerta trasera
Ver originalesResponder0
Web3ProductManager
· 08-01 12:37
Ataque al punto de fricción clásico de UX
Ver originalesResponder0
OnchainDetective
· 08-01 04:23
Un error en el código puede llevar a perderlo todo.
Evento de ataque en cadena de 300,000 dólares: la vulnerabilidad de almacenamiento transitorio afecta a proyectos de comercio de márgen.
Residuos mortales: un ataque en cadena de 300,000 dólares originado en el almacenamiento transitorio
El 30 de marzo de 2025, un sistema de monitoreo de seguridad detectó un ataque a un proyecto de trading apalancado en la cadena de Ethereum, con pérdidas de más de 300,000 dólares en activos. El equipo de seguridad realizó un análisis exhaustivo de este incidente y ahora comparte los resultados a continuación:
Fondo
La versión 0.8.24 de Solidity (que se lanzará en enero de 2024) introduce características de almacenamiento transitorio basadas en EIP-1153. Este es un nuevo tipo de ubicación de almacenamiento de datos diseñado para proporcionar a los desarrolladores una forma de almacenamiento temporal que sea de bajo costo y efectiva durante las transacciones.
Las principales características del almacenamiento transitorio incluyen:
Origen del ataque
La causa fundamental de este evento es que los valores almacenados temporalmente en la función utilizando tstore no se borran al finalizar la llamada a la función. Esto permite a los atacantes aprovechar esta característica para construir direcciones maliciosas específicas y eludir la verificación de permisos para retirar tokens.
Proceso de ataque
El atacante crea dos tokens maliciosos A y B, crea un pool para estos dos tokens en un DEX e inyecta liquidez, donde el token A es el contrato de ataque.
El atacante llama a la función initialize del contrato Vault, utilizando el token A como colateral y el token B como deuda para crear el mercado de trading apalancado APE-21.
El atacante llama a la función mint del contrato Vault, depositando el token de deuda B para acuñar el token apalancado APE. En este proceso, se realizan dos operaciones de almacenamiento transitorio: primero se almacena la dirección de un pool DEX y luego se almacena la cantidad de tokens acuñados.
El atacante crea un contrato malicioso mediante métodos especiales, cuya dirección es la misma que el valor almacenado de forma transitoria por segunda vez.
El atacante llama directamente a la función de retorno del contrato Vault a través de este contrato malicioso para retirar tokens. Debido a que los valores en el almacenamiento transitorio no se han borrado, se permite erróneamente la verificación de la identidad del llamador.
Finalmente, el atacante llama a la función de callback del contrato Vault a través del ataque al contrato (token A), transfiriendo otros tokens (como WBTC, WETH) del contrato Vault para obtener ganancias.
Análisis de flujo de fondos
Según el análisis de herramientas de análisis on-chain, los atacantes robaron aproximadamente 300,000 dólares en activos, incluidos 17,814.8626 USDC, 1.4085 WBTC y 119.871 WETH. Estos activos fueron luego consolidado y convertido a WETH, finalmente transferido a un protocolo de intercambio privado.
Los fondos iniciales del atacante provienen de 0.3 ETH transferidos del protocolo de transacciones privadas.
Resumen y recomendaciones
El núcleo de este ataque radica en que el atacante aprovechó la característica de almacenamiento transitorio que mantiene el valor constante durante toda la transacción, eludiendo así la verificación de permisos de la función de devolución de llamada para obtener ganancias. Para prevenir situaciones similares, se recomienda a las partes del proyecto: