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,07K