ether.fi旧队列漏洞被盗15.45枚ETH
ether.fi遗留AtomicQueue合约遭利用,约15.45枚ETH被转走。根因是solve()对调用方传入的solver参数没有访问控制。
该函数既不校验solver等于msg.sender,也不要求签名、注册或授权。攻击者先用updateAtomicRequest()写入恶意AtomicRequest,再把受害者地址强行指定为solver;队列随后对受害者调用finishSolve,执行want.transferFrom(solver, users[i], assetsToUser),抽走其此前授予合约的ERC-20额度。被盗的是用户残留授权,不是金库本金。
公开技术细节显示,被利用的是Veda搭建的旧版提款队列,而非现行Liquid金库。攻击者另内部署近乎无价值的代币,伪造报价单,用包装合约与solver合约在单笔交易中完成抽取,链上记录约15.4536 ETH,Gas费约0.000685 ETH。资金经去中心化交易所兑换后,拆成10、1、0.1 ETH多笔进入混币器。ExVul先发公开警报,SlowMist称已事先私下通知ether.fi团队,并公布攻击者地址与漏洞合约地址。
正常流程里,用户把金库份额代币liquidETH挂单换成目标资产,由求解器调用solve()成交。此次solve(offer, want, users[], runData, solver)把solver当成可任意填写的参数,于是任何仍对合约留有授权的地址都能被点名当“求解器”。协议侧回应口径包括全额赔付受影响用户。
市场机制上,这是授权存量被定价,不是TVL被打穿。卖盘来自仍挂着无限额或未撤销授权的地址;买盘是漏洞猎手用廉价假代币换真实额度。受益方是能扫描残留allowance的攻击者,以及事后承接赔付与合约退役的团队;承压方是把“授权给协议”当成一次性完成动作的用户。资金从用户钱包经transferFrom进入攻击合约,再进混币器,协议金库本身未被直接抽空。
链上补充:漏洞合约与攻击地址已公开可查;事件落在遗留队列而非主质押路径,说明旧求解器接口在主产品迭代后仍保持可调用状态。
来源:公开信息
ABAB AI 解读
ether.fi把流动再质押做成主产品后,提款与成交被拆成队列加求解器。Veda留下的AtomicQueue把solver写成调用参数,却没把“谁有权当solver”写死。这与2022年Rubic路由白名单失误、Multichain permit被绕,同属授权面攻击:用户以为批准的是协议,实际批准的是任意调用者可借用的额度。限时授权方案讨论多年仍未成默认,于是旧approve成为可库存的攻击原料。
资本路径是扫描器经济。攻击者成本是一笔低Gas复合交易加一枚空气代币;收益取决于链上还能扫到多少未撤销额度。协议侧用赔付把声誉损失换成运营开支,避免15 ETH事件演变成挤兑叙事。资源调动是安全公司先私信再公开、项目组承诺垫付,而不是立刻冻结主金库。动机很明确:主TVL不能因为遗留接口的授权漏洞出现折价。
类比对象是无数“已升级、旧合约未关”的DeFi事件:路由器换了,allowance还指向旧地址。行业阶段处于控制期的尾部清理——新金库、新求解器已经上线,旧队列因仍有挂单或授权而无法简单自毁。谁先做授权收口,谁少付赔付;谁把solver做成开放参数,谁给扫描器供货。
结构判断属于技术替代未完成导致的定价权错位。机制是:ERC-20授权是持久权利,求解器身份却是瞬时参数。两者在同一函数里相遇,权利就被参数劫持。15.45 ETH是抽样,真正被定价的是全市场未过期的approve余额。
ABAB News · 认知定律
授权给协议,等于授权给协议的旧入口
漏洞金额小,授权库存大
求解器不验身,额度就变成公共品