Back to Blog

ワームホール攻撃の再訪

Code Auditing
March 22, 2022

1. 背景

ワームホール(Einstein-Rosen bridgeとしても知られる)は、時空の離れた点を結ぶ理論上の構造です。ブロックチェーンの世界では、ワームホールは異なるチェーン(例:SolanaEthereum)間のブリッジとして使用されます。ユーザーはワームホールを介してトークン化された資産をブロックチェーン間で転送できます。

2022年2月2日、ワームホールはハッキングされ、攻撃者は3億2000万ドル相当の120,000ラップドイーサをミントすることに成功しました。これはDeFi史上、Poly Networkに次ぐ2番目に大きな損失です。

2. ワームホールはどのように機能するか

ワームホールは、各チェーンで発行されたメッセージを監視することで機能します。監視されたメッセージはターゲットチェーンに転送され、クロスチェーン通信プロトコルを構築できます。

直感的な疑問は、監視されたメッセージの信頼性をどのように保証するかです。この問題に対処するために、ワームホールは19の追加ノードを導入しており、これらはガーディアンと呼ばれます。現在のガーディアンセットはWormhole Explorerで確認できます。各ガーディアンは、監視されたメッセージを独立して検証し、メッセージに署名できます。

ワームホールでは、メッセージはVAA形式で構成されます。VAAは2つの部分から構成されます。1つはヘッダーで、ガーディアンからの署名が収集されます。もう1つはボディで、ターゲットチェーンの情報、メッセージペイロードなどが含まれます。

ガーディアンからの署名がコンセンサスしきい値に達すると、VAAはオンチェーンに投稿できます。

要約すると、ガーディアンは転送されるメッセージの整合性を担当します。

3. トークンブリッジ

異なるチェーン間でメッセージがどのように転送されるかを紹介した後、ワームホールの主要なアプリケーションであるトークンブリッジがどのように機能するかを理解することは難しくありません。

チェーンAからチェーンBへトークンを転送するには、ワームホールはチェーンAのトークンをロックし、チェーンBでミントします。これが大まかなアイデアです。実際には、これは3つのステップに分割できます。まず、チェーンAのトークンがロックされます。次に、チェーンAのトークンがチェーンBに転送されるべきであるというメッセージがブロードキャストされます。第三に、チェーンBはメッセージを受け取り、対応するトークンがミントされます。これで完了です。

4. Solanaの説明

Solanaでは、トランザクションは複数の命令で構成されます。各命令は、プログラムID、アカウント、およびデータを含みます。プログラムIDは、命令を処理するプログラム(スマートコントラクト)を表します。プログラムはデータを解釈し、提供されたアカウントを操作します。

5. ワームホール攻撃

要するに、攻撃者はEthereumで資産をロックすることなく、Solanaで120,000 ETHをミントしました。トランザクションはこちらにあります。

したがって、問題は攻撃者がSolanaで120,000 ETHをミントできた方法です。ステップを詳しく見ていきましょう。トークンをミントするために、命令complete_wrappedが呼び出されます。この命令はいくつかのリソース(アドレス)を受け取り、3番目のリソースは署名済みメッセージが保存されているアドレスです。120,000 ETHをミントする前に、チェーンB(つまりSolana)は、チェーンA(つまりEthereum)で120,000 ETHがロックされたことを示す署名済みメッセージ(つまりVAA)を受信する必要があります。

メッセージを投稿するために、post_vaa.rsで定義されているpost_vaaが呼び出されます。その結果、メッセージを保存するための中央保管装置(アカウント)が作成されます。しかし、post_vaaはガーディアンからの署名をチェックしません。代わりに、verify_signatures.rsで定義されているverify_signauresが署名を検証します。

verify_signaturesに渡される4番目のリソースはシステム命令リソースです。verify_signaturesがどのように機能するかを探ってみましょう。

103行目では、関数load_instruction_atが呼び出され、以前に実行された命令secp_ixがロードされます。secp_ixはSecp256k1署名検証関数を呼び出します。したがって、verify_signaturesは、以前に実行された命令secp_ixをチェックすることで署名を検証します。これで全て理解できましたか?関数load_instruction_atは、命令をどこからロードするかをチェックしません!!!命令をSysvar:Instructionsからロードすることが想定されています。

しかし、攻撃トランザクションの4番目のリソースは、Sysvar:Instructionsではなく、2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRdです。この場合、攻撃者は署名検証プロセスを正常にバイパスしました。ワームホールは検証がパスしたと判断し、メッセージはチェーンに投稿され、結果として何もロックせずに120K ETHがミントされました!

