Un defecto de almacenamiento transitorio causa un ataque de 300,000 dólares al proyecto Ethereum
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 de este evento y ahora comparte los resultados a continuación:
Conocimientos de fondo
La versión 0.8.24 de Solidity introdujo la característica de almacenamiento transitorio (transient storage), que es una nueva ubicación de almacenamiento de datos. Su característica central es que los datos son válidos solo durante la ejecución de la transacción actual y se eliminan automáticamente al finalizar la transacción. Se accede y modifica a través de dos nuevas instrucciones EVM, TSTORE y TLOAD.
El almacenamiento transitorio tiene las siguientes características:
Bajo costo de gas: el costo de gas de TSTORE y TLOAD está fijo en 100
Persistencia dentro de la transacción: los datos se mantienen válidos durante toda la transacción
Eliminación automática: se restablece a cero automáticamente al finalizar la transacción
Causa de la vulnerabilidad
La causa fundamental de este evento es que los valores utilizados en el almacenamiento transitorio con tstore en la función no se eliminaron después de que terminó la llamada a la función. Esto permitió 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, y en un DEX crea un pool para estos dos tokens inyectando 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 comercio 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, la dirección del grupo DEX y la cantidad acuñada se almacenan temporalmente en orden.
El atacante crea un contrato malicioso cuya dirección es la misma que el valor del segundo almacenamiento transitorio.
El atacante llama directamente a la función de callback del contrato Vault a través de este contrato malicioso para retirar tokens. Debido a que los valores en el almacenamiento temporal no se han borrado, se pasa incorrectamente la verificación de identidad.
Por último, el atacante llama a la función de callback del contrato Vault a través del contrato de ataque (token A) y transfiere otros tokens (WBTC, WETH) del contrato Vault para obtener ganancias.
Análisis de flujo de fondos
Según el análisis en cadena, el atacante robó aproximadamente 300,000 dólares en activos, incluyendo 17,814.8626 USDC, 1.4085 WBTC y 119.871 WETH.
WBTC se ha intercambiado por 63.5596 WETH
USDC fue canjeado por 9.7122 WETH
Un total de 193.1428 WETH se ha transferido a un servicio de mezcla de monedas.
El capital inicial del atacante proviene de 0.3 ETH transferidos desde un servicio de mezcla de monedas.
Resumen y recomendaciones
El núcleo de este ataque radica en aprovechar la característica del almacenamiento transitorio que mantiene valores durante toda la duración de la transacción, eludiendo la verificación de permisos de la función de devolución de llamada. Se recomienda que el equipo del proyecto utilice inmediatamente tstore(key, 0) para limpiar los valores en el almacenamiento transitorio, de acuerdo con la lógica del negocio, después de que se complete la llamada a la función. Además, se debe fortalecer la auditoría del código del contrato y las pruebas de seguridad para evitar que situaciones similares ocurran.
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 me gusta
Recompensa
15
3
Compartir
Comentar
0/400
CommunitySlacker
· hace15h
Otro proyecto que se ha convertido en un cajero automático.
Ver originalesResponder0
BlockchainDecoder
· hace15h
Desde un punto de vista técnico, este es un uso inadecuado del almacenamiento transitorio.
Ver originalesResponder0
StealthMoon
· hace15h
¿Otra vulnerabilidad de almacenamiento temporal? Pongan atención.
El proyecto Ethereum sufrió un ataque de 300,000 dólares, siendo la deficiencia del almacenamiento transitorio la causa principal.
Un defecto de almacenamiento transitorio causa un ataque de 300,000 dólares al proyecto Ethereum
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 de este evento y ahora comparte los resultados a continuación:
Conocimientos de fondo
La versión 0.8.24 de Solidity introdujo la característica de almacenamiento transitorio (transient storage), que es una nueva ubicación de almacenamiento de datos. Su característica central es que los datos son válidos solo durante la ejecución de la transacción actual y se eliminan automáticamente al finalizar la transacción. Se accede y modifica a través de dos nuevas instrucciones EVM, TSTORE y TLOAD.
El almacenamiento transitorio tiene las siguientes características:
Causa de la vulnerabilidad
La causa fundamental de este evento es que los valores utilizados en el almacenamiento transitorio con tstore en la función no se eliminaron después de que terminó la llamada a la función. Esto permitió 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, y en un DEX crea un pool para estos dos tokens inyectando 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 comercio 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, la dirección del grupo DEX y la cantidad acuñada se almacenan temporalmente en orden.
El atacante crea un contrato malicioso cuya dirección es la misma que el valor del segundo almacenamiento transitorio.
El atacante llama directamente a la función de callback del contrato Vault a través de este contrato malicioso para retirar tokens. Debido a que los valores en el almacenamiento temporal no se han borrado, se pasa incorrectamente la verificación de identidad.
Por último, el atacante llama a la función de callback del contrato Vault a través del contrato de ataque (token A) y transfiere otros tokens (WBTC, WETH) del contrato Vault para obtener ganancias.
Análisis de flujo de fondos
Según el análisis en cadena, el atacante robó aproximadamente 300,000 dólares en activos, incluyendo 17,814.8626 USDC, 1.4085 WBTC y 119.871 WETH.
El capital inicial del atacante proviene de 0.3 ETH transferidos desde un servicio de mezcla de monedas.
Resumen y recomendaciones
El núcleo de este ataque radica en aprovechar la característica del almacenamiento transitorio que mantiene valores durante toda la duración de la transacción, eludiendo la verificación de permisos de la función de devolución de llamada. Se recomienda que el equipo del proyecto utilice inmediatamente tstore(key, 0) para limpiar los valores en el almacenamiento transitorio, de acuerdo con la lógica del negocio, después de que se complete la llamada a la función. Además, se debe fortalecer la auditoría del código del contrato y las pruebas de seguridad para evitar que situaciones similares ocurran.