百密一疏:Force DAO假充值攻击事件分析
SharkTeam摘要:Force DAO假充值攻击事件分析
北京时间2021年4月4日,区块链项目?Force DAO?发推提醒用户称「请停止在?Sushiswap?和?Uniswap?上的所有交易。」此前,FORCE?代币被大量增发,Force DAO?表示「团队已意识到?xFORCE?合约漏洞,并确定了问题。xFORCE?合约上没有更多的资金可供利用。团队将在未来几个小时内提供报告和下一步行动。」
400
SharkTeam第一时间对此事件进行了攻击分析和技术分析,并总结了安全防范手段,希望后续的区块链项目可以引以为戒,共筑区块链行业的安全防线。
一、攻击分析
通过初步分析,Force DAO合约中的漏洞主要在xFORCE合约代码ForceProfitSharing.sol上。该漏洞令所有人都可以在没有FORCE的时候,铸造xFORCE。然后再将新铸造的xFORCE交换为FORCE。代码分析如下:
合约地址为:0xe7f445b93eb9cdabfe76541cc43ff8de930a58e6
首先看一下出问题的xFORCE铸币代码:
可以看到合约在帮用户铸造xFORCE之后,然后将FORCE通过force.?transferFrom扣除用户的FORCE。但是并没有判断这个函数是否执行成功。
我们继续查看FORCE合约中的transferFrom:
合约地址:0xd017D2403d779A31e1fA2261e0D3997bCACad851
在这个合约中只判断了用户的额度,当额度不足时返回false,由于xFORCE的合约中没有做执行结果的判定,所以无论用户账户中是否有足够的额度,都会铸币成功。所以额度不足的用户会凭空得到一大笔xFORCE,而后再使用xFORCE的withdraw函数,就可以使用刚刚凭空得到的xFORCE来兑换合约中的FORCE。从而导致资金损失。
这个是其中一个攻击者的钱包地址:0x6807d7f7df53b7739f6438eabd40ab8c262c0aa8
交易地址:0x37b44d5dbbe9c1dd75223e15977153234e8a4dbbbab2495cdcc531f44bf6e3d0
而后通过withdraw将得到的xFORCE转换为FORCE
二、SharkTeam安全建议
在本次攻击事件中,主要原因在于外部合约?xForce?在调用代币转让时未严格判断其返回值,导致用户可以随意铸币的情况发生。该漏洞是典型的“假充值”的合约漏洞,可以在关键逻辑上增加权限控制,在项目上线之前请专业的智能合约审计机构进行严格的审计,保障智能合约和数字资产安全。