Смертельні залишки: 300 тисяч доларів у блокчейні через транзитне зберігання
30 березня 2025 року на мережі Ethereum відбулася крадіжка на понад 300 тисяч доларів у блоці. За даними системи моніторингу безпеки, проект з маржинальної торгівлі SIR.trading зазнав нападу і зазнав значних втрат. Команда з безпеки провела глибокий аналіз цього інциденту, і тепер публікує результати розслідування.
Передумови події
Версія Solidity 0.8.24, яка вийде в січні 2024 року, вводить функцію миттєвого зберігання (transient storage). Це нове місце зберігання даних, призначене для забезпечення розробників дешевим, тимчасовим способом зберігання, дійсним під час транзакцій. Миттєве зберігання реалізується за допомогою двох нових інструкцій EVM TSTORE і TLOAD, має низьку вартість газу, постійність у межах транзакції та автоматичне очищення.
Причини атаки
Основна причина цього інциденту полягає в тому, що значення, що використовуються в tstore для тимчасового зберігання, не очищуються після завершення виклику функції. Зловмисник використав цю особливість, щоб створити специфічну шкідливу адресу, обійти перевірку прав і успішно вивести токени.
Процес атаки
Зловмисник створює два шкідливі токени A та B і на певному DEX створює пули для цих двох токенів, вносячи ліквідність, де токен A є атакуючим контрактом.
Зловмисник викликає функцію initialize контракту Vault, щоб створити ринкову угоду з важелем APE-21 з токеном A як заставою та токеном B як борговим токеном.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску важільного токена APE. У цьому процесі адреса DEX пулу та кількість випуску спочатку зберігаються у тимчасовій пам'яті.
Зловмисник створює шкідливий контракт, адреса якого збігається з попередньо збереженою кількістю випуску.
Атакуючий безпосередньо викликає функцію uniswapV3SwapCallback контракту Vault через цей шкідливий контракт для виведення токенів. Оскільки значення у тимчасовому сховищі не були очищені, це призвело до помилкового проходження перевірки особи.
Нарешті, зловмисник, атакуючи контракт (токен A), викликає функцію uniswapV3SwapCallback контракту Vault, щоб вивести інші токени (WBTC, WETH) з контракту Vault для отримання прибутку.
Аналіз руху коштів
Згідно з даними інструментів аналізу у блокчейні, зловмисники вкрали приблизно 300 тисяч доларів США активів, зокрема 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) для очищення значень у миттєвому сховищі.
Посилити аудит коду контракту та тестування безпеки, особливо звертаючи увагу на ризики використання нових функцій.
Реалізація багаторівневої системи перевірки, яка не покладається лише на одне перевірку особи.
Регулярно проводити оцінку безпеки, вчасно виявляти та усувати потенційні вразливості.
Ця подія ще раз нагадує нам про необхідність обережного підходу при впровадженні нових технологій, а також про важливість всебічної оцінки їхнього впливу на безпеку. Водночас постійний аудит безпеки та управління ризиками є критично важливими для захисту активів користувачів.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
6
Поділіться
Прокоментувати
0/400
GhostChainLoyalist
· 07-23 20:02
Пропустити можливість знову - це ще один проект, обдурюючи людей, як лохів.
Переглянути оригіналвідповісти на0
HypotheticalLiquidator
· 07-23 17:12
300 тисяч? Це те, що відбувається очищення ринку...
Переглянути оригіналвідповісти на0
P2ENotWorking
· 07-20 21:17
вечірка проєкту знову спить
Переглянути оригіналвідповісти на0
BlockchainRetirementHome
· 07-20 21:16
Знову бачимо смартконтракти Обман для дурнів
Переглянути оригіналвідповісти на0
DYORMaster
· 07-20 20:49
На вигляд гарно, але не працює, код навіть не перевіряють.
Вразливість тимчасового зберігання призвела до 300 тисяч доларів у блокчейні крадіжки в проектах маржинальної торгівлі.
Смертельні залишки: 300 тисяч доларів у блокчейні через транзитне зберігання
30 березня 2025 року на мережі Ethereum відбулася крадіжка на понад 300 тисяч доларів у блоці. За даними системи моніторингу безпеки, проект з маржинальної торгівлі SIR.trading зазнав нападу і зазнав значних втрат. Команда з безпеки провела глибокий аналіз цього інциденту, і тепер публікує результати розслідування.
Передумови події
Версія Solidity 0.8.24, яка вийде в січні 2024 року, вводить функцію миттєвого зберігання (transient storage). Це нове місце зберігання даних, призначене для забезпечення розробників дешевим, тимчасовим способом зберігання, дійсним під час транзакцій. Миттєве зберігання реалізується за допомогою двох нових інструкцій EVM TSTORE і TLOAD, має низьку вартість газу, постійність у межах транзакції та автоматичне очищення.
Причини атаки
Основна причина цього інциденту полягає в тому, що значення, що використовуються в tstore для тимчасового зберігання, не очищуються після завершення виклику функції. Зловмисник використав цю особливість, щоб створити специфічну шкідливу адресу, обійти перевірку прав і успішно вивести токени.
Процес атаки
Зловмисник створює два шкідливі токени A та B і на певному DEX створює пули для цих двох токенів, вносячи ліквідність, де токен A є атакуючим контрактом.
Зловмисник викликає функцію initialize контракту Vault, щоб створити ринкову угоду з важелем APE-21 з токеном A як заставою та токеном B як борговим токеном.
Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску важільного токена APE. У цьому процесі адреса DEX пулу та кількість випуску спочатку зберігаються у тимчасовій пам'яті.
Зловмисник створює шкідливий контракт, адреса якого збігається з попередньо збереженою кількістю випуску.
Атакуючий безпосередньо викликає функцію uniswapV3SwapCallback контракту Vault через цей шкідливий контракт для виведення токенів. Оскільки значення у тимчасовому сховищі не були очищені, це призвело до помилкового проходження перевірки особи.
Нарешті, зловмисник, атакуючи контракт (токен A), викликає функцію uniswapV3SwapCallback контракту Vault, щоб вивести інші токени (WBTC, WETH) з контракту Vault для отримання прибутку.
Аналіз руху коштів
Згідно з даними інструментів аналізу у блокчейні, зловмисники вкрали приблизно 300 тисяч доларів США активів, зокрема 17,814.8626 USDC, 1.4085 WBTC та 119.871 WETH. Після цього зловмисники обміняли та перевели ці активи:
Варто зазначити, що початкові кошти зловмисника надійшли з анонімної мережі у розмірі 0.3 ETH.
Підсумок та рекомендації
Ця атака використовувала властивість транзитного зберігання, яке залишалося незмінним протягом усієї транзакції, успішно обійшовши перевірку прав доступу до функції зворотного виклику. Щоб запобігти подібним інцидентам, рекомендується проектним командам:
Ця подія ще раз нагадує нам про необхідність обережного підходу при впровадженні нових технологій, а також про важливість всебічної оцінки їхнього впливу на безпеку. Водночас постійний аудит безпеки та управління ризиками є критично важливими для захисту активів користувачів.