EIP-7702賦予了地址類似智能合約的能力和靈活性,越來越多的7702應用正在不斷被創造出來,這對讓更多的人進入Web3和提高用戶體驗至關重要。

然而,7702的靈活性以及大多數用戶對7702還不熟悉的現狀正在被欺詐團伙利用,近期我們觀測到有用戶就因爲 Metamask 7702 批量執行的能力而導致原本需要授權十幾次的交互,被釣魚團伙 #InfernoDrainer 合併成一筆交易完成,導致資產被盜。

說明:Metamask 本身沒有安全問題,Metamask在爲用戶提供7702相關能力時是把用戶安全放在第一位的,並且做了很多安全措施。用戶需要對7702的能力和相關風險瞭解更多,以防止此類安全事件再次發生。

一、Metamask 7702 Delagator簽名授權原理與安全設計

1. 技術分析

  • 由用戶授權已部署的Delegator Contract,將用戶賬戶的code字段指向該合約。當前MetaMask官方Delegator Contract地址:0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B

  • 授權結構:(chainId, delegatorAddress, nonce, signature)寫入authorization_list

  • 簽名方式:Metamask底層對EIP-7702相關的授權交易採用統一的簽名邏輯,即signEIP7702Authorization方法,對授權數據digest7702 = keccak256(0x05 ‖ RLP(chainId, delegator, nonce))進行 ECDSA 簽名,生成(v, r, s)簽名結構,並附加到隨後的 Type-4 交易中,實現賬戶的授權與升級,具體實現見:https://github.com/MetaMask/eth-sig-util/blob/main/src/sign-eip7702-authorization.ts

  • 驗證方式:共識層通過ecrecover(digest7702, sig) == tx.from完成驗證。

  • 安全設計:網頁端無法誘導用戶對任意的Delegator進行授權,因爲signEIP7702Authorization方法僅在 MetaMask 錢包內部實現,不通過 window.ethereum對網頁端開放調用**。**網頁可訪問的簽名方法如 eth_signTypedData_v4並不適用於 EIP-7702 授權簽名,其簽名摘要格式如下:

而 EIP-7702 規範要求的簽名格式爲:

由於 eth_signTypedData_v4固定包含 0x1901前綴,且摘要計算過程與 7702 完全不同,因此即使構造巧妙的 domainSeparator、primaryType和 message,也幾乎不可能使得 digest712 == digest7702。

因此,網頁端無法通過該方法僞造合法的 7702 授權簽名。此外,MetaMask 還對 Delegator 地址實行白名單機制,默認且僅允許授權官方 Delegator(0x63c0...32B),禁止 DApp 自行注入地址,進一步防止用戶被誘導簽名惡意 Delegator 授權數據。

2. 使用方法

當前在 Metamask 中,將現有 EOA 升級爲7702智能賬戶(Smart Account)的方式主要分爲兩類:主動升級與被動升級。

主動升級是指用戶在錢包界面主動點擊“切換”按鈕,授權特定的 Delegator Contract。

被動升級則發生在用戶與某些支持 7702 的 DApp 交互時,Metamask 檢測到相關操作後會自動彈出提示,建議用戶完成升級。

2.1 主動升級:

  • 交易內容:僅包括升級改賬戶的動作,即授權特定的Delegator Contract。

  • 升級流程:進入錢包的賬戶詳情界面,點擊下圖中的切換按鈕,即可將用戶在Ethereum Mainnet升級爲智能賬戶。點擊切換之後,出現用戶簽名當前升級交易窗口:

  • 授權記錄:確認後,等待交易上鍊,上鍊成功意味着用戶成功升級爲智能賬戶,可以從etherscan上當前錢包地址的頁面中的**Authorizations (EIP-7702)**查看具體的授權交易信息。

2.2 被動升級

  • 交易內容:包括升級賬戶的動作以及與鏈上合約交互的批量動作。

  • 升級流程:在用戶與鏈上某些DApp交互時,Metamask會主動提示用戶當前交易可以通過升級成智能賬戶使用批量發送的方式來完成.例如在Uniswap上進行某些token的swap,點擊Use smart account 按鈕,升級成智能賬戶,之後代幣授權和Swap將在一筆交易中批量完成。

