BadgerDAOフロントエンド攻撃:1本の注入スクリプトで1億2000万ドルが流出
2021年12月、攻撃者はBadgerDAOのCloudflareアカウントを侵害し、ウェブサイトのフロントエンドに悪意あるスクリプトを1本注入した。監査済みのスマートコントラクトには一切手を触れていないにもかかわらず、ユーザーが知らぬまま署名したウォレット承認を通じて約1億2000万ドルが奪われた。ウェブサイトもセキュリティの攻撃面であることを深掘りする。
- domains
- security
- dns
- domain-security
監査は問題なしだった。コントラクトも正常だった。それでも資金は消えた。
2021年12月2日前後、Bitcoin を分散型金融に組み込むことを目的としたDeFiプロジェクトBadgerDAOは、ユーザーの資金のうち約1億2000万ドルを失った。フラッシュローンの仕掛けも、再入攻撃のバグも、ボールトへの巧妙な数学的エクスプロイトも存在しなかった。スマートコントラクトは設計通りに動作した。攻撃者はコントラクトを破る必要がなかった——なぜなら、攻撃者はコントラクトを攻撃しなかったからだ。
攻撃したのは、ウェブサイトだった。
何者かが、app.badger.comのフロントエンドに悪意あるスクリプトをひそかに埋め込んでいた。ページを読み込んだすべてのユーザーの目には、普段使い慣れた信頼できるdAppと変わらなく映った。しかし操作を行おうとすると、ページはユーザーのウォレットに対して、見えない形でたった1つの追加許可を求めてきた。そして「承認」をクリックした瞬間、トークンはもはや自分のものではなくなった。
これは、監査済みコントラクトを持つプロジェクトが、フロントエンドコードに1行注入されただけで9桁の損失を被ったいきさつであり、セキュリティの境界について根本的に考え方を改める必要があることを示す事例だ。
心地よい嘘——「コントラクトは監査済みだ」
暗号資産コミュニティはユーザーに対し、プロトコルを信頼する前に一つのことを確認するよう訓練してきた。*監査されているか?*という問いだ。監査には意味がある。実際のバグを発見する。しかしいつの間にか、「コントラクトは監査済みだ」という言葉が完全な安全を示す感覚へと変質し、まるでそのプロジェクト名を冠したすべてのものを守る力場であるかのように受け取られるようになった。
そうではない。
監査が検査するのはオンチェーンコードだ。ボールト、トークンのロジック、アクセス制御——これらが対象となる。開発者がログインしたまま置き忘れたノートPC、ブラウザを特定の場所へ誘導するDNSレコード、サイトの前段に置かれたCDN、あるいはdAppにアクセスした際にブラウザが実際にダウンロードして実行するJavaScript——これらは監査の対象外だ。それらはWeb2の領域にある。クラウドアカウント、APIキー、ドメインインフラの中に存在し、Solidityのコードと同じくらい重要な基盤を担っている。
BadgerDAOは、このギャップを示す最も明確な証拠だ。この事件の技術的分析が端的に述べているように、スマートコントラクトの観点からは何も問題は発生しておらず、攻撃者はユーザーが付与した承認を利用していただけだった。チェーンは完璧に機能していた。嘘をついていたのはウェブサイトだった。
攻撃の手口——正常な領収書が発行される改ざんされた店舗

