修复意见:
黑客触发invest函数后通过withdraw函数取到了BTTBank嘉奖池的真正的BTT代币,最终四个小号将赃款会合转向黑客主账号TCX1Cay4T3eDC88LWL7vvvLBGvBcE7GAMW
require(msg.tokenid==1002000);
而进攻者账号TRC10代币中存在BTT和BTTx两种代币,可见两种代币的ID差别,BTT代币ID:1002000,BTTx代币ID:1002278。
而且Beosin成都链安也发起各大项目方增强合约的安详防护级别和安详运维强度,只管防御未然,制止不须要的损失,须要时可接洽第三方专业审计团队,在上链前举办完善的代码安详审计,配合维护公链安详生态。提示各大项目方增强合约的安详防护级别和安详运维强度,只管防御未然,制止不须要的损失,须要时可接洽第三方专业审计团队,在上链前举办完善的代码安详审计,配合维护公链安详生态。
经该技能团队阐明发明,该假币裂痕是由invest函数只判定了msg.tokenvalue,而没有判定msg.tokenid是否为真实BTT代币的ID:1002000所导致。
BTTBank合约在收代替币时没有对收到代币的tokenid做任何判定,合约中仅仅判定了msg发送代币的数量msg.tokenvalue。当合约收到挪用者发送的代币数量msg.tokenvalue时,合约错误的认为该代币数量是BTT的数量。但实际上挪用者利用的是假币tokenid为1002278的代币数量。BTTBank将假币视同于真币(真币的tokenid为10022000)记录到投资者账号。
对此,Beosin成都链安技能团队发起:项目方在收代替币时应同时判定msg.tokenvalue和msg.tokenid是否切合预期。并给出该裂痕代码修复方法,如下:
TK8NXXXXXXXXXXXXXXXXXXXXXXXZkQy
require(msg.tokenvalue >= minimum);
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。