2.3 切換回普通EOA

無論採用主動升級還是被動升級的方式將當前賬戶轉換爲智能賬戶,其綁定的 Delegator Contract 地址都會永久存儲在鏈上,作爲賬戶當前的執行邏輯。

若用戶希望將賬戶恢復爲普通 EOA,需要手動發起一次“切換回 EOA”的操作。該操作的本質是:通過一次 EIP-7702 授權,將address(0)作爲新的 Delegator 合約地址提交。當該交易成功上鍊後,賬戶的code字段將被清空,執行邏輯恢復爲默認的空代碼,賬戶即回退爲普通 EOA 狀態。

進入錢包的賬戶詳情界面,點擊切換按鈕,即可將用戶在Ethereum Mainnet切換回普通EOA賬戶。

點擊確認後,等待交易上鍊,上鍊成功意味着用戶已經從智能賬戶切換回了普通的EOA賬戶,具體的交易信息同樣可以在etherscan上當前錢包地址頁面中找到。

二、7702 釣魚攻擊實例

5月24日,#InfernoDrainer 釣魚團伙利用 Metamask 7702-Delagator 合約的批量執行功能批量騙取了用戶(0xc6D2…06DC)的代幣授權,並實施了釣魚攻擊,損失超14.6萬美元的 $HashAI $HUMANS $ParallelAI $NeuralAI $DSync $Zero1 $NodeAI $Sensay $Virtual.

  • 欺詐地址

0x0000db5c8B030ae20308ac975898E09741e70000 0x00008C22F9F6f3101533f520e229BbB54Be90000 0xa85d90B8Febc092E11E75Bf8F93a7090E2ed04DE 0xC83De81A2aa92640D8d68ddf3Fc6b4B853D77359 0x33dAD2bbb03Dca73a3d92FC2413A1F8D09c34181

  • 釣魚交易示例

https://etherscan.io/tx/0x09c264618e93983510aaeb7aa2c91c8254a8b2ec66167438f3f6c28b866b6eba

  • 被釣魚原因

用戶(0xc6D2…06DC)執行了惡意批量授權交易:

Ethereum Transaction Hash: 0x1ddc8cecbc... | Etherscan

Call 0xe9ae5c53 Method By 0xc6D289d5...0d2E606DC on 0xc6D289d5...0d2E606DC | Success | May-23-2025 02:31:35 PM (UTC)

etherscan.io

  • #InfernoDrainer 和 #PinkDrainer 正在實驗更隱蔽、影響更大的利用7702的釣魚黑色產業鏈。

根據我們的研究,目前釣魚黑產團伙 #InfernoDrainer 和 #PinkDrainer 都正在研究並實驗更隱蔽、影響更大的利用7702的釣魚黑色產業鏈,相關地址如下,我們也將在後續公佈更詳細的報告:

Inferno Drainer:

0x0000db5c8B030ae20308ac975898E09741e70000

Pink Drainer:

0xe49e04F40C272F405eCB9a668a73EEAD4b3B5624

三、安全建議

錢包提供商:

  • 參考Metamask對於7702 Delegator的實現和安全管理,禁止用戶對任意的Delegator授權,並且只允許應用內操作。提醒用戶任何通過網頁讓用戶進行簽名授權的行爲都是釣魚攻擊。

  • 檢查鏈是否與當前網絡匹配,並提醒用戶使用 chainID 爲 0 簽名時存在重放風險。

  • 在用戶簽名授權時顯示目標合約,在用戶通過Delegator進行批量執行時顯示具體的函數調用內容,降低網絡釣魚攻擊的風險。

用戶:

  • 私鑰保護始終是最重要的。Not your keys, not your coins.

  • 不要根據任何獨立的網頁進行Delegator授權,安全的授權通常只會像Metamask一樣在應用內進行。

  • 在使用任何錢包進行簽名時,請仔細看清簽名內容,避免盲籤或誤籤。