Back to Blog

Jumpの「カウンターエクスプロイト」に関するBlockSecの見解:脆弱性は本当に存在するのか?

Code Auditing
March 1, 2023
7 min read

最近、Oasisのマルチシグを使用してMakerDao Vaultから資金を移動させる「カウンターエクスプロイト」が大きな注目を集めています。その中で、2月18日にPlatypusを支援して240万ドルを救済したカウンターエクスプロイトにBlockSecが関与していたことから、BlockSecがこの操作の背後にある「ホワイトハット」ではないかという問い合わせがいくつか寄せられました。***BlockSecはJumpの件におけるいかなる行動にも関与していないことを明確にしたいと考えています。***詳細な分析(Dan Smith氏によるBlockWorksでの素晴らしい分析に感謝)の後、Jumpの「カウンターエクスプロイト」への関与方法は、Platypusのケースとは根本的に異なると考えています。

さらに、Oasisの声明によれば、カウンターエクスプロイトは管理マルチシグアクセスにおける脆弱性により可能になったとのことです。

Oasisの声明からのスクリーンショット
Oasisの声明からのスクリーンショット

しかし、我々の分析によると、カウンターエクスプロイトの主要なステップは以下の通りです:

  • 遅延実行を無効化する。これはService Registryコントラクトのオーナー、つまりOasisマルチシグウォレットによって実行されるように設計されています。
  • AutomationBotコントラクトのAUTOMATION_EXECUTORやCloseCommandコントラクトのMCD_VIEW、MULTIPLY_PROXY_ACTIONSなど、重要なロールの登録済みコントラクトアドレスを変更する。これにより、OasisマルチシグウォレットはAutomationBotを直接呼び出し、ExploiterのVaultをシフトするために実行される実際の操作を新しいものに置き換えることができます。

我々の分析では、これらの主要なステップは、管理マルチシグアクセスにおける主張された脆弱性によるものではないことを示唆しています。

免責事項:このブログは、オンチェーントランザクションと公開情報に基づいて作成されています。ご質問やご意見がありましたら、[email protected]までお気軽にお問い合わせください。

全体プロセス

この操作には複数のアドレスが関与しました。それらのいくつかを以下のGoogleドキュメントにリストアップします。

https://docs.google.com/spreadsheets/d/1k0PEci8wQ16X7JT7KRq9SvhaCA2yerJcqLn6EfAoPZs/edit?usp=sharing

具体的には、Jumpのカウンターエクスプロイトのハイレベルなアイデアは以下の通りです。

  1. ExploiterのMaker Vaultは、ExploiterがOasisが提供する自動売買サービスを有効にしているため、Oasis AutomationBotスマートコントラクトによって管理されます。
  2. AutomationBotは、Oasis Service Registryコントラクトの設定であるAUTOMATION_EXECUTORロールを持つアドレスによってのみ操作できます。このアドレスはOasisマルチシグウォレットによって更新できます。しかし、Oasis Service Registryコントラクトの設定の更新には遅延実行メカニズムがあり、Oasisマルチシグウォレットによって無効化できます。
  3. AutomationBotによって実行される実際のコントラクトと関数も、Oasis Service Registryで設定可能です。

したがって、OasisマルチシグウォレットはまずOasis Service Registryコントラクトの遅延実行を無効化し、Oasis Service Registryコントラクトの設定を変更して、AUTOMATION_EXECUTORロールを自身(マルチシグウォレット)に設定します。この変更は即座に有効になります。その後、マルチシグウォレットはAutomationBotを呼び出し、ExploiterのMaker Vaultを乗っ取ることができるコマンド(シフトおよび譲渡)を実行します。AutomationBotはExploiterのVaultを管理できるため、操作全体が成功します。

このプロセスは、我々が攻撃者のコントラクトの脆弱性を発見し、Platypusと共有したPlatypusのケースとは根本的に異なると考えています。その後、Platypusは攻撃者のコントラクトを悪用して、自身の資金を移動させました。しかし、Jumpのケースでは、Oasisマルチシグは遅延実行メカニズムを無効化し、コントラクトの動作を完全に変更できる重要な設定を更新し、AutomationBotの管理ロールを利用してExploiterの代わりにMaker Vaultを操作しました。

以下では、Jumpの「カウンターエクスプロイト」の全体像を詳しく説明します。

詳細なステップ

この操作にはJump、Oasis、Wormhole Exploiter、Makerなど、複数のプロトコルと当事者が関与しています。Makerはこの操作中にいかなる行動も取っていないことに注意してください。

具体的には、ExploiterはMaker Vault(30100および30179)を作成し、ETHを担保として使用し、VaultからDAIを借入します。Exploiterはまた、Oasisが提供する自動売買サービスを利用して、Maker Vaultの担保化率を管理します。

