問題の根源は、イーサリアムのレイヤー1(L1)上での決済処理と、ゼロ知識証明の検証ロジックとの間に存在した「ズレ」にありました。CertiKの分析によると、コントラクトの検証機能の一つは、提出された証明データの冒頭部分のみをチェックし、トークンの移動を許可するパラメータの完全な検証を怠っていました 。これにより攻撃者は、表面的なチェックは通過するものの、データの深部には不正な引き出し命令を含んだ証明を提出することに成功したのです。
さらに、SlowMistの詳細な分析は、L1決済ループにおける走査範囲の制限に根本原因があったと特定しています。攻撃者はnumRealTxsとdecoded_slotsの間に不一致を生じさせ、ZK証明を通じて31個の空のスロットをレイヤー2の状態に提出することで、L1コントラクト層での完全な検証を回避しました 。
この事件の最大の特徴は、攻撃が構造的に誰にも止められなかったという点にあります。それも偶然ではなく、運営側が意図的にそう設計した結果です。
Aztec Connectは2023年3月にサービスを終了(非推奨化)し、ユーザーには1年以上の資産引き出し猶予期間が与えられました 。そして2024年、Aztec Labsはさらに踏み込み、システムに対するすべての管理者権限を意図的に放棄しました。これにより、コントラクトは完全に**不変(イミュータブル)**なものとなり、アップグレードも、一時停止も、誰にも一切できなくなりました
。
事件発生後、Aztec LabsはX(旧Twitter)で次のように声明を発表しました。
しかし、約2.1Mドル相当の資産をロックしたままの「誰にも触れない金庫」は、脆弱性が見つかった瞬間、攻撃者にとって格好の標的と化したのです。
Aztec Connectの事件は、分散型金融(DeFi)が抱える**「ゾンビコントラクト」問題**の教科書的な事例です。
一度ブロックチェーン上にデプロイされた不変のスマートコントラクトは、プロジェクトが終了しても消え去ることはありません。内部にロジックと、そして今回のように多額の資産を抱えたまま、永遠にネットワーク上に存在し続けます。完全な分散化を目指して管理者権限を放棄する行為は「裏口がない」ことの証明として信頼性を高めますが、同時に、後日発見された脆弱性が誰にも修正できない時限爆弾になるという、非対称なリスクを内包しているのです 。
今回のケースでは、プロトコル閉鎖から3年が経過しても、誰もが「死んだ」と思っていたコントラクトに数百万ドルが眠っていました。これは、DeFiプロジェクトがサービスを終了し、管理者権限を放棄する前に、強制的にすべての資産を引き出させる仕組みや、タイムロック式の緊急停止メカニズムを組み込むことの重要性を強く示唆しています 。
さもなければ、放棄された「不変」のコードは、将来必ず攻撃者を惹きつける、修正不能なハニーポットと化すのです。
Comments
0 comments