Оригинальный заголовок: «Анализ уязвимости контракта, приведшая к хищению 26,44 млн долларов протокола Truebit»
Источник оригинала: ExVul Security
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, будет становиться все больше. Поэтому мы рекомендуем проектам провести новую проверку безопасности кода контрактов, при обнаружении уязвимостей как можно скорее обновить контракты или перевести активы, а также настроить мониторинг цепочки, чтобы вовремя обнаруживать аномалии и минимизировать убытки.
Эта статья поступила в качестве гостевой публикации, она не отражает точку зрения BlockBeats.
Нажмите, чтобы узнать о вакансиях в Lulumi BlockBeats
Добро пожаловать в официальное сообщество Lulin BlockBeats:
Telegram-канал с обновлениями:https://t.me/theblockbeats
Telegram-чат:https://t.me/BlockBeats_App
Официальный аккаунт Twitter:https://twitter.com/BlockBeatsAsia


