排名第一的 7702 委托合约被揭露为网络钓鱼骗局

本文分析了以太坊 Pectra 升级中 EIP-7702 带来的新安全风险,重点关注了钓鱼合约的风险。同时,分析了 MetaMask 和 OKX 钱包对 EIP-7702 的支持,包括产品功能和源代码,特别是批量交易和 gas 赞助。最后,强调了 EIP-7702 在保护用户资产安全方面的重要性,并展望了其在用户体验方面的应用前景。

作者: GoPlus Security

Pectra 是以太坊的一次重大升级,集成了历史上最多的 EIP ——总共 11 个——极大地增强了验证者的灵活性、网络可扩展性和执行效率。随着以太坊主网 Pectra 硬分叉预计将于 2025 年 5 月 7 日激活,账户抽象的“终极形式”——EIP-7702——已正式可以使用!

引用 OKX 研究院的话:“如果任何基于 EVM 的 Web3 钱包不支持 EIP-7702,那么它实际上就放弃了整个以太坊生态系统及其用户。” 这充分说明了 EIP-7702 的重要性。

自从 5 月 7 日 Pectra 激活以来,出现了哪些新的安全风险,主流 Web3 钱包又实现了哪些与 EIP-7702 相关的功能?这些功能是如何工作的?让我们与 GoPlus 一起深入探讨。

排名靠前的 7702 Delegator(委托合约) 竟然是一个网络钓鱼合约

根据 https://www.bundlebear.com/eip7702-authorized-contracts/all 的链上监控,数万个地址已经启用了智能账户功能。以下是前 10 名的 7702 Delegator:

然而,我们震惊地发现,在 ETH 上,授权排名靠前的Delegator地址——0x930fcc37d6042c79211ee18a02857cb1fd7f0d0b——是恶意的。

通过反编译合约代码,我们发现一旦用户授权了这个地址,任何转移到该地址的 ETH 都会自动重定向到欺诈地址:0x000085bad5b016e5448a530cb3d4840d2cfd15bc

重要安全提示:利用 EIP-7702 的炒作,创建恶意 Delegate 合约并通过网络钓鱼诱使用户授权的风险可能会首先激增。

GoPlus 提醒你:7702 授权通常发生在钱包应用或插件中。如果你被提示通过电子邮件或 URL 授权 7702,通常很危险——请谨慎操作。此外,在授权之前,你可以通过区块链浏览器检查合约是否开源。如果合约不是开源的,请格外警惕。

MetaMask 7702 产品功能和源代码分析

产品功能

MetaMask 现在支持 EIP-7702。通过 MetaMask 发送 7702 交易有两种方式:

  1. 通过前端界面:详情请见 https://learnblockchain.cn/article/17291/

当你的钱包与 7702 支持的网络上的 DApp 交互时,MetaMask 会主动提示你切换到 7702 智能钱包。你也可以手动取消并恢复到非智能钱包状态。

  1. 使用第三方库:详情请见 https://docs.metamask.io/wallet/how-to/send-transactions/send-batch-transactions/#use-third-party-libraries

重要安全提示:MetaMask 还提供了一个重要警告:MetaMask 只会在钱包内提示用户切换到智能账户。如果有人要求你通过电子邮件或 URL 在 MetaMask 之外签署任何协议以“升级”或“启用”智能账户功能,那绝对是网络钓鱼诈骗——不要相信!

源代码分析

合约地址 (EIP7702StatelessDeleGator): https://etherscan.io/address/0x63c0c19a282a1B52b07dD5a65b58948A07DAE32B#code

整个合约使用无状态设计编写,所有全局变量都声明为 constant 或 immutable,以解决同一地址使用不同 Delegator 时的潜在存储冲突。

批量交易

该合约实现了批量交易功能,具有以下功能:

  • execute(ModeCode, bytes calldata): 此函数允许单笔或批量交易,并使用 onlyEntryPointOrSelf modifier 来确保调用者有效。

executeFromExecutor(ModeCode, bytes calldata): 此函数镜像 execute,但仅限于来自 DelegationManager 的调用。

这两个函数最终都会调用 ExecutionHelper.sol 合约中的 _execute 或 _tryExecute 来完成交易执行。

Gas 赞助 (Paymaster 逻辑)

在 MetaMask Delegator 合约中,gas 赞助逻辑与 ERC-4337 向后兼容,主要包括 validateUserOp 和 _payPrefund 函数:

检查存款:用户检查 EntryPoint.balanceOf(账户地址) 以确认账户在 EntryPoint 中的存款是否足以支付预计的 gas 费用。

  • 充值存款 (可选): 如果余额不足,用户可以调用 EntryPoint.depositTo 或 EIP7702DeleGatorCore.addDeposit 将 ETH 存入存款池。如果有 Paymaster 赞助,则可以跳过此步骤,因为 Paymaster 将在稍后处理充值。

  • 构建和签署 UserOperation: 前端填写字段 (sender, callData, nonce, paymasterAndData 等),账户的离线签名逻辑 (_isValidSignature) 生成 userOp.signature。

  • 广播 UserOperation: 完整的 UserOperation 通过 eth_sendUserOperation(userOp, entryPoint) 提交给任何 Bundler。

  • Bundler 打包并支付 Gas: Bundler 收集多个 UserOp 并调用 EntryPoint.handleOps(ops, beneficiary),预先支付链上 gas 费用。

  • EntryPoint 预检查和预付款:

  1. 计算 requiredPreFund → 确定 _missingAccountFunds。

  2. 调用账户的 validateUserOp():

    • 验证签名 (_validateUserOpSignature)。

    • _payPrefund(_missingAccountFunds): 如果存款不足,账户会立即将差额转移到 EntryPoint。

  3. 如果 paymasterAndData 不为空,则调用 Paymaster 的 validatePaymasterUserOp() 进行赞助。

    • 执行业务逻辑: 验证后,EntryPoint.executeUserOp() 基于 callData 执行账户的逻辑 (例如,execute(), redeemDelegations() 等)。
  • Gas 结算: EntryPoint 计算实际消耗的 gas × effectiveGasPrice,并从账户或 Paymaster 的存款中扣除。结算的 ETH 支付给受益人 (Bundler 指定的地址)。

以上是 MetaMask 与 ERC-4337 兼容的 gas 赞助实现。如果不需要与 ERC-4337 向后兼容,则基于 EIP-7702 的 gas 赞助逻辑会更清晰、更简单,如下所示:

一般流程涉及“交易执行账户”离线签署交易,并将签名委托给“交易发送账户”。“交易发送账户”将交易内容和签名提交给 Delegator 合约,合约在链上验证签名。如果签名通过,则执行交易;否则,交易回滚。

  1. 构建交易内容。

  1. “交易执行账户”生成签名。

  1. “交易发送账户”使用交易内容和签名调用 Delegator 合约。

  1. Delegator 合约验证签名并执行交易。

源代码参考: https://book.getfoundry.sh/cheatcodes/sign-delegation

OKX 钱包产品功能和源代码分析

产品功能

OKX 现在支持 EIP-7702。要通过 OKX 钱包发送 7702 交易,你可以使用最新版本的钱包插件或应用升级到 7702。点击“升级”将默认调用官方 OKX 钱包核心合约,函数选择器对应于 initialize() 函数。

源代码分析 合约地址 (WalletCore): https://etherscan.io/address/0x80296ff8d1ed46f8e3c7992664d13b833504c2bb#code

OKX 钱包核心为每个用户创建一个外部 Storage 合约来存储状态变量,从而解决同一地址使用不同 Delegator 时的潜在存储冲突。

批量交易

该合约实现了批量交易功能,具有以下功能:

  • executeFromSelf: 只能由地址本身调用,不需要外部签名验证。

  • executeWithValidator: 只能由 Validator 合约调用,通过签名验证授权批量执行多笔交易。

  • executeFromExecutor: 根据会话机制授权执行,允许预先授权的 Session 执行者执行,支持在操作前后触发 Hook 插件。

    以上所有函数最终都会调用 _batchCall 函数来执行交易。

    EIP-7702 如何更好地保护用户资产安全

    EIP-7702 升级赋予了地址更大的灵活性和业务能力。从我们对主流钱包源代码的分析中,我们看到批量交易和 gas 赞助现在得到了广泛支持。7702 与业务应用的集成才刚刚开始,未来将会出现更多的应用,这对于改善用户体验至关重要。

    从用户安全的角度来看,EIP-7702 升级同样重要,为安全性提供了新的可能性。例如,当 Delegator 批量处理交易数据 (Excution[] calldata) 时,我们可以实施精确的风险控制规则,允许用户配置自定义授权管理、自定义黑名单/白名单,并设置交易期间转账的 token 类型和金额限制,从而实现强大的交易风险控制。

    我们期待 EIP-7702 的采用和普及,使用户的资产能够更安全、更高效地流动!


  • 原文链接: defihacklabs.substack.co...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
defihacklabs
defihacklabs
江湖只有他的大名,没有他的介绍。