Oasisの自動化サービスを使用するためには、Oasisが提供するAutomationBotというスマートコントラクトを、Vaultの管理リストに追加する必要があります。これは、AutomationBotがExploiterによって作成されたMaker Vaultを制御できることを意味します。その後、AutomationBotはVaultを操作し、Vaultの担保と借入金をJumpが制御する別のVaultに移すことができます。これが「カウンターエクスプロイト」の基本的なプロセスです。AutomationBotを呼び出すためには、トランザクションはServiceRegistryコントラクトにAUTOMATION_EXECUTORとして登録されているアドレスから起動される必要があることに注意してください。

ステップ1:アドレス04e1をOasisマルチシグウォレットに追加

このトランザクションは、アドレス04e1をOasisマルチシグウォレットに追加します。このウォレットには現在12のアドレスがあり、4つの署名者の確認が必要です。

Oasisマルチシグウォレットのスクリーンショット
Oasisマルチシグウォレットのスクリーンショット

ステップ2:Oasis Service Registryの遅延実行を無効化

このトランザクションは、changeRequiredDela(0)を呼び出すことによって、Oasis Service Registryの遅延実行を無効化します。Oasis Service Registryは、AutomationBotによって使用される重要な設定情報が保存されているスマートコントラクトです。「カウンターエクスプロイト」で使用されるupdateNamedServiceなどの重要な操作には、通常、遅延実行メカニズムがあります。通常、遅延実行は透明性のためのセキュリティメカニズムであり、重要な情報の更新が即座に有効にならないようにし、他の人が再確認できるようにします。

なお、changeRequiredDelayを呼び出す実行は、change to reqDelayがまだ有効になっていないため、遅延実行によって制限されています。

ServiceRegistry.solのスクリーンショット
ServiceRegistry.solのスクリーンショット
ServiceRegistry.solのスクリーンショット
ServiceRegistry.solのスクリーンショット

ステップ3:カウンターエクスプロイトを実行

このトランザクションは、カウンターエクスプロイトを実行します。BlockSecが開発したトランザクション分析ツールであるPhalconによって出力された実行トレースを見てみましょう。

このトランザクションはアドレス04e1から初期化され、Oasisマルチシグウォレットを介して実行されることに注意してください。これは、操作が少なくとも4つの署名者によって署名されていることを意味します。

ステップ3.1:遅延実行を無効化

トレースに示すように、遅延は再びゼロに設定されます。これは、ステップ2の遅延実行無効化のアクションを適用するためです。

実行トレースのスクリーンショット
実行トレースのスクリーンショット

ステップ3.2:2つのコントラクトを作成し、サービスレジストリを更新

MCD_VIEWおよびMULTIPLY_PROXY_ACTIONSコントラクトとして使用される2つの新しいコントラクトが作成されます。

  • MCD_VIEW: 0xceca8d8410797bc6c575fd8ba957708d1e85ed36
  • MULTIPLY_PROXY_ACTIONS: 0xcaef24016d0fba2c1a9427371e0d79c5781b6ea8

その後、これらの2つのコントラクトはOasisサービスレジストリコントラクトに更新されます。

サービスレジストリ更新のスクリーンショット
サービスレジストリ更新のスクリーンショット

ステップ3.3:Automation Executorを変更

Automation Executor変更のスクリーンショット
Automation Executor変更のスクリーンショット

OasisマルチシグがServiceRegistryコントラクトにAUTOMATION_EXECUTORとして登録されます。これは、このロールを持つ登録済みコントラクトのみがAutomationBotコントラクトを呼び出すことができるため、必要です。

AutomationBot.solのスクリーンショット
AutomationBot.solのスクリーンショット
AutomationBot.solのスクリーンショット
AutomationBot.solのスクリーンショット

ステップ3.4:AutomationBotにExploiterのVaultをクローズするように要求

重要なプロセスは、AutomationBotのexecute関数から始まります。詳細な実行関数は引数で渡されます。

プロセス全体を理解するために、まずこの関数を見てみましょう。

AutomationBot.solのスクリーンショット
AutomationBot.solのスクリーンショット

ハイレベルなロジックは、ボットがまずVaultからDAIを引き出し(268行目)、次にVault(cdpIdで指定)に対して実行される具体的なコマンドコントラクトを呼び出す(274行目から278行目)というものです。このプロセス中、コマンドアドレスはCloseCommandコントラクトです。その後、isExecutionCorrectのチェックが必要です。

