Formation.Fi 闪电贷安全事件分析_USD:nium

前?

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

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

简述攻击流程

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

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

英国央行行长:金融机构应对加密资产采取特别谨慎的态度:英国央行行长贝利称,加密货币投资者可能会失去其所有的投资。金融机构应对加密资产采取特别小心和谨慎的态度。 (金十)[2021/12/14 7:36:53]

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

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

以色列央行公布央行数字货币草案:据外媒报道,以色列央行已草拟了其法定货币(以色列新谢克尔)的数字化版本模型。根据公布的“草案模型”,以色列人应该能够在支付中使用数字谢克尔,甚至能实现离线支付,并随时将其转换为现金。根据央行指导委员会的一份报告,有关的最终决定尚未做出,但该项目已经成形。[2021/5/13 21:57:29]

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

漏洞成因分析

动态 | Forte与Ripple将为区块链游戏开发商投资1亿美元:据venturebeat报道,区块链游戏初创公司Forte宣布与Ripple的Xpring达成协议,向基于区块链技术制作游戏的游戏开发商投资1亿美元。[2019/3/13]

检查源码后发现具体问题主要出在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:15ms0-4:85ms