事件背景
wGOOGLx(wrapped xStocks / 代币化谷歌股票的封装版)在 Edel Lending 中被当作抵押品。其价格源通过 ERC-4626 金库的 convertToAssets() 计算「每一份额对应多少底层资产」,而 totalAssets() 直接读取底层 GOOGLx 在金库合约中的余额,没有独立的预言机 TWAP,也没有:
- 份额价格变化上限(max share price deviation / rate limiter);
- 捐赠攻击防护(donation / inflation attack protection,例如 virtual shares、dead shares、或对直接 transfer 进金库的资产不计入定价);
- 最小流动性 / 滑点约束,防止单笔外部转入瞬间扭曲 NAV。
因此,任何人只要把底层 GOOGLx 直接转入金库地址(不走正常 mint 路径),totalAssets() 就会上升,而份额总数不变 → convertToAssets() 算出的「每份 wGOOGLx 价值」被人为抬高。借贷侧若按该虚高价格认定抵押率,攻击者就能用少量真实成本撬动大量借款额度。本质是 ERC-4626 会计假设「金库资产只来自合法存取」被打破 + 借贷协议把可操纵的份额汇率当成可信抵押品预言机。
事件经过
- 准备资金:攻击者通过闪电贷或临时资金拿到足够的底层 GOOGLx / 相关资产,用于后续「捐赠」与循环操作。
- 直接捐赠扭曲汇率:将底层 GOOGLx 直接转入 ERC-4626 金库(不铸造对应份额),使 totalAssets() 暴涨、份额供给不变。
- 估值失真:wGOOGLx 经 convertToAssets() 算出的份额价值被抬高到合理价值的约 78 倍。
- 虚高抵押借贷:攻击者把被高估的 wGOOGLx 作为抵押品,在 Edel 的约 6 个借贷市场中反复存入并借出其他资产(稳定币/主流资产等)。
- 循环放大:在操纵窗口内可多次 deposit/borrow,把会计偏差兑换成可提取的真实资产,形成协议侧坏账。
- 出金换 ETH:全部获利资产被兑换为约 224 ETH(约 35.3 万美元量级)。
- 混币离场:ETH 转入 Tornado Cash,链上追踪难度陡增。
- 项目侧:漏洞路径被遏制后,协议账面仍留下约 40.3 万美元不良债务(坏账口径与攻击者套现口径不同,须分开表述)。
资金流向
- 直接捐赠扭曲汇率:将底层 GOOGLx 直接转入 ERC-4626 金库(不铸造对应份额),使 totalAssets() 暴涨、份额供给不变。
- 循环放大:在操纵窗口内可多次 deposit/borrow,把会计偏差兑换成可提取的真实资产,形成协议侧坏账。
- 出金换 ETH:全部获利资产被兑换为约 224 ETH(约 35.3 万美元量级)。
- 混币离场:ETH 转入 Tornado Cash,链上追踪难度陡增。
金额口径
攻击者实现约224 ETH、约35.3万美元;协议不良债务约40.3万美元
证据边界
以公开可核验来源为界;未证实细节不写入确定结论。
处置状态
项目遏制漏洞,但形成约40.3万美元坏账;攻击者所得已进入Tornado Cash。RWA / xStocks / ERC4626 封装资产若被借贷协议直接当预言机,同类「捐赠抬汇率」会反复出现。