8 января 2026 года протокол Truebit Protocol был взломан, в результате чего было потеряно 8535,36 ETH (примерно 26,44 миллиона долларов США). Официальное подтверждение от Truebit Protocol было опубликовано на следующее утро. Команда безопасности ExVul провела подробный анализ уязвимости, результаты которого приведены ниже:
Процесс атаки
Адрес атакующего:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
Хэш транзакции атаки:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
Атакующий выполнил атаку, циклически вызывая в 4 этапа транзакции getPurchasePrice→0xa0296215→0xc471b10b. Для примера проанализируем первый цикл.
1. Атакующий сначала вызывает функцию getPurchasePrice(240442509453545333947284131), которая возвращает 0.
2. Атакующий вызывает функцию 0xa0296215(c6e3ae8e2cbab1298abaa3), одновременно msg.value равно 0. В итоге успешно чеканится 240442509453545333947284131 монет TRU.
3. Атакующий вызывает функцию 0xc471b10b(c6e3ae8e2cbab1298abaa3). В итоге сжигается 240442509453545333947284131 монет TRU, и получается 5105,06 монет ETH.
Анализ логики атаки
Изучив описанный процесс атаки, можно явно заметить проблему в логике функций getPurchasePrice и 0xa0296215. Приступим к детальному анализу (поскольку контракт не имеет открытого исходного кода, приведенный ниже код является декомпилированным).
Сравнивая общие черты двух функций, мы видим, что функция 0x1446 используется для получения количества ETH, необходимого для покупки указанного количества TRU. Очевидно, что в функции 0x1446 присутствует логическая ошибка, приводящая к неверному расчету ETH. Подробно проанализируем логику внутри функции 0x1446.
Наблюдая за логикой функции 0x1446, поскольку конечный результат вычислений v13 == 0, проблема определенно кроется в упомянутой вычислительной логике. Важно понимать, что функция 0x18ef аналогична _SafeMul, следовательно, проблема заключается в использовании native сложения v12 + v9 (версия контракта ^0.6.10, поэтому проверка на переполнение отсутствует).
v12 и v9 обозначают соответственно:
На основе приведенного анализа, идея атаки злоумышленника заключалась в том, чтобы ввести очень большое значение _amountIn, чтобы вызвать переполнение v12 + v9, превратив его в очень маленькое значение, и в итоге получить (v12 + v9) / v6 == 0.
Вывод
Коренная причина инцидента с атакой на Truebit Protocol заключается в наличии серьезной уязвимости целочисленного переполнения в логике расчета цены покупки токенов. Поскольку контракт использовал версию Solidity ^0.6.10 и не проводил проверки безопасности для критических арифметических операций, в конечном итоге это привело к значительным потерям в размере 8535,36 ETH. В настоящее время новые версии Solidity сами по себе устранили уязвимость переполнения. Данная атака, вероятно, была обнаружена хакерами с использованием ИИ для автоматического сканирования уязвимостей в некоторых старых запущенных DeFi-протоколах (включая недавние атаки на Balancer и yETH). Мы считаем, что подобные атаки с использованием ИИ на старые DeFi-протоколы в последнее время будут происходить все чаще, поэтому рекомендуем проектным командам провести новый аудит безопасности кода контрактов. При обнаружении уязвимостей необходимо как можно скорее обновить контракт или перенести активы, а также настроить мониторинг в блокчейне для своевременного обнаружения аномалий и минимизации потерь.














