8 января 2026 года протокол Truebit Protocol подвергся взлому, в результате которого было украдено 8 535,36 ETH (примерно 26,44 млн долларов США). Официальный представитель Truebit Protocol подтвердил это в публикации, опубликованной в тот же день утром. Команда безопасности ExVul провела подробный анализ уязвимости в ходе этого атакующего события. Результаты анализа следующие:
Процесс атаки
Адрес атакующего:
0x6c8ec8f14be7c01672d31cfa5f2cefeab2562b50
Хэш атакующей транзакции:
0xcd4755645595094a8ab984d0db7e3b4aabde72a5c87c4f176a030629c47fb014
Атакующий завершил атаку, вызвав транзакцию getPurchasePrice→0xa0296215→0xc471b10b в течение 4 раундов. В качестве примера рассмотрим первый цикл.
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, поэтому проблема возникает из-за использования встроенного сложения v12 + v9 (версия контракта ^0.6.10, поэтому проверка на переполнение отсутствует).
v12 и v9 соответственно означают:

Согласно вышеуказанному анализу, атакующий использует следующую схему: вводит очень большое значение _amountIn, чтобы v12 + v9 переполнились и стали очень маленьким числом, в результате чего (v12 + v9) / v6 = 0.
Вывод
Фундаментальной причиной атаки на протокол Truebit стало наличие серьезной уязвимости переполнения целых чисел в логике вычисления цены покупки токена. Поскольку контракт использовал версию Solidity ^0.6.10 и не проводил безопасную проверку ключевых арифметических операций, в результате произошла重大损失 в размере 8 535,36 ETH. В настоящее время новые версии Solidity сами по себе смягчают уязвимости переполнения. Мы полагаем, что эта атака, вероятно, была осуществлена хакерами, которые с помощью ИИ автоматически сканировали некоторые старые протоколы DeFi, уже вышедшие в сеть, и обнаружили уязвимости (включая недавние атаки на Balancer и yETH). Мы считаем, что в ближайшее время будет все больше случаев атак, при которых ИИ будет использоваться для атак на старые протоколы DeFi. Поэтому мы рекомендуем проектам провести новую проверку безопасности кода контрактов, если будут обнаружены уязвимости, необходимо как можно скорее обновить контракты или перенести активы, а также наладить мониторинг цепочки, своевременно обнаруживать аномалии и минимизировать потери.

