第三方 FlashLoopAdapter 访问控制漏洞致 Aave 关联 Safe 钱包损失约 30.5 万美元
以太坊消息,一款用于管理 Aave v3 杠杆仓位的自定义 FlashLoopAdapter 合约遭攻击者利用访问控制漏洞,导致两个与其关联的 Safe 钱包合计损失约 30.5 万美元。区块链安全公司 SlowMist 指出,漏洞出在 FlashLoopAdapter 的调用方认证逻辑;Defimon Alerts 表示,Aave v3 本身未受影响。
Defimon Alerts 称,其于 10 月 1 日 15:08:57 UTC 检测到该攻击。Aave 创始人 Stani Kulechov 表示,受影响合约是建立在 Aave 之上的第三方外部适配器,对 Aave v3“零影响”。
根据 SlowMist,FlashLoopAdapter 的 open() 与 close() 函数通过检查 ISafe(msg.sender).isModuleEnabled(address(this)) 是否返回 true 来验证调用方,而没有独立确认调用者是否为合法 Safe。攻击者因此可部署一个伪造 Safe 合约,使其在适配器检查时返回 true。一旦伪造 Safe 通过检查,攻击者即可访问原本仅面向授权钱包的功能。
Defimon Alerts 称,攻击者先通过 Morpho 借入 WETH 闪电贷,并用借得流动性偿还第一个 Safe(0xcfedf95a3653a128dfc2e4288758a1a1850d169f)约 1,335 WETH 的 Aave 债务。偿债释放了与该杠杆 Aave 仓位绑定的抵押品。随后,攻击者利用被入侵的模块执行路径,使该 Safe 向攻击者控制地址提取约 1,306 weETH。第二个 Safe(0xe3b23e47df7cd85876ac6cb05bdb9d7cd5b28520)则通过同一漏洞模块损失另外 6.4 weETH。Defimon 表示,这两个受影响 Safe 共用同一单一所有者。
Defimon Alerts 还指出,回调期间执行的检查未能阻止交易,因为攻击者合约同时充当了闪电贷流动性提供方。另一个函数 _swap() 允许使用调用者提供的 swapCalldata 对 swapRouter 发起原始调用。攻击者将 router 设为一个受害 Safe 钱包,并将 calldata 设置为调用 execTransactionFromModule——这是 Safe 的一项功能,允许已启用模块执行交易。由于 FlashLoopAdapter 已被受害 Safe 启用,该调用被接受。
SlowMist 将攻击者地址识别为 0x42c2633438609881c8fBAb82414eb9A0c45F9353,脆弱 FlashLoopAdapter 合约地址为 0x16bb8b912da187870c23ec6756bb3fad061283d8。部分被提取的 weETH 被换成 WETH,用于结算闪电贷及交易其他部分。事件报告时,攻击者最终留下约 114.1 ETH,价值约 30.5 万美元。SlowMist 单独估计损失约 114.09 ETH,并称在解锁抵押品过程中偿还了约 1,300 WETH 债务。因此,大额抵押品提取并不代表攻击者净收益。
此次事件涉及建立在 Aave 之上的自定义合约,而非 Aave v3 核心协议。两家安全警报均未识别出 Aave v3 自身存在缺陷。报告所述漏洞关乎适配器如何认证调用者,以及调用者可让已启用模块执行何种操作。类似涉及 Safe 模块权限的问题此前已经出现。9 月,一名以太坊 Safe 钱包约 2,900 rsETH 的漏洞被 BlockSec 追踪到与已启用 Safe 模块相连的执行器合约中的弱授权检查。5 月,涉及 SquidRouterModule 的攻击掏空以太坊和 Base 上的 Safe,86 个钱包被盗约 300 万至 320 万美元。数日后,Gnosis Pay 用户在其 Zodiac delay 模块遭攻击后被敦促提取资金。Safe 模块可获授权代表钱包执行交易,无需每次走标准所有者交易流程。FlashLoopAdapter 依赖该能力自动化 Aave 杠杆仓位,但同一权限也意味着,一旦适配器认证逻辑被成功绕过,即可触及 Safe 控制的资产。
