Drips Networkから2万4,000 DAIが流出 — 型変換エラーが招いた悲劇

Kitto

@kitto

オープンソースの寄付プロトコルであるDrips Networkで、約2万4,000 DAI規模のセキュリティ脆弱性を突いた攻撃が発生しました。セキュリティ企業のSlowMistによると、今回の攻撃の原因はDaiDripsHubコントラクト内のgive関数に存在していた、極めて小さなデータ型変換エラーによるものだそうです。

仕組みは単純ながらも致命的です。スマートコントラクトにおいて、符号なしの大きな数値型であるuint128の値を、符号ありのint128に強制変換する過程で、その値が許容範囲を超えているかを検証する手順が抜けていたことが災いしました。攻撃者は意図的に非常に大きな値を入力し、数値が負の数に反転する整数オーバーフロー現象を誘発しました。その結果、プロトコルに資金を送信するロジックが、逆に預金を引き出せるロジックへと完全に書き換わってしまったのです。

被害額自体はそれほど大きくありませんが、開発者にとってはまさに教科書的なセキュリティ事例となるでしょう。どれほど優れたプロトコルであっても、基本的なデータ型の検証を一つ怠るだけで、一瞬にして金庫が開かれてしまう可能性があることを示したと言えます。スマートコントラクトを記述する際は、明示的な型変換の部分に常に範囲チェックのロジックが含まれているか、改めて注意深く確認する必要がありそうです。


関連リンク