ether.fi安全事件:一次访问控制缺失引发的资金失窃
9月11日,区块链安全机构慢雾发布了一则安全通报,揭示了去中心化金融协议ether.fi遭遇的一次攻击事件。攻击者利用合约漏洞,成功盗取了约15.45枚以太坊(ETH)。慢雾方面表示,在公开披露前已遵循负责任的安全披露原则,与项目团队进行了私下沟通。
漏洞根源:AtomicQueue合约的权限失控
根据慢雾的初步技术分析,此次攻击的症结在于一个核心的智能合约函数。AtomicQueue合约中的solve()函数在设计上存在重大安全缺陷。
- 关键缺失:该函数在处理调用方传入的solver(求解者)参数时,完全缺乏任何形式的访问控制验证。
- 验证空白:既没有检查solver == msg.sender(即调用者是否为指定的求解者),也没有引入签名验证、注册白名单或授权机制。
这个看似简单的疏忽,为攻击者打开了一扇任意操纵的大门。
攻击手法:构造恶意请求与权限滥用
攻击者利用上述漏洞,执行了一套组合操作:
首先,攻击者通过updateAtomicRequest()函数,精心构造了一个恶意的交易请求(AtomicRequest)。随后,攻击的核心步骤上演——他们强制指定一个无辜的用户地址来扮演“solver”的角色。
当AtomicQueue合约对该受害地址调用finishSolve时,会执行关键的一行代码:want.transferFrom(solver, users[i], assetsToUser)。这行代码的本意是从solver地址转移资产给用户,但由于solver被恶意指定为受害者,且受害者之前曾对该合约授予过标准的ERC-20代币操作权限,攻击者便成功利用了这份已有的授权,将受害者钱包中的资金转移到了自己控制的地址。
整个攻击链条清晰表明,一个基础但致命的权限检查缺失,足以让用户此前出于正常交互目的而授权的额度,瞬间变为攻击者的提款通道。