合法的な検証命令を見てみましょう。このトランザクションは2つの命令で構成されています。最初の命令はSecp256k1検証関数を呼び出し、2番目の命令はverify_signatures命令を呼び出します。ここの4番目のリソースがSysvar:Instructionsであることに注意してください。

120K ETHをミントした後、攻撃者はそれをEthereumに引き戻し、他のトークンに交換して利益を得ることができました。

6. パッチ

リポジトリで述べたように、バージョン 1.8.0 以降、load_instruction_at は安全ではなく、Sysvarリソースのアドレスはチェックされません。代わりに、load_instruction_at_checkedが推奨されます。

7. 私たちの考え

  • 開発者は、使用する外部関数をよく理解しておく必要があります。
  • 使用されているライブラリの重要な変更に常に注意を払ってください。ライブラリが変更された場合、そのライブラリを使用しているコードも変更する必要がある場合があります。
  • ライブラリのメンテナーは、指定された変更による潜在的なリスクを認識し、コミュニティ全体にタイムリーに通知する必要があります。単に注釈を追加するだけでは機能しない場合があり、十分ではありません。
  • ライブラリとコードのバージョンが変更された場合、コントラクトコードは監査される必要があります。

BlockSecについて

BlockSecは、世界的に著名なセキュリティ専門家チームによって2021年に設立された、先駆的なブロックチェーンセキュリティ企業です。当社は、新興のWeb3世界のためのセキュリティとユーザビリティの向上に貢献し、その大規模な採用を促進することに尽力しています。この目的のために、BlockSecは、スマートコントラクトとEVMチェーンのセキュリティ監査サービス、セキュリティ開発と脅威のプロアクティブなブロックのためのPhalconプラットフォーム、資金追跡と調査のためのMetaSleuthプラットフォーム、そしてWeb3ビルダーが暗号通貨の世界を効率的にサーフィンするためのMetaSuites拡張機能を提供しています。

現在までに、当社はMetaMask、Uniswap Foundation、Compound、Forta、PancakeSwapなど300以上の著名なクライアントにサービスを提供し、Matrix Partners、Vitalbridge Capital、Fenbushi Capitalなどの有力な投資家から2回の資金調達ラウンドで数千万米ドルを受け取っています。

公式ウェブサイト:https://blocksec.com/

公式Twitterアカウント:https://twitter.com/BlockSecTeam

Sign up for the latest updates
Tether Freezes $6.76M USDT Linked to Iran's IRGC & Houthi Forces: Why On-Chain Compliance is Now a Geopolitical Battlefield
Security Insights

Tether Freezes $6.76M USDT Linked to Iran's IRGC & Houthi Forces: Why On-Chain Compliance is Now a Geopolitical Battlefield

Looking ahead, targeted freezing events like this $6.76M USDT action will only become more common. On-chain data analysis is improving. Stablecoin issuers are also working closely with regulators. As a result, hidden illicit financial networks will be exposed.

Weekly Web3 Security Incident Roundup | Mar 2 – Mar 8, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Mar 2 – Mar 8, 2026

During the week of March 2 to March 8, 2026, seven blockchain security incidents were reported with total losses of ~$3.25M. The incidents occurred across Base, BNB Chain, and Ethereum, exposing critical vulnerabilities in smart contract business logic, token deflationary mechanics, and asset price manipulation. The primary causes included a double-minting logic flaw during full token deposits that allowed an attacker to exponentially inflate their balances through repeated burn-and-mint cycles, a price manipulation vulnerability in an AMM-based lending market where artificially inflated vault shares created divergent price anchors to incorrectly force healthy positions into liquidation, and a flawed access control implementation relying on trivially spoofed contract interfaces that enabled attackers to bypass authorization to batch-mint and dump arbitrary tokens.

Weekly Web3 Security Incident Roundup | Feb 23 – Mar 1, 2026
Security Insights

Weekly Web3 Security Incident Roundup | Feb 23 – Mar 1, 2026

During the week of February 23 to March 1, 2026, seven blockchain security incidents were reported with total losses of ~$13M. The incidents affected multiple protocols, exposing critical weaknesses in oracle design/configuration, cryptographic verification, and core business logic. The primary drivers included oracle manipulation/misconfiguration that led to the largest loss at YieldBloxDAO (~$10M), a crypto-proof verification flaw that enabled the FOOMCASH (~$2.26M) exploit, and additional token design and logic errors impacting Ploutos, LAXO, STO, HedgePay, and an unknown contract, underscoring the need for rigorous audits and continuous monitoring across all protocol layers.