何百回も訪れたことのある店に入ったと想像してほしい。同じ看板、同じスタッフ、同じカウンター。小さな商品を買い、レジで会計し、カードをタップする。すべてが普段通りに見える。しかしその裏では、カードリーダーがこっそり別のものに入れ替えられており、見知らぬ誰かがいつでも好きなときに、あなたの口座から2度目の無制限引き落としを静かに承認できる仕組みになっていた——。
これが、BadgerDAOユーザーに起きたことの本質だ。
この分類は重要だ。なぜなら、この事件がこれほど教訓的である理由がそこにあるからだ。Viceが要約したように、このハッキングは複雑なスマートコントラクトのエクスプロイトを伴うものではなく、BadgerDAOのウェブインフラを標的としたフロントエンド攻撃だった——具体的にはCloudflareアカウントを狙ったものだった。彼らの表現を借りれば、Web3ターゲットに向けた昔ながらのウェブ攻撃だったのだ。
手口はシンプルで静かなものだった。悪意あるスクリプトがユーザーのウォレットに対し、攻撃者のアドレスへのトークン送付許可を求めた。Viceの言葉によれば、悪意あるスクリプトは基本的に、人々をだまして攻撃者のアドレスへトークンを送信する権利を与えさせた。ユーザーはdAppとの通常の操作を行っているつもりだった。実際には、自分のトークンへのアクセス権限に署名させられていた。
セキュリティ研究者はこのパターンを*アイスフィッシング*と呼ぶ。秘密鍵を盗むのではなく、ユーザーをだまして自発的に悪意ある支出者を承認させる手法だ。署名は本物だ。承認は本物だ。オンチェーントランザクションは正当だ。だからこそ非常に危険なのであり、コントラクトの監査ではこれを防ぐことができない理由でもある。
ユーザーが失ったもの——署名ひとつひとつで約1億2000万ドル
ボールトコードの1行にも触れることなく実行された攻撃としては、驚くべき被害額だ。
スマートコントラクト監査会社PeckShieldは総損失額を約1億2000万ドルと推定した。BadgerDAOが独自に実施した事後分析では、すべての盗難資産を共通の通貨に換算したところ、損失は約2,076.54 BTC(ハック当時のレートで約1億1,630万米ドル)に達した。
被害は均等には分布しなかった。1件の取引だけで大部分を失ったとされる被害者が存在した——おそらく機関投資家向けアカウントだった。事例研究によると、Yearn wBTCボールトから約900 BTCが引き出され、1者だけで5,000万ドル超相当のWrapped Bitcoinを失ったとされている。残りは数百人の一般ユーザーが被った損害だ。
この規模の被害は、忍耐の産物でもあった。攻撃者はパニックで動いたのではない。Fortaの分析によると、ハッカーはひそかに約200アカウントから承認を積み上げ、2021年12月2日午前0時48分に一気に被害者のウォレットを10時間以内に空にした。悪意ある承認は何日もかけて静かに蓄積されていた——仕掛けられた罠が、一斉に作動したのだ。別の調査では、キャンペーン期間中に500のウォレットが無制限の承認を付与したと集計されている。
最も残酷な事実は、慎重なユーザーであっても確認できる手段がなかったということだ。URLは正しかった。TLS証明書は有効だった。インターフェースは本物だった。おかしかったのはただ一点——正規のサイト自身が配信していたJavaScriptのひとかけらだけだった。
経緯——CloudflareのAPIキーと注入された承認

