Fantom链上复合收益平台GrimFinance遭遇闪电贷攻击,涉及损失资金超3000万美金。慢雾安全团队进行分析了攻击经过如下:
1.攻击者通过闪电贷借出WFTM与BTC代币,并在SpiritSwap中添加流动性获得SPIRIT-LP流动性凭证。
2.随后攻击者通过GrimFinance的GrimBoostVault合约中的depositFor函数进行流动性抵押操作,而depositFor允许用户指定转入的token并通过safeTransferFrom将用户指定的代币转入GrimBoostVault中,depositFor会根据用户转账前后本合约与策略池预期接收代币(预期接收want代币,本次攻击中应为SPIRIT-LP)的差值为用户铸造抵押凭证。
3.但由于depositFor函数并未检查用户指定转入的token的合法性,攻击者在调用depositFor函数时传入了由攻击者恶意创建的代币合约地址。当GrimBoostVault通过safeTransferFrom函数调用恶意合约的transferFrom函数时,恶意合约再次重入调用了depositFor函数。攻击者进行了多次重入并在最后一次转入真正的SPIRIT-LP流动性凭证进行抵押,此操作确保了在重入前后GrimBoostVault预期接收代币的差值存在。随后depositFor函数根据此差值计算并为攻击者铸造对应的抵押凭证。
4.由于攻击者对GrimBoostVault合约重入了多次,因此GrimBoostVault合约为攻击者铸造了远多于预期的抵押凭证。攻击者使用此凭证在GrimBoostVault合约中取出了远多于之前抵押的SPIRIT-LP流动性凭证。随后攻击者使用此SPIRIT-LP流动性凭证移除流动性获得WFTM与BTC代币并归还闪电贷完成获利。
此次攻击是由于GrimBoostVault合约的depositFor函数未对用户传入的token的合法性进行检查且无防重入锁,导致恶意用户可以传入恶意代币地址对depositFor进行重入获得远多于预期的抵押凭证。
慢雾安全团队建议:对于用户传入的参数应检查其是否符合预期,对于函数中的外部调用应控制好外部调用带来的重入攻击等风险。
参考攻击交易:https://ftmscan.com/tx/0x19315e5b150d0a83e797203bb9c957ec1fa8a6f404f4f761d970cb29a74a5dd6
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。