Pe 8 ianuarie 2026, la blocul Ethereum 24.191.019, tokenul TRU al Truebit s-a prăbușit după ce o tranzacție a forțat prețul de achiziție al protocolului la zero. Acea singură condiție permitea mințirea nelimitată și o ieșire rapidă către ETH. Urmează mai multe detalii.
Atacatorul a numit getPurchasePrice, apoi buyTRU (0xa0296215), a emis mai mult TRU decât oferta totală, a repetat ciclul, apoi a vândut prin sellTRU. Costul total a fost sub 40 de dolari, iar tranzacția a returnat 8.535 ETH (aproximativ 26 milioane de dolari).
Doar proxy-ul token TRU a fost verificat în Sourcify, compilat cu Solidity 0.5.3. Acea perioadă precede verificările de preaplin integrate și multe funcții de siguranță. Codul vechi poate rula ani de zile, apoi eșuează când un singur caz limită este analizat mai bine.
Am decompilat contractul de achiziție neverificat și am urmărit getPurchasePrice într-o funcție internă (0x1446) care calculează prețul din sursa S, rezerva R și THETA (75 la acea vreme). Ajutorele matematice sigure au fost folosite pe cea mai mare parte a traseului.
Punctul de eșec a fost expresia finală: v13 = _SafeDiv(v6, v12 + v9). Acea adăugire a fost nebifată, iar Solidity 0.5.3 nu revine la overflow. Cu o intrare suficient de mare, s-a înfășurat și diviziunea întregului a returnat zero.
Articolul nostru complet acoperă cauza principală și lecțiile pentru sistemele vechi:
5,22K