DeFiプロトコルAbracadabraの攻撃
DeFiプロトコルAbracadabraは、攻撃者がそのバッチ機能の単純な論理ミスを利用した結果、$1.8百万を失いました。Hackenのアナリストによると、攻撃者はすでにTornado Cashを通じて資金を洗浄しています。
攻撃の詳細
10月初旬、Abracadabraは、預けたトークンを担保にしてそのステーブルコインMIMを借りることができるDeFi貸付プロトコルで、過去にも複数回のハッカー攻撃を受けていましたが、今回は再び約$1.8百万を失いました。攻撃者はプロトコルのバッチ機能の単純な論理ミスを利用し、担保を提供することなく借り入れを行いました。この手法は、数日前にフォークされたプロジェクトが攻撃を受けたのと同じ方法です。
Hackenの報告によると、Abracadabraは、利息を生むトークンを担保として使用し、米ドルにペッグされたトークン「Magic Internet Money」、またはMIMを借りる方法として立ち上げられました。
システムの構成
このシステムは、借入ルールを扱う「Cauldrons」と、実際にトークンを保持する共有ボールト「DegenBox」の2つの部分で構成されています。要するに、Cauldronに担保を提供し、DegenBoxが裏でお金を管理します。
攻撃のメカニズム
何が間違ったのかの短い説明は次の通りです。借り手が実際に担保を持っているかどうかを最終確認するための安全フラグが、単一のトランザクション内でオフになってしまいました。Hackenの報告によると、攻撃者は「Abracadabraのcook機能の論理的欠陥を利用し、MIMトークンを借りた後、担保が十分であるかを確認するための検証フラグを即座にリセットしました。」これにより、複数のCauldronで担保なしの一回限りの借入が可能になりました。
流れは次のように機能しました。Abracadabraは、ユーザーが1つのトランザクションで複数のアクションを行えるようにするために、cookというバッチ機能を使用しています。たとえば、担保を預けて同時に借りることができます。そのアクションの1つ、つまり「借りる」ステップは、needsSolvencyCheckというフラグをtrueに設定します。これは「このトランザクションの最後に、借り手が安全であることを確認してください」という意味です。
しかし、同じバッチ内で実行できる別のアクションは「_additionalCookAction(…)」と呼ばれます。Hackenが指摘するように、その機能は「仮想」として宣言され、実装されていなかったため、デフォルトで空のオブジェクトを返し、すべてがfalseに設定されていました。これにより、攻撃者は借入アクションを呼び出し、その後フラグをリセットするデフォルトアクションを呼び出し、最終的にプロトコルはソルベンシーを確認しませんでした。
攻撃の結果と影響
アナリストによると、攻撃者は一度に6つのCauldronを攻撃し、約1.79百万MIMを取得し、それをETHに交換しました。攻撃者は脆弱性を利用し、6つの異なるCauldronを体系的に通過し、それぞれを「専用のcook機能呼び出しを使用して」排出しました。交換後、攻撃者は資金をTornado Cashという暗号ミキシングプロトコルを通じてルーティングし、主に10 ETHずつ、翌日にかけて徐々に送信しました。
過去の問題と今後の展望
そして、AbracadabraのCauldronV4コードが問題に関与するのはこれが初めてではありません。今年の初めに、同じ契約のファミリー内の異なるエッジケースを利用した他の事件がありました。今興味深いのは、フォークされたデプロイメントがどれだけ早く反応したかです。報告によると、Synnaxというフォークは、Abracadabraの排出の数日前に独自のDegenBoxでCauldronV4マスターを一時停止またはホワイトリストから外しました。つまり、フォークチームは同じ弱いパターンを見つけた後、緊急ブレーキを引いたことを示唆しており、リスクはコードを監視しているチームには見えていたが、修正されていなかった可能性があります。