2026年1月8日、イーサリアムのブロック24,191,019で、ある取引によりプロトコルの購入価格がゼロになったため、TruebitのTRUトークンが崩壊しました。その一つの条件が無制限のミントとETHへの迅速な出口を可能にしました。 詳細は後ほどです。
攻撃者はgetPurchasePriceを呼び出し、その後buyTRU(0xa0296215)を呼び出し、総供給量より多くのTRUを発行し、同じサイクルを繰り返し、その後sellTRUで売却しました。総コストは40ドル未満で、取引は8,535 ETH(約2,600万ドル)を返還しました。
SourcifyではTRUトークンプロキシのみが検証され、Solidity 0.5.3でコンパイルされました。その時代は、内蔵のオーバーフローチェックや多くの安全機能よりも前の時代です。古いコードは何年も動いても、単一のエッジケースがより良い分析に出会うと失敗します。
未検証の購入契約を逆コンパイルし、getPurchasePriceを内部関数(0x1446)に追跡しました。この関数は供給S、準備R、THETA(当時75)から価格を計算します。安全な数学補助者がほとんどの道で使われました。
故障点は最終式v13 = _SafeDiv(v6, v12 + v9)でした。その追加はチェックされず、Solidity 0.5.3はオーバーフロー時に戻ることはありません。十分な大きな入力があればラップし、整数除算はゼロを返しました。
私たちの詳細な解説は、レガシーシステムにおける根本原因と教訓をカバーしています。
5.22K