Проект Ethereum зазнав нападу на 300 тисяч доларів: дефект миттєвого зберігання став основною причиною

robot
Генерація анотацій у процесі

Вразливість миттєвого зберігання призвела до атаки на проект Ethereum на суму 300 000 доларів

30 березня 2025 року система безпеки зафіксувала атаку на проект з маржинальної торгівлі на ланцюгу Ethereum, внаслідок якої було втрачено понад 300 тисяч доларів активів. Команда безпеки провела аналіз цього інциденту і тепер ділиться результатами:

Фонові знання

Версія Solidity 0.8.24 вводить функцію миттєвого зберігання (transient storage), що є новим місцем для зберігання даних. Головна особливість полягає в тому, що дані дійсні лише під час виконання поточної транзакції, і після закінчення транзакції вони автоматично очищуються. Доступ та зміна реалізуються за допомогою двох нових інструкцій EVM: TSTORE та TLOAD.

Тимчасове зберігання має такі характеристики:

  • Низька вартість газу: витрати газу для TSTORE та TLOAD становлять 100
  • Тривалість угоди: дані залишаються дійсними протягом усієї угоди
  • Автоматичне скидання: автоматичне скидання до нуля після завершення торгів.

Смертельний залишок: напад на ланцюг за 300 000 доларів, спричинений тимчасовим зберіганням

Причини вразливості

Основною причиною цього інциденту є те, що значення, що використовуються в tstore для транзитного зберігання в функції, не були очищені після закінчення виклику функції. Це дозволило зловмисникам скористатися цією особливістю для створення специфічних шкідливих адрес, щоб обійти перевірку прав і вивести токени.

Смертельні залишки: пограбування на ланцюзі на 300 тисяч доларів, викликане транзитним зберіганням

Процес атаки

  1. Зловмисник створює два шкідливі токени A і B та створює пули для цих токенів на певному DEX, вносячи ліквідність, при цьому токен A є атакуючим контрактом.

  2. Зловмисник викликає функцію ініціалізації контракту Vault, використовуючи токен A як токен застави та токен B як токен боргу для створення ринкової левериджної торгівлі APE-21.

  3. Зловмисник викликає функцію mint контракту Vault, вносячи борговий токен B для випуску важільного токена APE. У цьому процесі адреса DEX-пулу та кількість випуску тимчасово зберігаються одна за одною.

  4. Зловмисник створює шкідливий контракт, адреса якого збігається з значенням другого транзитивного зберігання.

  5. Зловмисник безпосередньо викликає функцію зворотного виклику контракту Vault через цей шкідливий контракт, щоб вивести токени. Оскільки значення у тимчасовому сховищі не були очищені, це призвело до неправильного проходження перевірки особи.

  6. Нарешті, зловмисник через атаку на контракт (токен A) викликає функцію зворотного виклику контракту Vault, щоб вивести інші токени (WBTC, WETH) з контракту Vault для отримання прибутку.

Смертельний залишок: пограбування на блокчейні на 300 тисяч доларів, спричинене транзитним зберіганням

Смертельний залишок: пограбування на ланцюзі на 300 тисяч доларів, викликане транзитним зберіганням

Смертельний залишок: Злочин на ланцюгу на 300 тисяч доларів, спричинений транзитним зберіганням

Смертельний залишок: пограбування на 300 тисяч доларів, викликане тимчасовим зберіганням

Смертельний залишок: пограбування на блокчейні на суму 300 тисяч доларів, викликане транзитним зберіганням

Смертельний залишок: викрадення в 300 тисяч доларів на блокчейні, викликане тимчасовим зберіганням

Смертельний залишок: злочин на ланцюзі на 300 тисяч доларів, викликаний транзитним зберіганням

Смертельні залишки: пограбування на ланцюгу на 300 000 доларів, спричинене миттєвим зберіганням

Смертельні залишки: пограбування на ланцюгу на 300 тисяч доларів, спричинене тимчасовим зберіганням

Смертельний залишок: пограбування на ланцюзі на 300 000 доларів, спричинене транзитним зберіганням

Смертельні залишки: злочин на блокчейні на 300 тис. доларів, спричинений транзитним зберіганням

Аналіз руху коштів

Згідно з аналізом блокчейну, зловмисники вкрали активи на суму близько 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, переведених з певного сервісу змішування.

Смертельний залишок: пограбування на ланцюгу на 300 тисяч доларів, викликане транзитним зберіганням

Смертоносний залишок: пограбування на ланцюзі на 300 тисяч доларів, спричинене трансзієнтним зберіганням

Смертельний залишок: злочин на ланцюзі на 300 тисяч доларів, викликаний транзитним зберіганням

Смертельні залишки: крадіжка на блокчейні на 300 тисяч доларів, спричинена тимчасовим зберіганням

Підсумки та рекомендації

Основна суть цієї атаки полягає в використанні особливості тимчасового зберігання, що зберігає значення протягом усього періоду транзакції, щоб обійти перевірку прав доступу для функції зворотного виклику. Рекомендується команді проекту після завершення виклику функції відразу ж використовувати 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.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
CommunitySlackervip
· 15год тому
Ще один проект, що став банкоматом
Переглянути оригіналвідповісти на0
BlockchainDecodervip
· 15год тому
З технічної точки зору, це типовий випадок неналежного використання тимчасового зберігання.
Переглянути оригіналвідповісти на0
StealthMoonvip
· 15год тому
Знову вразливість тимчасового зберігання? Будь обережнішим.
Переглянути оригіналвідповісти на0
  • Закріпити