攻撃者が入り口に使ったのはスマートコントラクトではなかった。クラウドアカウントだった。
BadgerDAOは、現代のウェブの大部分と同様にCloudflareを使用していた——ウェブサイトを配信・高速化するコンテンツデリバリーおよびエッジコンピューティングのレイヤーだ。そのアカウントを支配することは、BadgerDAOのウェブサイトが訪問者に渡すコードを支配することを意味した。そして攻撃者は盗んだキーを通じてその支配権を手に入れた。
CoinDeskが伝えたBadgerDAOの公式説明によると、ハッカーはBadgerのエンジニアが知らないうちに、また許可なく作成された侵害済みAPIキーを使用し、一部のユーザーに影響を与える悪意あるコードを定期的に注入した。「一部のユーザーに」という表現は、これほど長期間気づかれなかった理由の一つだ。スクリプトはすべてのユーザーに常に適用されたわけではなく、特定のユーザーにのみ間歇的に現れた。そのため悪意ある挙動を再現・発見することが極めて難しかった。
なぜ許可されていないAPIキーが存在し得たのか。根本原因はCloudflareアカウントの欠陥に遡った。事例研究によると、メール認証が完了する前に、未認証ユーザーがアカウントを作成し、さらにグローバルAPIキー(削除も無効化もできない)を作成・閲覧できる状態になっていた。攻撃者はアカウントに対してキーを仕込み、本来の所有者が認証を完了してアカウントを有効化するのを待つだけでよかった——有効化された瞬間から、攻撃者は有効なAPIアクセス権を静かに手にしていた。
そのキーを使って攻撃者はCloudflare Workers——Cloudflareのエッジコンピューティングプラットフォーム——を悪用し、ページがユーザーに届く途中で書き換えた。BadgerDAOがサイバーセキュリティ会社Mandiantと協力してまとめた事後分析では、2021年12月2日のフィッシング事件はCloudflare Workersによって提供された悪意あるスニペットの注入が原因だったと結論づけられた。注入されたコードが行ったのは、dAppの通常フローに余分なトークン承認リクエストを差し込むというただ一つのことだった。
使用された承認呼び出しにさえ、意図的な工夫があった。CryptoBriefingが報じたところによると、ハッカーはBadgerのウェブサイトに悪意あるスクリプトを挿入し、ユーザーに「allowanceの増加」のトランザクションを提示したという。この選択は偶然ではなかった。生のapprove呼び出しと比べて、increaseAllowanceプロンプトはウォレットのポップアップで視覚的に弱い、警戒を促さない表示になりやすい——赤いフラグが少なく、「支出権限を付与しようとしています」という警告が薄くなるのだ。攻撃者は、盗まれる側のユーザー体験を最適化していた。
こうして全体の連鎖は次のようになる。Cloudflareアカウントの認証の脆弱性により未認証のAPIキーが存在できた→攻撃者がそのキーを使ってWorkerをデプロイした→WorkerがApp.badger.comにスクリプトを注入した→スクリプトがウォレットに攻撃者へのトークン許可を求めた→ユーザーが承認した→攻撃者が資金を引き出した。この連鎖のどの段階も、監査済みコントラクトには一切触れていない。
対応——Web2の傷を止めるためにチェーンを一時停止する
12月2日の早朝にドレインのトランザクションが大規模に発生し、オンチェーンの足跡がついに無視できなくなると、BadgerDAOは迅速に動いた——完全にオフチェーンで始まった問題を、スマートコントラクトを使って止めた。
チームは公式に事態を認め、CryptoBriefingの報道によるとすべてのスマートコントラクトが一時停止され、それ以上の引き出しを防ぐ措置が取られたと確認した。Badgerのボールトには一時停止機能があったため、送金を凍結することで攻撃者が新たに承認された資金を動かし続けることを防いだ。ある技術的分析では、この停止はtransferFrom関数——悪意ある承認が悪用していたERC-20のメカニズムそのもの——へのすべての呼び出しを凍結するチームの権限を行使したものと説明されている。この停止があったからこそ、損失の一部は理論上回収可能だった。攻撃者が移動させたものの、凍結が入る前にBadgerのボールトから完全に引き出されていなかった資産が存在したからだ。
インフラ面では、クレデンシャル侵害に伴うWeb2の教科書的な後処理が行われた。CloudflareのAPIキーのローテーション、アカウントパスワードの変更、多要素認証の強化、存在すべきでなかったすべてのキーの監査だ。BadgerDAOはその後Mandiantと連携して調査を行い、タイムライン——Cloudflareアカウントの脆弱性、その数ヶ月前に作成された不正なキー、11月のスクリプト注入、12月のドレイン——を再構成した技術的事後分析を公表した。
しかし、どれほどインシデント対応を尽くしても、ユーザーがすでに付与してしまった承認を取り消すことはできなかった。署名は有効だった。事後対応は将来の盗難を防ぎ、回収を追うことはできる——しかし、すでにオンチェーンで与えられた同意を覆すことはできない。
教訓——ウェブサイトもセキュリティの攻撃面である
BadgerDAO事件の最も重要な教訓は、境界の修正だ。多くのチームが——そして多くのユーザーが——セキュリティの境界をスマートコントラクトの周囲に引く。BadgerDAOは、その境界がはるかに広いことを証明した。
1. フロントエンドは常に対象範囲に含まれる。 ユーザーのブラウザが実行するコードは、オンチェーンに存在するかどうかにかかわらず、プロトコルの一部だ。攻撃者がサイトの配信するJavaScriptを制御できるなら、監査済みコントラクトの有無にかかわらず、ユーザーのウォレットを制御できることになる。サイトは「単なるUI」ではない。同意が捉えられる場所だ。
2. クラウドとドメインインフラもコントラクトの一部だ。 Cloudflareアカウント、DNSプロバイダーのログイン、レジストラアカウント、CI/CDキー——どれも、ユーザーに見せるものを書き換える経路になり得る。BadgerDAOが侵害されたのはボールトではなく、ウェブサイトを管理するアカウントにおいてだった。これらのクレデンシャルを、デプロイヤーの秘密鍵に対するのと同じ警戒心で扱うべきだ。
3. APIキーとアカウント作成フローは現実の攻撃面だ。 この惨事のすべては、本来存在すべきでなかった不正なAPIキー——認証の隙間によって可能となったもの——にかかっていた。すべてのキーを把握し、スコープを厳格に絞り、ローテーションし、新規キーにはアラートを設けよ。忘れていたキーは、攻撃者が使えるキーだ。
4. 「監査済み」は必要条件であって十分条件ではない。 監査結果が清廉であることは本物の価値があり、依然として実施すべきだ。しかしそれがカバーするのはコントラクトであって、クラウドアカウント、DNS、CDN、フロントエンドのビルドパイプラインではない。セキュリティとは、ユーザーのブラウザからチェーンへの全経路にわたる——そして最も弱いリンクが、最も強いリンクではなく基準を設ける。
5. ユーザーはフロントエンドの改ざんから自力では身を守れない。 「常にURLを確認しろ」は良いアドバイスだが、この件では何の役にも立たなかった。URLは正しかった。ユーザーへの教訓はより難しい。承認プロンプトやincreaseAllowanceプロンプトに対して深い疑念を持つこと、トークン承認をデコードして警告するウォレットやツールを選ぶこと、古い許可を定期的に取り消すことが重要だ。承認しようとしている内容こそが、アクセスしているページよりも重要だ。
Namefiの視点

