TechFlow Logo
Войти/ Регистрация
Газ ETH
Gwei
Страх
gas
Подразделение TonBit компании BitsLab вновь обнаружило уязвимость в виртуальной машине TON: инструкция RUNVM может привести к загрязнению среды выполнения смарт-контрактов

Подразделение TonBit компании BitsLab вновь обнаружило уязвимость в виртуальной машине TON: инструкция RUNVM может привести к загрязнению среды выполнения смарт-контрактов

2025.05.09
Поделиться
Злоумышленники могут воспользоваться моментом исчерпания газа дочерней виртуальной машиной для загрязнения библиотек (libraries) родительской виртуальной машины и спровоцировать сбои последующих вызовов, что в конечном итоге приведет к аномальному поведению контрактов, зависящих от целостности библиотек.

Автор: BitsLab

Подразделение TonBit компании BitsLab вновь обнаружило в глубине кода виртуальной машины TON (TVM) “невидимую бомбу”——уязвимость неатомарной миграции состояния инструкции RUNVM. Злоумышленники могут воспользоваться моментом исчерпания газа в дочерней виртуальной машине, чтобы загрязнить библиотеки (libraries) родительской виртуальной машины и спровоцировать сбои при последующих вызовах, что в конечном итоге приводит к аномальному поведению контрактов, зависящих от целостности библиотек.

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

Ниже приведено подробное описание уязвимости:

Инструкция RUNVM в TVM может загрязнять состояние вызывающей стороны и делать библиотеки недоступными. В коде инструкции 'RUNVM' обнаружена новая уязвимость. Эта уязвимость позволяет загрязнять состояние вызывающей стороны. Соответствующий фрагмент кода приведен ниже:

Приведенный выше код отвечает за запуск дочерней виртуальной машины. Его функция заключается в перемещении 'log' и 'libraries' из текущего VmState в новый объект VmState 'new_state', а затем замене текущего VmState на 'new_state'.

Проблема заключается в том, что эта операция не является по-настоящему атомарной. Перед выполнением утверждения '*this = std::move(new_state);' виртуальная машина может прервать процесс из-за исчерпания газа, что приведет к тому, что 'new_state' не сможет успешно заменить текущее состояние. В этот момент 'libraries' могли быть уже перемещены, оставляя библиотеки дочерней виртуальной машины в очищенном (перемещенном) состоянии.

Поскольку инструкция RUNVM реализует изоляцию потребления газа между дочерней и родительской виртуальными машинами через параметр isolate_gas, это может привести к следующему сценарию:

Даже если дочерняя виртуальная машина вызовет исключение исчерпания газа, родительская виртуальная машина все еще сохраняет достаточно газа для продолжения выполнения. Однако из-за того, что в процессе неудачного переноса состояния дочерняя виртуальная машина уже переместила/очистила 'libraries', все последующие операции, зависящие от 'libraries', завершатся неудачей. Это может привести к неожиданному поведению некоторых контрактов, предполагающих целостность библиотек.

Проверка уязвимости (проверка PoC)

Нам удалось воспроизвести эту уязвимость с помощью следующего тестового случая:

Пояснения к ключевым изменениям в тесте:

Для удобства локального наблюдения за состоянием библиотек мы модифицировали инструкцию NOP, чтобы принудительно зарегистрировать запись в библиотеке:

Шаги воспроизведения:

1) Добавьте этот тестовый случай в файл crypto/test/vm.cpp

2) Запустите исполняемый файл test-vm

3) Наблюдайте за исключением, выбрасываемым при выполнении инструкции XLOAD из-за пустой библиотеки

Ожидаемое поведение:

После выполнения инструкции NOP: библиотека содержит 1 запись

После выполнения инструкции RUNVMX: несмотря на то, что родительская виртуальная машина продолжает работать, библиотека становится пустой

Выполнение инструкции XLOAD завершается неудачей и выбрасывает исключение

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

Это открытие вновь демонстрирует глубокую экспертизу подразделения TonBit компании BitsLab в исследованиях безопасности экосистемы TON. Мы своевременно передали технические детали и решения по смягчению последствий фонду TON и помогли им завершить исправление. Рекомендуется всем разработчикам своевременно обновлять зависимые библиотеки после выпуска официального патча; одновременно добавлять более строгую проверку целостности библиотек и логику управления газом в собственные контракты, чтобы предотвратить злонамеренное использование подобных проблем. BitsLab продолжит придерживаться принципа “ответственного раскрытия”, работая вместе с сообществом над укреплением линии обороны безопасности Web3.

О BitsLab

BitsLab — это организация безопасности, стремящаяся защищать и строить развивающуюся экосистему Web3, с видением стать уважаемым отраслью и пользователями агентством безопасности Web3. Под ее брендом находятся три суббренда: MoveBit, ScaleBit и TonBit.

BitsLab специализируется на разработке инфраструктуры и аудите безопасности развивающихся экосистем, охватывая, но не ограничиваясь экосистемами Sui, Aptos, TON, Linea, BNB Chain, Soneium, Starknet, Movement, Monad, Internet Computer и Solana. В то же время BitsLab продемонстрировала глубокую профессиональную компетенцию в аудите различных языков программирования, включая Circom, Halo2, Move, Cairo, Tact, FunC, Vyper и Solidity.

Команда BitsLab объединяет нескольких ведущих экспертов по исследованию уязвимостей, которые неоднократно получали международные награды CTF и обнаруживали критические уязвимости в известных проектах, таких как TON, Aptos, Sui, Nervos, OKX и Cosmos.

О TonBit

TonBit, являясь ключевым суббрендом BitsLab, является экспертом по безопасности и ранним строителем в экосистеме TON. В качестве основного поставщика гарантий безопасности для блокчейна TON, TonBit специализируется на комплексном аудите безопасности, включая аудит языков Tact и FunC, обеспечивая целостность и устойчивость проектов на базе TON. На сегодняшний день TonBit успешно аудитировала множество известных проектов, включая Catizen, Algebra, UTonic, и обнаружила несколько критических уязвимостей, продемонстрировав наши превосходные способности в области безопасности блокчейна. Кроме того, TonBit успешно провела соревнование TON CTF, привлекшее множество участников и получившее широкое внимание, что еще больше укрепило ее позицию эксперта по безопасности в экосистеме TON. В будущем TonBit продолжит защищать безопасность блокчейна, способствуя устойчивому развитию технологий и экосистемы.

Присоединяйтесь к официальному сообществу TechFlow

В избранное
Поделиться