
最近,關於利用 Oasis 多簽(multisig)從 MakerDao 金庫(Vault)轉移資金的「反向利用(counter exploit)」受到了廣泛關注。同時,我們收到了幾則詢問,想了解 BlockSec 是否是此次行動背後的「白帽」,因為 我們曾在 2 月 18 日參與了 Platypus 的反向利用行動並幫助其挽回了 240 萬美元。我們在此澄清:BlockSec 並未參與 Jump 事件中的任何操作。 在進行詳細分析後(感謝 Dan Smith 在 BlockWorks 上發布的出色分析),我們認為 Jump 「反向利用」所涉及的方式與 Platypus 案例有本質上的不同。
此外,根據 Oasis 的聲明,此次反向利用之所以可能發生,是由於管理員多簽訪問權限中存在漏洞

然而,根據我們的分析,此次反向利用的關鍵步驟如下:
- 禁用延遲執行(delayed execution)。此操作設計由 Service Registry 合約的擁有者執行,即 Oasis 多簽錢包。
- 更改關鍵角色的註冊合約地址,包括 AutomationBot 合約的 AUTOMATION_EXECUTOR,以及 CloseCommand 合約的 MCD_VIEW 和 MULTIPLY_PROXY_ACTIONS。這允許 Oasis 多簽錢包直接調用 AutomationBot 來執行關閉指令,而實際執行的操作則被替換為一個旨在轉移攻擊者金庫的新操作。
我們的分析表明,這些關鍵步驟並非歸因於所謂的管理員多簽訪問漏洞。
免責聲明:本部落格基於鏈上交易與公開資訊撰寫。如果您有任何問題或意見,請隨時聯繫我們:[email protected]。
整體流程
此次操作涉及多個地址。我們在以下 Google 文件中列出了其中部分地址。
https://docs.google.com/spreadsheets/d/1k0PEci8wQ16X7JT7KRq9SvhaCA2yerJcqLn6EfAoPZs/edit?usp=sharing
具體而言,Jump 反向利用的高層級思路如下。
-
攻擊者的 Maker 金庫可以由 Oasis AutomationBot 智慧合約管理,因為攻擊者啟用了 Oasis 提供的自動化買賣服務。
-
AutomationBot 僅能由擁有 AUTOMATION_EXECUTOR 角色的地址操作。該地址是 Oasis Service Registry 合約中的一項配置,可由 Oasis 多簽錢包更新。然而,Oasis Service Registry 合約的配置更新機制設有延遲執行,該機制可由 Oasis 多簽錢包禁用。
-
AutomationBot 所執行的實際合約與函數同樣可在 Oasis Service Registry 中進行配置。
因此,Oasis 多簽錢包首先禁用了 Oasis Service Registry 合約的延遲執行,並更改了 Oasis Service Registry 合約中的配置,將 AUTOMATION_EXECUTOR 角色設為自身(多簽錢包)。該更改即時生效。接著,多簽錢包調用 AutomationBot 來執行一個可以接管攻擊者 Maker 金庫(移轉與給予)的指令。由於 AutomationBot 可以管理攻擊者的金庫,整個操作便得以成功。
我們認為此過程與 Platypus 案例有本質上的不同。在 Platypus 案例中,我們發現了攻擊者合約中的漏洞並與 Platypus 分享。隨後 Platypus 利用了攻擊者的合約來轉移屬於他們自己的資金。然而,在 Jump 事件中,Oasis 多簽禁用了延遲執行機制,更新了可以徹底改變合約行為的關鍵配置,並利用 AutomationBot 的管理角色來代表攻擊者操作 Maker 金庫。
接下來,我們將詳細闡述 Jump 的整個「反向利用」過程。
詳細步驟
此操作涉及多個協議與參與方,包括 Jump、Oasis、Wormhole 攻擊者和 Maker。請注意,Maker 在此操作過程中未採取任何行動。
具體來說,攻擊者建立了 Maker 金庫(30100 和 30179),使用 ETH 作為抵押品,並從金庫中借入 DAI。攻擊者還利用了 Oasis 提供的自動化買賣服務來管理 Maker 金庫的抵押率。
為了使用 Oasis 自動化服務,必須將 Oasis 提供的名為 AutomationBot 的智慧合約新增至金庫的管理清單中。這意味著 AutomationBot 擁有對攻擊者所建 Maker 金庫的控制權。在此之後,AutomationBot 可以操縱金庫,並將其抵押品與債務轉移至由 Jump 控制的另一個金庫。這就是「反向利用」的基本過程。請注意,為了調用 AutomationBot,交易需由註冊在 ServiceRegistry 合約中作為 AUTOMATION_EXECUTOR 的地址發起。
步驟 1:將地址 04e1 加入 Oasis 多簽錢包
該交易 將地址 04e1 加入了 Oasis 多簽錢包。此錢包目前共有 12 個地址,並需四名簽署人確認。

