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 у минулі місяці. Ми вважаємо, що подібні атаки, засновані на використанні штучного інтелекту, стануть частішими, тому рекомендуємо командам проектів провести нову перевірку коду контрактів на безпеку, якщо виявлено уразливості, негайно оновити контракти або перевести активи, а також налаштувати моніторинг ланцюга блоків, щоб вчасно виявляти аномалії і мінімізувати збитки.

