8 січня 2026 року на блоці Ethereum 24,191,019 токен TRU від Truebit обвалився після транзакції, яка змусила ціну покупки протоколу зрівнятися з нуль. Ця єдина умова дозволяла необмежену карбування та швидкий вихід на ETH. Більше деталей буде далі.
Зловмисник назвав getPurchasePrice, а потім buyTRU (0xa0296215), викарбував більше TRU, ніж загальна пропозиція, повторив цикл і продавав через sellTRU. Загальна вартість була нижчою за $40, а транзакція принесла 8 535 ETH (близько $26 млн).
Лише проксі токена TRU було перевірено в Sourcify, компільовано з Solidity 0.5.3. Ця епоха передувала вбудованим перевіркам переповнення та багатьом заходам безпеки. Старий код може працювати роками, а потім виходити з ладу, коли один крайній випадок зустрічається з кращим аналізом.
Ми декомпілювали неперевірений договір купівлі і простежили getPurchasePrice у внутрішню функцію (0x1446), яка обчислює ціну з пропозиції S, резерву R і THETA (на той час 75). Безпечні помічники з математики використовувалися на більшій частині шляху.
Точкою відмови був фінальний вираз: v13 = _SafeDiv(v6, v12 + v9). Це додавання не було перевірено, і Solidity 0.5.3 не повертається при переповненні. З достатньо великим вхідним сигналом він завершувався, і цілочисельне ділення повертало нуль.
Наш повний огляд охоплює корінну причину та уроки для застарілих систем:
5,27K