Вразливість миттєвого зберігання призвела до атаки на проект Ethereum на суму 300 000 доларів
30 березня 2025 року система безпеки зафіксувала атаку на проект з маржинальної торгівлі на ланцюгу Ethereum, внаслідок якої було втрачено понад 300 тисяч доларів активів. Команда безпеки провела аналіз цього інциденту і тепер ділиться результатами:
Фонові знання
Версія Solidity 0.8.24 вводить функцію миттєвого зберігання (transient storage), що є новим місцем для зберігання даних. Головна особливість полягає в тому, що дані дійсні лише під час виконання поточної транзакції, і після закінчення транзакції вони автоматично очищуються. Доступ та зміна реалізуються за допомогою двох нових інструкцій EVM: TSTORE та TLOAD.
Тимчасове зберігання має такі характеристики:
Низька вартість газу: витрати газу для TSTORE та TLOAD становлять 100
Тривалість угоди: дані залишаються дійсними протягом усієї угоди
Автоматичне скидання: автоматичне скидання до нуля після завершення торгів.
Причини вразливості
Основною причиною цього інциденту є те, що значення, що використовуються в tstore для транзитного зберігання в функції, не були очищені після закінчення виклику функції. Це дозволило зловмисникам скористатися цією особливістю для створення специфічних шкідливих адрес, щоб обійти перевірку прав і вивести токени.
Процес атаки
Зловмисник створює два шкідливі токени A і B та створює пули для цих токенів на певному DEX, вносячи ліквідність, при цьому токен A є атакуючим контрактом.
Зловмисник викликає функцію ініціалізації контракту Vault, використовуючи токен A як токен застави та токен B як токен боргу для створення ринкової левериджної торгівлі APE-21.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску важільного токена APE. У цьому процесі адреса DEX-пулу та кількість випуску тимчасово зберігаються одна за одною.
Зловмисник створює шкідливий контракт, адреса якого збігається з значенням другого транзитивного зберігання.
Зловмисник безпосередньо викликає функцію зворотного виклику контракту Vault через цей шкідливий контракт, щоб вивести токени. Оскільки значення у тимчасовому сховищі не були очищені, це призвело до неправильного проходження перевірки особи.
Нарешті, зловмисник через атаку на контракт (токен A) викликає функцію зворотного виклику контракту Vault, щоб вивести інші токени (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 тисяч доларів: дефект миттєвого зберігання став основною причиною
Вразливість миттєвого зберігання призвела до атаки на проект Ethereum на суму 300 000 доларів
30 березня 2025 року система безпеки зафіксувала атаку на проект з маржинальної торгівлі на ланцюгу Ethereum, внаслідок якої було втрачено понад 300 тисяч доларів активів. Команда безпеки провела аналіз цього інциденту і тепер ділиться результатами:
Фонові знання
Версія Solidity 0.8.24 вводить функцію миттєвого зберігання (transient storage), що є новим місцем для зберігання даних. Головна особливість полягає в тому, що дані дійсні лише під час виконання поточної транзакції, і після закінчення транзакції вони автоматично очищуються. Доступ та зміна реалізуються за допомогою двох нових інструкцій EVM: TSTORE та TLOAD.
Тимчасове зберігання має такі характеристики:
Причини вразливості
Основною причиною цього інциденту є те, що значення, що використовуються в tstore для транзитного зберігання в функції, не були очищені після закінчення виклику функції. Це дозволило зловмисникам скористатися цією особливістю для створення специфічних шкідливих адрес, щоб обійти перевірку прав і вивести токени.
Процес атаки
Зловмисник створює два шкідливі токени A і B та створює пули для цих токенів на певному DEX, вносячи ліквідність, при цьому токен A є атакуючим контрактом.
Зловмисник викликає функцію ініціалізації контракту Vault, використовуючи токен A як токен застави та токен B як токен боргу для створення ринкової левериджної торгівлі APE-21.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску важільного токена APE. У цьому процесі адреса DEX-пулу та кількість випуску тимчасово зберігаються одна за одною.
Зловмисник створює шкідливий контракт, адреса якого збігається з значенням другого транзитивного зберігання.
Зловмисник безпосередньо викликає функцію зворотного виклику контракту Vault через цей шкідливий контракт, щоб вивести токени. Оскільки значення у тимчасовому сховищі не були очищені, це призвело до неправильного проходження перевірки особи.
Нарешті, зловмисник через атаку на контракт (токен A) викликає функцію зворотного виклику контракту Vault, щоб вивести інші токени (WBTC, WETH) з контракту Vault для отримання прибутку.
Аналіз руху коштів
Згідно з аналізом блокчейну, зловмисники вкрали активи на суму близько 300 000 доларів США, включаючи 17 814,8626 USDC, 1,4085 WBTC та 119,871 WETH.
Початковий капітал нападника походить з 0.3 ETH, переведених з певного сервісу змішування.
Підсумки та рекомендації
Основна суть цієї атаки полягає в використанні особливості тимчасового зберігання, що зберігає значення протягом усього періоду транзакції, щоб обійти перевірку прав доступу для функції зворотного виклику. Рекомендується команді проекту після завершення виклику функції відразу ж використовувати tstore(key, 0) для очищення значень у тимчасовому зберіганні. Крім того, слід посилити аудит коду контракту та безпекове тестування, щоб уникнути подібних ситуацій.