Formation.Fi 闪电贷安全事件分析_KEN:USDT

前?

11月21日,知道创宇区块链安全实验室?监测到以太坊上的DeFi协议?Formation.Fi?遭遇黑客攻击,损失近10万美元。实验室第一时间跟踪本次事件并分析。

攻击流程及形成漏洞成因分析

简述攻击流程

首先黑客通过合约0xd02C进行闪电贷借出启动资金200USDT

向合约Vault质押100USDT获得99FormationUSD?

通过Vault合约swapin函数置换100USDT并附带大量fee

调用Vault合约函数withdraw销毁99FormationUSD获得漏洞利润99999USDT

最后归还闪电贷将获利转到黑客地址

漏洞成因分析

检查源码后发现具体问题主要出在Vault合约函数?swapIn?上,可以看到该函数调用参数?fee?能影响记录着全部代币的变量?totalTokens?的计算,fee越大totalTokens越大。

而在通过函数withdraw实际获取利润时,可以看到实际转账时totalTokens参与了计算,所以当大量的fee被带人totalTokens计算后,会造成withdraw函数的转账超过原本的转账金额。

而造成攻击获利巨大的另个原因是FormationUSD与USDT的小数点数位不同,FormationUSD为18位,USDT为6位。小数点精准数位的差距在实际转账中进一步放大了黑客的收益。

Vault:

TetherToken:

重新梳理攻击过程

第一步:选用USDT作为攻击使用的代币,目的USDT与FormationUSD的小数点精确度不同

第二步:黑客质押100USDT,目的为了后续调用withdraw函数实现套利

第三步:黑客兑换100USDT,目的添加大量的fee提升totalTokens的值

第四步:黑客取回质押的USDT,目的使用提升后totalTokens与利用代币间小数点精确度不同来套取利润

第五步:归还闪电贷,转移套取的利润

总结

本次闪电贷安全事件发生的主要原因在于项目方设计函数?swapIn?时低估了fee对totalTokens的影响,且忽视了不同代币间小数点精确度的影响。

知道创宇区块链安全实验室?再次提醒近期各链上频频爆发攻击事件,合约安全愈发需要得到迫切重视,合约审计、风控措施、应急计划等都有必要切实落实。

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-3:423ms