malicious ゲーム
0post
2025.12.16 19:00
:0% :0% ( - / - )
人気のポスト ※表示されているRP数は特定時点のものです
📚ブリッジの任意呼び出し悪用の仕組み
✅ 概要
この記事ではブロックチェーンブリッジにおける任意コール実行(contract call)の脆弱性がどのように悪用されるかを、実際のテストコードを用いた具体例で解説されています。
攻撃者が「一見無害に見えるトランザクション」を先に送信し、その裏で「本当に実行したい悪意のあるトランザクション」をブリッジ内部に仕込むことで、ETHを奪われたり、ERC20トークンが不正にミントされてしまう流れが説明されています。
✅ 任意コール実行とは何か
任意コール実行とは、ブリッジのようなコントラクトが、渡されたトランザクション内容をそのまま外部アドレスへcallする機能を持っている状態のことです。
ブリッジが「誰がどこに対して何を実行しているのか」を十分に制限していない場合、攻撃者は「任意のアドレスへのcall」を実行できてしまいます。
本来ブリッジは、チェーン間でメッセージを安全に同期するための仕組みですが、このcallが自由すぎることで「攻撃者が好きなタイミングで好きな処理を実行する」ことが可能になります。
✅ 仕組みの鍵となる二段階実行
悪用のコアとなるのは「二段階でメッセージを実行させる」という手口です。
1回目のexecuteMessageでは、攻撃者は「無害に見えるトランザクション」を実行します。
しかしその実態はsignalProcessorに対して「悪意のあるトランザクションのハッシュを保存させる」という処理を行っており、ブリッジ側はそのハッシュを正当なメッセージだと誤解してしまいます。
2回目のexecuteMessageで、攻撃者は「本当に実行したい悪意のあるトランザクション」を実行します。
なぜ検証をすり抜けるかというと、1回目にsignalProcessorへ保存した「攻撃者の都合の良いメッセージハッシュ」が正しいものとして扱われるためです。
✅ ETHを盗む攻撃の流れ
攻撃者はまず「1 ETHを指定アドレスに送るトランザクション」をmaliciousTransactionとして作ります。
しかし最初のexecuteMessageではこのトランザクションを直接実行しません。
代わりに、signalProcessorに「この悪意のトランザクションのハッシュを保存してね」という命令を送ります。
この「保存だけさせる」行為によって、ブリッジは「この悪意トランザクションは正しいものだ」と誤認します。
次に攻撃者は再度executeMessageを呼び、今度はmaliciousTransactionそのものを送ります。
するとブリッジはチェックを通してしまい、ユーザーアドレスに1 ETHを送金します。
しかし実際には攻撃者は元チェーンで1 ETHを送金していないため、完全な不正送金が成立します。
✅ ERC20を不正ミントする攻撃の流れ
こちらも同じ構造ですが、maliciousTransactionの内容が「mint(address,uint256)」である点が違います。
1回目のexecuteMessageでsignalProcessorにハッシュを保存させます。
2回目でmintを実行しますが、sendMsg時にburn(ブリッジtransfer前に元チェーンでトークンをBurnする処理)が行われていません。
Burnされていないにもかかわらず、ブリッジ側は正常な転送だと勘違いしmintを実行します。
結果、攻撃者は元のチェーンで何も失っていないのに、9999 ether分のERC20トークンを新しく得ることができます。
✅ 何が問題か
問題の本質は「ブリッジが任意のアドレスに対してcallを実行できる設計」であり、さらに「そのアドレス(signalProcessor)がメッセージの正当性判断に影響する」ためです。
・信頼できるアドレス以外にcallできないようにする
・call先アドレスが正規の処理を行うか厳しく検証する
・任意コールを許す関数そのものを設計から排除する
上記のような対策が重要になります。 December 12, 2025
1RP
<ポストの表示について>
本サイトではXの利用規約に沿ってポストを表示させていただいております。ポストの非表示を希望される方はこちらのお問い合わせフォームまでご連絡下さい。こちらのデータはAPIでも販売しております。



