EIP-7702 深入分析:它不是漏洞,而是被“签名能力”武器化的账户委托机制
小C学安全
小C学安全
FreeSec安全实验室
2026年11月6日 09:46
美国
去阅读
在币安2026年10月29-30日约63.4亿美元热钱包被盗事件中,以太坊部分资产的核心执行路径依赖了 EIP-7702。它并非协议漏洞,而是Pectra升级(2025年5月)引入的正常功能,被攻击者在获得“按需签名”能力后精准滥用。下面从机制、攻击细节、为何需要50个授权、以及安全启示四个层面深入拆解。
1. EIP-7702 到底是什么?
EIP-7702(Set Code for EOAs)允许普通外部账户(EOA,即传统私钥控制的地址)临时把自己的代码“指向”某个智能合约,从而在不迁移资金、不改变地址的前提下获得智能合约能力(批量操作、Gas代付、会话密钥、自定义逻辑等)。
核心机制:
- 新增交易类型 Type-4(set code transaction)。
- 交易携带一个
authorization_list,每个授权是一个元组:
[chain_id, address(委托目标合约), nonce, y_parity, r, s] - 授权由被委托账户自身的私钥签名,签名消息为:
keccak256(0x05 || rlp([chain_id, address, nonce])) - 验证通过后,账户的code字段被写成固定的23字节委托指示器:
0xef0100 || 目标合约地址
(0xef是被EIP-3541禁用的操作码前缀,客户端将其视为指针而非可执行代码)。 - 之后任何对这个EOA的调用,都会在该EOA的上下文(余额、存储)中执行目标合约的代码。
- 撤销方式:再签一份指向零地址(
0x000…000)的授权,清除委托指示器
重要特性:
- 任何人都可以提交包含有效授权的交易(赞助Gas)。
- 授权绑定特定nonce,只有账户当前nonce匹配时才生效。
- 委托一旦上链,独立于交易所的提现系统运行。
- 委托代码对账户资金拥有完整访问权(这是设计使然,也是风险所在)。
它本身是为账户抽象(Account Abstraction)铺路的务实方案,让存量EOA也能享受智能钱包体验,而无需强制用户迁移。
2. 在币安事件中的具体用法
攻击目标是币安以太坊上最繁忙的热钱包之一——Binance 14(0x28C6c06298d514Db089934071355E5743bf21d60)。
链上执行路径(UTC时间):
- 攻击者提前部署清扫合约(sweeper,例如
0x63e8…6fae),主函数类似sweep(),只允许攻击者指定地址调用,会把目标钱包内所有列出的代币+ETH(留1 ETH作Gas)转走。 - 20:20:59,攻击者操作钱包提交一笔Type-4交易,内含50个由Binance 14密钥签名的EIP-7702授权。所有授权都指向同一个清扫合约,nonce连续覆盖
18,914,775到18,914,824。 - 链上验证:只有匹配当前nonce的那一个生效(实际命中
18,914,809)。其余49个因nonce不匹配被静默忽略。Binance 14的code被设置为0xef0100 || 清扫合约地址。 - 约3分24秒后(20:24:23),攻击者调用已被委托的Binance 14,清扫合约执行,单笔交易转出约167,464枚ETH + 16.15亿USDT + 60多种其他代币(以太坊部分约25亿美元量级)。
- 委托持续有效近4小时。期间币安自动化系统仍在向该热钱包充值,新到账资金也被反复清扫(最后一笔未授权转账约23:56)。
- 币安后来通过再签一份指向零地址的授权,清除委托(约次日00:10)。
其他链(比特币、Tron、XRP、Solana等)的资产则主要通过普通已签名转账被转走,说明攻击者掌握了跨多套签名系统的签名能力。
3. 为什么要准备50个授权?——Nonce“盲狙”的必然
这是理解攻击精妙之处的关键。
- EIP-7702授权严格绑定账户当前nonce。只有完全匹配时才生效。
- Binance 14是高频热钱包,攻击前一小时就发出约635笔交易(约每分钟10笔)。nonce持续快速递增。
- 攻击者通过被入侵的签名服务获取签名后,到广播、打包上链之间存在网络延迟与队列延迟,无法精确预知上链瞬间的nonce。
- 解决方案:一次性让签名系统产出覆盖一个合理区间(约50个连续nonce)的授权,全部塞进同一笔Type-4交易。无论nonce落在区间内哪个位置,至少有一个会命中。
这种“喷洒+碰撞”策略本身就是强证据:攻击者并没有直接持有可本地精确控制的明文私钥(否则可以直接构造精确nonce的交易,无需猜)。更符合“控制了签名接口/策略引擎,获得按需签名能力”的模型。币安官方也表示未发现私钥泄露证据,根因指向被入侵的签名服务。
4. 深层启示与风险边界
EIP-7702本身没有被“攻破”:
- 它要求有效的账户签名,协议层设计符合预期。
- 真正的突破口是前期的社工+供应链+内部AI工具横向移动,最终让攻击者获得了签名服务的控制权。
- 一旦签名能力被拿下,EIP-7702只是提供了一个高效的“把钱包变成自己的程序”的执行工具,让清扫可以在单笔交易、单区块内完成,并绕过常规提现熔断。
由此暴露的系统性问题:
- 热钱包签名服务成为单点高价值目标。MPC/HSM再强,如果策略引擎或接口被绕过,仍可产出合法签名。
- 委托是持久的、链上的,独立于业务系统。暂停提现无法自动撤销已上链的委托。
- 高频热钱包的nonce不可预测性被攻击者用批量签名对冲。
- 清扫合约可硬编码只允许攻击者调用,一旦委托生效,原所有者短期也难以直接干预。
防御方向建议:
- 对签名服务实施严格的最小权限、操作审计、异常行为熔断(尤其是大批量连续nonce的授权请求)。
- 热钱包默认禁止或强限制EIP-7702委托,或增加额外审批/时间锁。
- 实时监控账户code是否变成
0xef0100…开头,一旦出现立即告警并准备撤销流程。 - 对内部AI工具与开发终端做更严格的隔离与权限收敛。
- 用户侧:检查自己地址是否被意外委托(
eth_getCode返回以0xef0100开头即表示已委托),及时撤销。
总结一句话:
EIP-7702是把“账户可编程”的能力交给了EOA,它极大地提升了用户体验,但也把“签名即控制”的风险边界进一步前移。在签名基础设施被攻破的前提下,它成了攻击者最高效的清扫武器;真正需要加固的,是“谁有权让系统签出那份授权”。
欢迎在评论区分享你的经验。
关注 FreeSec 安全实验室,持续分享网络安全工具、技术实战与防护思路。
扫码关注
-END-
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








评论