Смертельний залишок: напад на 300 тисяч доларів у блокчейні, що виник через транзитне зберігання
30 березня 2025 року певна система безпеки виявила, що проект з леверидж-трейдингу на Ethereum у блокчейні зазнав атаки, внаслідок чого було втрачено активів на понад 300 тисяч доларів. Команда безпеки провела глибокий аналіз цього інциденту, і тепер ділиться результатами:
Фон
Версія Solidity 0.8.24 (випущена в січні 2024 року) вводить особливість тимчасового зберігання на основі EIP-1153. Це нове місце для зберігання даних, яке призначене для забезпечення розробників низькими витратами та ефективним тимчасовим зберіганням під час транзакцій.
Основні характеристики моментального зберігання включають:
Низька вартість gas: газова вартість операцій TSTORE та TLOAD становить 100.
Постійність даних у транзакції: дані залишаються дійсними протягом усієї транзакції.
Автоматичне очищення: після завершення交易, тимчасове сховище автоматично скидається на нуль.
Джерело атаки
Основною причиною цього інциденту є те, що значення, що зберігаються в tstore для тимчасового зберігання у функції, не очищуються після закінчення виклику функції. Це дозволяє зловмисникам використовувати цю особливість для створення певних шкідливих адрес, обходячи перевірку прав для виведення токенів.
Процес атаки
Зловмисник створює два шкідливі токени A та B, на певному DEX створює пули для цих токенів та вводить ліквідність, при цьому токен A є атакуючим контрактом.
Атакуючий викликає функцію initialize контракту Vault, використовуючи токен A як забезпечення, а токен B як борговий токен для створення ринкових механізмів з важелем APE-21.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску токена важеля APE. У цьому процесі відбувається дві операції з тимчасовим зберіганням: спочатку зберігається адреса певного пулу DEX, а потім зберігається кількість випущених токенів.
Зловмисник створює шкідливий контракт спеціальним способом, адреса якого відповідає значенню другого миттєвого сховища.
Зловмисник безпосередньо викликає функцію зворотного виклику контракту Vault через цей шкідливий контракт для виведення токенів. Оскільки значення в тимчасовому сховищі не були очищені, це призводить до помилкового проходження перевірки особи виклику.
Нарешті, зловмисник через атаку на контракт (токен A) викликає функцію зворотного виклику контракту Vault, щоб вивести інші токени з контракту Vault (такі як WBTC, WETH) для отримання прибутку.
Аналіз руху коштів
Згідно з аналізом інструментів у блокчейні, зловмисники викрали активи на суму приблизно 300 тисяч доларів, включаючи 17,814.8626 USDC, 1.4085 WBTC та 119.871 WETH. Ці активи були об'єднані та конвертовані в WETH, в кінцевому підсумку переведені до певного протоколу приватної торгівлі.
Початкові кошти нападника надходять з 0.3 ETH, що були переведені в цю приватну торгову угоду.
Підсумок та рекомендації
Основна суть цієї атаки полягає в тому, що зловмисник використав властивість транзитного зберігання, що дозволяє зберігати значення незмінними протягом усього періоду транзакції, тим самим обійшовши перевірку прав доступу до функцій зворотного виклику для отримання прибутку. Щоб запобігти подібним ситуаціям, рекомендується командам проекту:
Відповідно до бізнес-логіки, після завершення виклику функції негайно використовуйте tstore(key, 0) для очищення значень у тимчасовому сховищі.
Посилити аудит коду контракту та безпекове тестування.
Обережно використовуйте нововведені функції, повністю усвідомлюючи їх потенційні ризики.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
30 тисяч доларів у блокчейні: уразливість тимчасового зберігання спричинила проблеми для проектів Маржинальної торгівлі
Смертельний залишок: напад на 300 тисяч доларів у блокчейні, що виник через транзитне зберігання
30 березня 2025 року певна система безпеки виявила, що проект з леверидж-трейдингу на Ethereum у блокчейні зазнав атаки, внаслідок чого було втрачено активів на понад 300 тисяч доларів. Команда безпеки провела глибокий аналіз цього інциденту, і тепер ділиться результатами:
Фон
Версія Solidity 0.8.24 (випущена в січні 2024 року) вводить особливість тимчасового зберігання на основі EIP-1153. Це нове місце для зберігання даних, яке призначене для забезпечення розробників низькими витратами та ефективним тимчасовим зберіганням під час транзакцій.
Основні характеристики моментального зберігання включають:
Джерело атаки
Основною причиною цього інциденту є те, що значення, що зберігаються в tstore для тимчасового зберігання у функції, не очищуються після закінчення виклику функції. Це дозволяє зловмисникам використовувати цю особливість для створення певних шкідливих адрес, обходячи перевірку прав для виведення токенів.
Процес атаки
Зловмисник створює два шкідливі токени A та B, на певному DEX створює пули для цих токенів та вводить ліквідність, при цьому токен A є атакуючим контрактом.
Атакуючий викликає функцію initialize контракту Vault, використовуючи токен A як забезпечення, а токен B як борговий токен для створення ринкових механізмів з важелем APE-21.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску токена важеля APE. У цьому процесі відбувається дві операції з тимчасовим зберіганням: спочатку зберігається адреса певного пулу DEX, а потім зберігається кількість випущених токенів.
Зловмисник створює шкідливий контракт спеціальним способом, адреса якого відповідає значенню другого миттєвого сховища.
Зловмисник безпосередньо викликає функцію зворотного виклику контракту Vault через цей шкідливий контракт для виведення токенів. Оскільки значення в тимчасовому сховищі не були очищені, це призводить до помилкового проходження перевірки особи виклику.
Нарешті, зловмисник через атаку на контракт (токен A) викликає функцію зворотного виклику контракту Vault, щоб вивести інші токени з контракту Vault (такі як WBTC, WETH) для отримання прибутку.
Аналіз руху коштів
Згідно з аналізом інструментів у блокчейні, зловмисники викрали активи на суму приблизно 300 тисяч доларів, включаючи 17,814.8626 USDC, 1.4085 WBTC та 119.871 WETH. Ці активи були об'єднані та конвертовані в WETH, в кінцевому підсумку переведені до певного протоколу приватної торгівлі.
Початкові кошти нападника надходять з 0.3 ETH, що були переведені в цю приватну торгову угоду.
Підсумок та рекомендації
Основна суть цієї атаки полягає в тому, що зловмисник використав властивість транзитного зберігання, що дозволяє зберігати значення незмінними протягом усього періоду транзакції, тим самим обійшовши перевірку прав доступу до функцій зворотного виклику для отримання прибутку. Щоб запобігти подібним ситуаціям, рекомендується командам проекту: