Хакер смог использовать временное хранилище в виртуальной машине

Безобидная ошибка, которая стоила $360 тыс. Кейс SIR.Trading

02.04.2025

401

5 мин

30 марта была проведена успешная атака на децентрализованную биржу криптовалютных деривативов SIR.trading. Атакующему удалось вывести активы на $300 тыс. Злоумышленник использовал нестандартный способ компрометации проекта. Представители биржи сообщили, что у них похитили все средства, поэтому дальнейшая работа площадки остается под вопросом.

Источник: Аккаунт SIR.trading (@leveragesir) в X

Что нужно знать

В январе 2024 года была выпущена 0.8.24 версия Solidity. Это язык программирования, который используется для разработки смарт-контрактов в виртуальной машине (EVM) Ethereum. В обновлении было добавлено временное хранилище данных, которое действительно только при выполнении транзакций.

В новом хранилище, которое получило название transient storage, данные хранятся только во время выполнения транзакции. Информация в хранилище автоматически очищается после выполнения транзакции. Доступ к временному хранилищу осуществляется с помощью двух EVM-команд:

  • TSTORE(ключ, значение): сохраняет 256-битное значение по указанному ключу во временном хранилище
  • TLOAD(ключ): извлекает 256-битное значение из временного хранилища, используя указанный ключ

Помимо очевидного удобства, временное хранилище стало популярным инструментом у разработчиков за счет низкой стоимости газа. Для выполнения команд TSTORE и TLOAD требуется всего 100 единиц газа, в то время как для использования обычного хранилища (SSTORE) - до 20 000 единиц газа.

Именно механизм временного хранилища стал целью злоумышленника. Он использовал эксплоит, с помощью которого временное хранилище не очистилось автоматически после транзакции. Полученными данными хакер воспользовался в дальнейшем для обхода проверок разрешений и передачи токенов.

Что произошло при взломе MIM. Детально разбираем атаку

Что произошло при взломе MIM. Детально разбираем атаку

Раскрываем схему, с помощью которой хакер манипулировал обеспечением для займа криптовалюты

Читать дальше

Как осуществлялся взлом

Взломщик провел сложную атаку с использованием Uniswap V3. Он создал два новых токена. Один использовался как основной, второй - как долговой. При создании долгового токена хакер смог проникнуть во временное хранилище и использовать его для изменения количества выпускаемых монет. В дальнейшем он использовал это, чтобы выпустить большое количество основных токенов с использованием кредитного плеча на SIR.trading.

Адрес хакера: 0x27defcfa6498f957918f407ed8a58eba2884768c

Код скомпрометированного смарт-контракта: 0xb91ae2c8365fd45030aba84a4666c4db074e53e7

Атакующая транзакция: 0xa05f047ddfdad9126624c4496b5d4a59f961ee7c091e7b4e38cee86f1335736f

Следуем за деньгами

После успешной атаки на адрес хакера 0x27d были выведены 17,8 тыс. USDC 1,4 WBTC и 119,8 WETH. Общая сумма похищенных активов составила около $360 тыс. Следующим шагом хакер обменял WBTC и USDC на 63,5 WETH и 9,7 WETH соответственно. Далее 193,1 WETH были отправлены для отмывания на децентрализованный протокол Railgun.

Предупреждение для разработчиков

Чтобы исключить возможность использования временного хранилища EVM Ethereum злоумышленниками, разработчикам рекомендуется принудительно очищать значение хранилища при помощи команды TSTORE(key, 0).

Подписывайтесь на Getblock Magazine и будьте всегда в курсе последних новостей из мира криптовалют и цифровой экономики