前言
援引官方消息,北京时间12月19日,Fantom链上复合收益平台GrimFinance遭遇了闪电贷攻击。知道创宇区块链安全实验室 对本次事件深入跟踪并进行分析。
事件详情
交易细节如下图所示:
浏览上图的交易过程可知,攻击合约(0xb08ccb39741d746dd1818641900f182448eb5e41)利用闪电贷借取代币,将借取的代币质押到SpiritSwap里增加流动性获取lp代币,而问题就出现在depositFor()函数中。
通过Tenderly(https://dashboard.tenderly.co/tx/fantom/0x19315e5b150d0a83e797203bb9c957ec1fa8a6f404f4f761d970cb29a74a5dd6/debugger 调试该笔交易,攻击者多次递归调用depositFor函数,利用该函数获取大量代币:
漏洞分析
depositFor() 函数位于https://ftmscan.com/address/0x660184ce8af80e0b1e5a1172a16168b15f4136bf#code 的第1115行:
function depositFor(address token, uint _amount,address user ) public {
uint256 _pool = balance();
IERC20(token).safeTransferFrom(msg.sender, address(this), _amount