在继智能合约漏洞溢出问题引发了一系列损失过后,5月24号,有安全团队再次爆出漏洞溢出的问题(CVE-2018–11397, CVE-2018–11398),账户余额可以被任何人任意转出。
根据某相关安全公司风险预警平台显示,对该类问题进行监控,果不其然,发现了这个问题,更可怕的是,该监控系统显示,已经部署的四份合约存在相同的问题,并且四份合约的实现几乎一模一样。
以下为问题合约的地址通过sha3(address)计算出的哈希结果:
问题合约代码中显示,在transferFrom函数中,由于缺少了对allowed的校验, 任何账户都可以对某一账户上的余额随意进行转账,黑客就可以利用这个漏洞将他人账户上的余额转入自己的账户中,从而获益。同时若转账金额超出了allowed 的限制,allowed[_from][msg.sender] -= _value;这段代码将导致的溢出。
这个问题本质上是一个逻辑上的漏洞,进而引发了溢出漏洞。但可以通过规避溢出漏洞的方式来规避该类问题:
- 转账之前对allowed进行校验。
- 使用safeMath等安全的方式进行运算。
本文转载自《四个Token逻辑漏洞》,版权属于原作者,已获得授权转载。
网友评论