步驟 2:禁用 Oasis Service Registry 的延遲執行
此交易 通過調用 changeRequiredDela(0) 禁用了 Oasis Service Registry 的延遲執行。請注意,Oasis Service Registry 是一個存儲關鍵配置資訊的智慧合約,將被 AutomationBot 使用。通常,關鍵操作(例如將在「反向利用」中使用的 updateNamedService)的配置更改設有延遲執行機制。通常情況下,延遲執行是為了透明度而設計的安全機制,確保關鍵資訊的更新不會即時生效,以便他人有機會進行審核。
請注意,調用 changeRequiredDelay 的執行動作受到延遲執行機制的限制(因為 reqDelay 的變更尚未生效)。


步驟 3:執行反向利用
此交易 執行了反向利用。讓我們深入了解由 BlockSec 開發的交易分析工具 Phalcon 所輸出的執行追蹤。
請注意,此交易由地址 04e1 發起,並通過 Oasis 多簽錢包執行,這意味著該操作至少由四名簽署人簽署。
步驟 3.1 禁用延遲執行
如追蹤所示,延遲時間再次設為零。這是為了應用步驟 2 中禁用延遲執行的操作。

步驟 3.2:建立兩個合約並更新服務註冊表
建立了兩個新合約,隨後將作為 MCD_VIEW 和 MULTIPLY_PROXY_ACTIONS 合約使用。
- MCD_VIEW: 0xceca8d8410797bc6c575fd8ba957708d1e85ed36
- MULTIPLY_PROXY_ACTIONS: 0xcaef24016d0fba2c1a9427371e0d79c5781b6ea8
然後,這兩個合約將被更新至 Oasis 服務註冊表合約中。

步驟 3.3:更改自動化執行者(Automation Executor)

Oasis 多簽在 ServiceRegistry 合約中被註冊為 AUTOMATION_EXECUTOR。 這是必要的步驟,因為只有擁有此角色的已註冊合約才能調用 AutomationBot 合約。


步驟 3.4:請求 AutomationBot 關閉攻擊者的金庫
關鍵過程始於 AutomationBot 的 execute 函數。涉及的具體執行函數通過參數傳遞。
為了理解整個過程,我們先看一下這個函數。

其高層邏輯是:機器人首先從金庫中提取 DAI(第 268 行),然後調用具體的指令合約以在金庫上執行操作(由 cdpId 指定)(第 274 行至第 278 行)。在此過程中,指令地址為 CloseCommand 合約。之後,需要對 isExecutionCorrect 進行檢查。
下圖顯示了 CloseCommand 合約的 execute 函數。它從服務註冊表合約中使用 KEY MULTIPLY_PROXY_ACTIONS 獲取實際的執行合約地址。請注意,對應於 MULTIPLY_PROXY_ACTIONS 的合約地址已被更新為一個新地址。因此,CloseCommand 的實際執行行為可在新合約中進行任意操控。


請記住,isExecutionCorrect 是在 CloseCommand 上調用的,用於檢查執行是否成功(AutomationBot.sol 第 278 行)。由於查看地址已更新,viewerContract.getVaultInfo(cdpId) 的返回值可以是通過 CloseCommand.sol 第 24 行檢查的任意值。
在遍歷程式碼後,讓我們查看執行追蹤。從追蹤中我們可以看到,automationBot 調用了 CloseCommand 合約。CloseCommand 合約可以調用被替換的 MULTIPLY_PROXY_ACTIONS 合約來開啟一個新金庫(30231),將金庫 30100(攻擊者的)轉移至 30231(新建立的),並將新金庫 30231 給予 Oasis 多簽錢包。類似的操作也在攻擊者的另一個金庫(30179)上執行。

步驟 3.5 恢復狀態

恢復服務註冊表中的已更改條目,並再次啟用延遲執行。
步驟 3.6 將金庫給予地址 1536
現在,新金庫(30231 和 30232)由 Oasis 多簽錢包控制。隨後,這些金庫在這些交易中被給予了 0x15364305a06ba3ac6ba13dfe97ca0bad639adf41 [TX1 TX2]。接著,該地址可以償還金庫中的債務並取回抵押品(以太幣)。由於抵押率很高(金庫 30100 約為 293%),償還債務並取回抵押品可以取回約 12 萬以太幣,同時只需支付金庫 30100 約 7600 萬美元的債務。讀者可參考 Maker 協議文檔以獲取有關這些操作的更多資訊。

關於 BlockSec
BlockSec 是一家開創性的區塊鏈安全公司,由一群全球傑出的安全專家於 2021 年創立。公司致力於提升新興 Web3 世界的安全性和可用性,以促進其大規模採用。為此,BlockSec 提供智慧合約與 EVM 鏈 安全審計 服務、用於安全開發與主動阻斷威脅的 Phalcon 平台、用於資金追蹤與調查的 MetaSleuth 平台,以及協助 Web3 開發者在加密世界高效衝浪的 MetaSuites 擴充功能。
迄今為止,公司已服務了超過 300 家知名客戶,如 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap,並獲得包括 Matrix Partners、Vitalbridge Capital 和 Fenbushi Capital 在內的頂尖投資者兩輪數千萬美元的融資。
官方 Twitter 帳號:https://twitter.com/BlockSecTeam