以下は、CloseCommandコントラクトのexecute関数を示しています。これは、Service RegistryコントラクトからKEY MULTIPLY_PROXY_ACTIONSを使用して実際のexecutorコントラクトアドレスを取得します。MULTIPLY_PROXY_ACTIONSに対応するコントラクトアドレスは新しいものに更新されていることに注意してください。そのため、CloseCommandの実際の実行は、新しいコントラクトで任意の操作を実行できるように制御可能です。

CloseCommand.solのスクリーンショット
CloseCommand.solのスクリーンショット
CloseCommand.solのスクリーンショット
CloseCommand.solのスクリーンショット

isExecutionCorrectがCloseCommandで呼び出され、実行が成功したかどうかを確認すること(AutomationBot.solの278行目)を覚えておいてください。ビューアドレスが更新されているため、viewerContract.getVaultInfo(cdpId)の戻り値は、24行目(CloseCommand.sol)のチェックを通過できる任意の値を返すことができます。

コードをすべて確認した後、実行トレースを見てみましょう。トレースから、automationBotがCloseCommandコントラクトを呼び出していることがわかります。CloseCommandコントラクトは、置き換えられたMULTIPLY_PROXY_ACTIONSコントラクトを呼び出して新しいVault(30231)を作成し、Vault 30100(Exploiterのもの)を30231(新しく作成されたもの)にシフトし、新しいVault 30231をOasisマルチシグウォレットに譲渡します。Exploiterのもう一方のVault(30179)でも同様の操作が行われます。

実行トレースのスクリーンショット
実行トレースのスクリーンショット

ステップ3.5:状態を復元

状態復元のスクリーンショット
状態復元のスクリーンショット

Service Registryで変更されたエントリを復元し、遅延実行を再度有効化します。

ステップ3.6:Vaultをアドレス1536に譲渡

これで、新しいVault(30231および30232)はOasisマルチシグウォレットによって制御されます。その後、これらのトランザクション [TX1 TX2] でVaultは0x15364305a06ba3ac6ba13dfe97ca0bad639adf41に譲渡されます。その後、このアドレスはVaultの借入金を支払い、担保(Ethereum)を引き出すことができます。担保化率は高い(Vault 30100で約293%)ため、担保の返済と引き出しにより、約7600万の借入金の支払いをコストとして、約12万ETHを取り戻すことができます。これらの操作に関する詳細については、Makerプロトコルのドキュメントを参照してください。

Vault譲渡のスクリーンショット
Vault譲渡のスクリーンショット

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
~$15.9M Lost: Trusted Volumes & More | BlockSec Weekly
Security Insights

~$15.9M Lost: Trusted Volumes & More | BlockSec Weekly

This BlockSec bi-weekly security report covers 11 notable attack incidents identified between April 27 and May 10, 2026, across Sui, Ethereum, BNB Chain, Base, Blast, and Berachain, with total estimated losses of approximately $15.9M. Three incidents are analyzed in detail: the highlighted $1.14M Aftermath Finance exploit on Sui, where a signed/unsigned semantic mismatch in the builder-fee validation allowed an attacker to inject a negative fee that was converted into positive collateral during settlement; the $5.87M Trusted Volumes RFQ authorization mismatch on Ethereum; and the $5.7M Wasabi Protocol infrastructure-to-contract-control compromise across multiple EVM chains.

Newsletter - April 2026
Security Insights

Newsletter - April 2026

In April 2026, the DeFi ecosystem experienced three major security incidents. KelpDAO lost ~$290M due to an insecure 1-of-1 DVN bridge configuration exploited via RPC infrastructure compromise, Drift Protocol suffered ~$285M from a multisig governance takeover leveraging Solana's durable nonce mechanism, and Rhea Finance incurred ~$18.4M following a business logic flaw in its margin-trading module that allowed circular swap path manipulatio

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly
Security Insights

~$7.04M Lost: GiddyDefi, Volo Vault & More | BlockSec Weekly

This BlockSec weekly security report covers eight attack incidents detected between April 20 and April 26, 2026, across Ethereum, Avalanche, Sui, Base, HyperLiquid, and MegaETH, with total estimated losses of approximately $7.04M. The highlighted incident is the $1.3M GiddyDefi exploit, where the attacker did not break any cryptography or use a flash loan but simply replayed an existing on-chain EIP-712 signature with the unsigned `aggregator` and `fromToken` fields swapped out for a malicious contract, demonstrating how partial signature coverage turns any historical signature into a generic permit. Other incidents include a $3.5M Volo Vault operator key compromise on Sui, a $1.5M Purrlend privileged-role takeover, a $413K SingularityFinance oracle misconfiguration, a $142.7K Scallop cross-pool index injection, a $72.35K Kipseli Router decimal mismatch, a $50.7K REVLoans (Juicebox) accounting pollution, and a $64K Custom Rebalancer arbitrary-call exploit.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit