简单来说,攻击者用了一段时间在链上公开准备,然后用一次 EIP-7702 委托把币安热钱包 Binance 14 变成自己的合约,凌晨开始清扫。到天亮时,与币安热钱包相关的地址流出约 56.43 亿美元,跨以太坊、比特币、波场和多条 L2;Tether、Circle、Ripple、World Liberty 等发行方联手冻结约 25.4 亿美元,约占流出的 45%。而截至目前,那笔恶意委托仍然没有撤销。
币安目前官方的口径始终是,正在调查潜在安全问题、用户资金完全安全。
以太坊:35.28 亿美元
比特币:14.49 亿美元
波场:6.28 亿美元
Arbitrum + Optimism + Base:合计约 3,800 万美元
Tether 约 15.67 亿 USDT、Circle 约 8.23 亿 USDC(两者合计 23.16 亿),加上 Ripple 约 2 亿 RLUSD、World Liberty Financial 约 2,780 万 USD1 + 200 万 WLFI,凑成 25.4 亿。
10 月 28 日起:攻击者发起地址 0x7C86…5CA0 陆续收到 3 笔约 0.1 ETH 的 Tornado Cash 出金,专门用来支付 Gas。这个地址此前和币安没有任何关系。
10 月 29 日 10:29: 部署第一个清扫合约 0x19be…f2bf。后面被弃用了。
10 月 29 日 21:51: 向两个测试钱包写入 EIP-7702 委托。这两个钱包都不是币安的,是攻击者自己找来的外部钱包。
10 月 29 日 22:20 和 22:24: 第 1、2 次演练,调用清扫把这两个测试钱包掏空。第一次可能出了点问题,四分钟后又来了一次。
10 月 29 日 23:59: 部署修正版合约 0x63e8…6fAe。最终在币安身上生效
10 月 30 日 00:21 至 00:30: 第 3 次演练,换第三个钱包,两次委托加一次清扫。
之后静默 3 小时 51 分。直到动手。
04:21:00: 提交 EIP-7702 类型交易,把 0x63e8…6fAe 的代码委托给 Binance 14,地址是 0x28C6…1d60。同一笔交易里塞了 50 个授权,只有 1 个命中 nonce。
04:24:23: 主清扫发生。Binance 14 自己发起调用,向 0x5227…2f8c 转出 167,464 ETH 加 63 种代币,其中含约 16.15 亿 USDT。手续费 0.0004 ETH,不到 1 美元。
04:24:47: Binance 16 向同一地址追加 28,005.6 ETH,几乎是无缝衔接。
04:30 至 04:33: 开始拆分 USDT,5 亿发往 0x9749…C762,2 亿发往 0x0Ddf…697e。
04:38: 195,460 ETH 一次性转入 0x8532…43D4。这是单笔最大的一次搬运。
04:41 和 04:59: 攻击者在 Binance 14 上调用另一个函数 0x043ff9d2;同一分钟,Hot Wallet 34 分别转出 7.8 亿 和 4,300 万 USDC。攻击者借用了 Binance 14 对该合约的权限。
05:04: 又一次清扫,扫走 1,699.92 ETH。
05:22 至 06:02: 化整为零。RLUSD 8,850 万、UNI 702 万、PEPE 7.77 万亿、wBETH 29,934、ENA 2.175 亿,逐个发往全新地址,每个地址事先打入 0.5 到 1 ETH 做 Gas。
05:44: 在这个过程里,Binance 14 上又成功清扫了一次,扫掉刚进账的新存款。
从委托到第一次清扫,只隔了 3 分 24 秒。但币安的风控系统没有任何拦截动作。
随后从 5 点开始,币安和各项目方开始冻结资产,Tether 约 15.67 亿 USDT、Circle 约 8.23 亿 USDC(两者合计 23.16 亿),加上 Ripple 约 2 亿 RLUSD、World Liberty Financial 约 2,780 万 USD1 + 200 万 WLFI,凑成 25.4 亿。
EIP-7702 是以太坊 Pectra 升级引入的能力:让一个普通钱包(EOA)临时租用一份智能合约的代码。钱包主人签一份授权,从此对这个地址的任何调用,执行的都是那份外来代码。
攻击者的用法是:
部署合约 0x63e8…6fAe,里面只有一个函数 sweep(address pool, address[] depositors)——把 ETH 和指定的一串代币全部转到指定地址。
拿到 Binance 14 的授权签名,把这份代码"装"到币安热钱包上。
安装完 3 分 24 秒后,直接在币安热钱包地址上调用清扫合约。
所以,外界看起来就是币安的热钱包自己把钱转了出去。链上看不到任何"外部地址转走资产"的动作,看起来就像 Binance 14 在做一笔正常的出账。
攻击者并不知道 Binance 14 的实时 nonce(那个钱包仍在持续发交易)。于是他在一笔交易里塞了 50 个授权,nonce 从 N 排到 N+49,赌其中一个能命中。结果只有一个生效。
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia