Уязвимость временного хранения привела к атаке на проект Ethereum на 300 000 долларов
30 марта 2025 года система безопасности обнаружила атаку на проект с кредитным плечом в цепочке Ethereum, в результате которой было потеряно более 300 тысяч долларов активов. Команда безопасности провела анализ этого инцидента и теперь делится результатами:
Фоновая информация
Версия Solidity 0.8.24 ввела функцию временного хранения (transient storage), которая представляет собой новое место для хранения данных. Основная характеристика заключается в том, что данные действительны только на протяжении выполнения текущей транзакции и автоматически удаляются после завершения транзакции. Доступ и изменение осуществляются с помощью двух новых инструкций EVM: TSTORE и TLOAD.
Временное хранилище имеет следующие характеристики:
Низкая стоимость газа: газовые расходы TSTORE и TLOAD фиксированы на уровне 100
Постоянство данных в сделке: данные остаются действительными на протяжении всей сделки
Автоочистка: автоматически сбрасывается на ноль после завершения сделки
Причина уязвимости
Основная причина этого инцидента заключается в том, что значения, используемые в функции для временного хранения с помощью tstore, не очищаются после завершения вызова функции. Это позволяет злоумышленникам использовать эту особенность для создания определенных вредоносных адресов, обходя проверку прав и выводя токены.
Процесс атаки
Злоумышленник создает два вредоносных токена A и B и создает пулы ликвидности для этих токенов на некотором DEX, где токен A является атакующим контрактом.
Атакующий вызывает функцию initialize контракта Vault, чтобы создать рынок кредитного плеча APE-21 с токеном A в качестве залогового токена и токеном B в качестве долгового токена.
Атакующий вызывает функцию mint контракта Vault, вносит долговой токен B для выпуска лендингового токена APE. В этом процессе адрес DEX-пула и количество выпускаемого токена временно сохраняются.
Злоумышленник создает вредоносный контракт, адрес которого совпадает со значением второго временного хранилища.
Атакующий напрямую вызывает обратную функцию контракта Vault через этот вредоносный контракт для вывода токенов. Поскольку значение в временном хранилище не было очищено, идентификационная проверка была ошибочно пройдена.
В конце концов, атакующий вызывает функцию обратного вызова контракта Vault через атаку на контракт (токен A), чтобы вывести другие токены (WBTC, WETH) из контракта Vault и получить прибыль.
Анализ денежного потока
Согласно анализу на блокчейне, злоумышленники украли активы на сумму около 300,000 долларов США, включая 17,814.8626 USDC, 1.4085 WBTC и 119.871 WETH.
WBTC обменен на 63.5596 WETH
USDC был обменян на 9.7122 WETH
В общей сложности 193.1428 WETH были переведены в определённый сервис смешивания
Исходный капитал атакующего поступил от определенной службы смешивания монет в размере 0,3 ETH.
Резюме и рекомендации
Основная цель этой атаки заключается в использовании характеристики временного хранения, позволяющего сохранять значения на протяжении всей транзакции, что обходит проверку прав доступа к функциям обратного вызова. Рекомендуется команде проекта немедленно использовать tstore(key, 0) для очистки значений во временном хранилище после завершения вызова функции в соответствии с бизнес-логикой. Кроме того, необходимо усилить аудит кода контрактов и тестирование безопасности, чтобы избежать подобных ситуаций.
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 Лайков
Награда
15
3
Поделиться
комментарий
0/400
CommunitySlacker
· 15ч назад
Еще один проект, ставший банкоматом.
Посмотреть ОригиналОтветить0
BlockchainDecoder
· 15ч назад
С технической точки зрения это典型ный неправильное использование временного хранения.
Посмотреть ОригиналОтветить0
StealthMoon
· 15ч назад
Снова уязвимость временного хранения? Будьте внимательнее.
Проект Ethereum подвергся атаке на сумму 300 000 долларов США, причиной которой стал дефект временного хранилища.
Уязвимость временного хранения привела к атаке на проект Ethereum на 300 000 долларов
30 марта 2025 года система безопасности обнаружила атаку на проект с кредитным плечом в цепочке Ethereum, в результате которой было потеряно более 300 тысяч долларов активов. Команда безопасности провела анализ этого инцидента и теперь делится результатами:
Фоновая информация
Версия Solidity 0.8.24 ввела функцию временного хранения (transient storage), которая представляет собой новое место для хранения данных. Основная характеристика заключается в том, что данные действительны только на протяжении выполнения текущей транзакции и автоматически удаляются после завершения транзакции. Доступ и изменение осуществляются с помощью двух новых инструкций EVM: TSTORE и TLOAD.
Временное хранилище имеет следующие характеристики:
Причина уязвимости
Основная причина этого инцидента заключается в том, что значения, используемые в функции для временного хранения с помощью tstore, не очищаются после завершения вызова функции. Это позволяет злоумышленникам использовать эту особенность для создания определенных вредоносных адресов, обходя проверку прав и выводя токены.
Процесс атаки
Злоумышленник создает два вредоносных токена A и B и создает пулы ликвидности для этих токенов на некотором DEX, где токен A является атакующим контрактом.
Атакующий вызывает функцию initialize контракта Vault, чтобы создать рынок кредитного плеча APE-21 с токеном A в качестве залогового токена и токеном B в качестве долгового токена.
Атакующий вызывает функцию mint контракта Vault, вносит долговой токен B для выпуска лендингового токена APE. В этом процессе адрес DEX-пула и количество выпускаемого токена временно сохраняются.
Злоумышленник создает вредоносный контракт, адрес которого совпадает со значением второго временного хранилища.
Атакующий напрямую вызывает обратную функцию контракта Vault через этот вредоносный контракт для вывода токенов. Поскольку значение в временном хранилище не было очищено, идентификационная проверка была ошибочно пройдена.
В конце концов, атакующий вызывает функцию обратного вызова контракта Vault через атаку на контракт (токен A), чтобы вывести другие токены (WBTC, WETH) из контракта Vault и получить прибыль.
Анализ денежного потока
Согласно анализу на блокчейне, злоумышленники украли активы на сумму около 300,000 долларов США, включая 17,814.8626 USDC, 1.4085 WBTC и 119.871 WETH.
Исходный капитал атакующего поступил от определенной службы смешивания монет в размере 0,3 ETH.
Резюме и рекомендации
Основная цель этой атаки заключается в использовании характеристики временного хранения, позволяющего сохранять значения на протяжении всей транзакции, что обходит проверку прав доступа к функциям обратного вызова. Рекомендуется команде проекта немедленно использовать tstore(key, 0) для очистки значений во временном хранилище после завершения вызова функции в соответствии с бизнес-логикой. Кроме того, необходимо усилить аудит кода контрактов и тестирование безопасности, чтобы избежать подобных ситуаций.