BadgerDAOを本質まで突き詰めると、所有権とコントロールの問題だ。攻撃者はBadgerDAOのウェブサイトを所有していなかった——しかし数週間にわたって、何を配信するかを変えることができた。プロジェクトを実際に所有していた人々には、ウェブプレゼンスのコントロールの連鎖——アカウント、キー、エッジ設定、DNS——がひそかに侵害されていることを知る信頼性のある、改ざんの証跡を示す手段がなかった。
これがNamefiが取り組むギャップだ。Namefiはドメインとウェブの所有権をファーストクラスのインターネットネイティブ資産として扱う。DNSとの互換性を保ちながら、検証可能で監査可能であり、ひそかなハイジャックがより困難なコントロールを実現する。フロントエンドの攻撃面——誰が名前を管理し、どこに解決し、どのインフラがその背後にあるか——は、スマートコントラクトの後付けの話ではない。BadgerDAOが最も高い代償を払って示したように、それはセキュリティモデルの一部なのだ。
コントラクトをどれほど完璧に監査しても、未認証のキーがウェブサイトを書き換えられ、注入されたスクリプトがユーザーの承認を収集できるなら、監査は決して全体ではなかったということだ。ドメイン、DNS、そしてアプリケーションを実際のユーザーに届けるウェブインフラは、セキュリティの攻撃面の一部だ。そのように扱うべきだ——攻撃者はすでにそうしているのだから。
参考資料・関連情報
- CoinDesk — BadgerDAO Reveals Details of How It Was Hacked for $120M
- Vice (Motherboard) — Hackers Steal $119M From 'Web3' Crypto Project With Old School Attack
- Halborn — Explained: The BadgerDAO Hack (December 2021)
- Forta — How to Derail a 120-Million-Dollar Hack
- CryptoBriefing — $120M Lost in BadgerDAO DeFi Hack
- Quadriga Initiative — Dec 2021 — BadgerDAO Malicious Code Injected — $116.3m
- Chainalysis — Behind The Scenes of The BadgerDAO Hack
- BadgerDAO / Mandiant — BadgerDAO Exploit Technical Post Mortem
執筆・編集メンバー
Aileen Wrightはニューヨーク市で暮らす20代の学生です。この街では、美術館から 図書館の閲覧室までは歩いてすぐですが、その二つを巡れば午後いっぱいを過ごせます。 彼女が名前について書くようになったきっかけは、美術と歴史でした。一枚の肖像画や 一枚の硬貨、あるいは写本の余白が、一つの名前を何世紀にもわたって伝え、その間に 意味を変えていくことに惹かれたのです。
普段の彼女は、ペーパーバックを手にセントラルパークで過ごしたり、公共の 静かな閲覧室で、名前の一覧に書かれた意味ではなく、その名前が本当はどこから 来たのかを調べたりしています。独学でプログラミングも学んでおり、その影響で、 綴りや並べ方、そして名前が長く愛されるかどうかを左右する細部に、人一倍こだわる ようになりました。
Namefiでは、ドメイン名の背景にある歴史と文化、ブランドが名前を変えるときに背負う 物語、そして魅力的な物語と検証済みの出典との違いについて執筆しています。
Victor Zhouは、デジタルアイデンティティと信頼を専門とするテクノロジー企業の創業者で、 標準仕様のエディターでもあります。Namefiを創業し、Ethereum Improvement Proposalsの 編集に携わっています。以前はGoogle Labsでスマートコントラクトのアーキテクチャ設計を 率いていました。
彼の仕事は、ネーミング、所有権、そして人々がオンラインで自らのアイデンティティを 確立するために使うシステムが交わる場所にあります。だからこそ、名前が個人的な意味、 社会的な認知、デジタルインフラの間をどのように行き来するのかに強い関心を持っています。
Namefiでは、永続的なデジタルアイデンティティとしてのドメインについて編集・執筆して います。名前が所有可能なオンチェーン資産になる仕組み、トークン化が保管と信頼をどう 変えるのか、そして人々がオンラインでアイデンティティを確立するために使うシステムから ネーミングが何を学べるのかを扱っています。
Chie Kudō(工藤 知恵)は、福岡を拠点とする30代の翻訳者です。電機メーカーで ハードウェアQAエンジニアとして製品資料の作成と確認に携わった後、英語と日本語の 間で技術記事や編集記事をローカライズする仕事に転じました。
品質保証で身につけた習慣は、今の仕事にも生きています。用語の一貫性はもちろん、 ブランド名を漢字、かな、ローマ字のどれで表すか、半角と全角をどう使い分けるか、 借用元の英語とは異なる意味を持つ和製英語をどう扱うかといった、日本語組版ならではの 細部を厳しく確認します。小さなベランダ菜園を楽しみ、週末にはボルダリングをします。
Namefiでは、ドメインとネーミングに関する記事を日本語にローカライズしています。 名前がページ上でどう読めるか、そして最初から正しく入力してもらえるかに目を配っています。
関連ガイド
- 12ドルの1分間:誰かがひっそりとGoogle.comを購入した日2015年9月、元Google社員がGoogle Domainsを通じてgoogle.comを12ドルで購入し、世界で最も価値あるドメインの管理権を約1分間保持した。Sanmay Vedと6,006.13ドルのバウンティ、そして「1分間の所有」が明かすドメイン支配の実態。
- ドメイン危機録 EP03:2020年Twitterビットコインアカウント乗っ取り事件2020年7月15日、攻撃者は電話一本でTwitterに侵入し、オバマ、バイデン、マスク、ゲイツ、Apple、Uberの認証済みアカウントを乗っ取り、ビットコイン2倍詐欺を実行——約11万8,000ドルを詐取した。オンライン上のアイデンティティがいかにして奪われたか、そして「名前を所有する」ことの意味を深く掘り下げる。
- ドメイン緊急事態 EP05:2024年Squarespace DeFiドメイン大量乗っ取り事件2024年7月、Google DomainsからSquarespaceへのレジストラ移行が、デフォルト認証の脆弱性を大規模な攻撃面に変えた。攻撃者はCompound Finance、Celer Network、Pendle、Unstoppable Domainsなど暗号資産・DeFiプロジェクトのドメインを乗っ取り、ウォレットドレイナー型フィッシングサイトに誘導した。「シームレス」な移行がいかにして数百の無施錠の玄関を生み出したか、そしてレジストラセキュリティとMFAについて何を教えてくれるかを解説する。
- Bitcoin.org DNSハイジャック:Bitcoinの公式ホームページが「コインを倍増」詐欺に変えられた経緯2021年9月、Bitcoin.org――匿名運営者Cobraが長年運営してきたBitcoinの情報サイト――がDNS層でハイジャックされ、偽の「Bitcoinを倍増させる」プレゼント詐欺に変えられた。サイトがオフラインになるまでの間、詐欺師たちは約1万7,000ドルを騙し取った。Domain Maydayが、何が起きたのか、どのような手法だったのか、そしてクリプトネイティブなサイトであってもDNSに依存するという事実が何を教えてくれるのかを深く掘り下げる。