距BEC现重大漏洞几近归零仅时隔三天,智能合约再曝安全漏洞。
今早,SMT遭到与BEC类似溢出攻击,
https://etherscan.io/tx/0x1abab4c8db9a30e703114528e31dee129a3a758f7f8abc3b6494aad3d304e43f
SMT于此前已经登陆多家交易平台,随后,火币Pro发布公告称,SmartMesh(SMT)项目方反馈今日凌晨发现其交易存在异常问题,经初步排查,SMT的以太坊智能合约存在漏洞。火币Pro也同期检测到TXID为:0x0775e55c402281e8ff24cf37d6f2079bf2a768cf7254593287b5f8a0f621fb83的异常。受此影响,火币Pro现决定暂停所有币种的充提币业务。
随后,火币Pro又发布公告称暂停SMT/USDT、SMT/BTC和SMT/ETH的交易。此外,OKEx,gate.io等交易平台也已经暂停了SMT的充提和交易。截止暂停交易,SMT在火币Pro的价格下跌近20%。
据区块链安全公司 PeckShield 分析,SMT的智能合约中proxyTransfer() 函数存在一个经典的整数溢出问题。_fee 和 _value_ 这两个输入参数都能被攻击者控制,如果 _fee + _value 的结果正好为 0(也就是溢出的情况),第206行的检查将会失效。
这意味着攻击者不需要任何Token,就可以向一个地址转入大量的Token(第214行);同时根据第217行的代码,相当数量的手续费也将发送给 msg.sender
上一个漏洞差点蒸发60亿
由以太坊智能合约的溢出漏洞引发的安全事件并不是第一次,距上次发生此类严重漏洞才过去了短短3天。
4月22日,BEC出现异常交易,据分析,BEC 智能合约中的 batchTransfer 批量转账函数存在漏洞,攻击者可传入很大的 value 数值,使 cnt * value 后超过 unit256 的最大值使其溢出导致 amount 变为 0。
操作记录:https://etherscan.io/tx/0xad89ff16fd1ebe3a0a7cf4ed282302c06626c1af33221ebe0d3a470aba4a660f
简单来说,BEC的某一段代码忘记使用safeMath方法,导致系统产生了整数溢出漏洞,利用该漏洞,黑客可以通过转账手段生成大量原本合约中不存在的代币,并将这些“无中生有”的代币在市场进行抛售。
由于黑客转出的代币数量远远超过BEC发行数量70亿枚,加之由此引发的恐慌抛售,BEC市值瞬间几乎归零。OKEx随后发布公告,暂停BEC交易和提现。美链团队方面也发布公告称系统即将回滚。
多个ERC20智能合约受影响
智能合约安全事件频发引起的盗币问题引起外界关注,微博研发副总经理Tim Yang发布个人微博称,
“最近的 ERC20 的转账的安全问题,直接原因都是代码安全漏洞,由程序员背锅,但大家比较少讨论其深层次的原因,为什么以太坊比较容易出安全问题?以太坊只是一个记录 dapp 执行结果的区块链,其本身并没有加密货币复式记账所需的 utxo 模型。重要的 token 资产本身是需要货币级别的安全程度,以太坊目前的设计更适合游戏积分之类的合约运行结果。”
因此,他强调,重要的 token 资产不适合构建在 ERC20体系基础之上。
出问题的只是BEC和SMT吗?问题可能比想象的严重得多。区块链安全公司 PeckShield发出预警称,多个ERC20智能合约遭受proxyOverflow漏洞影响,其检测定位到大量的ERC20 Token都受此影响,包括:
通过以太坊智能合约“发币”容易,若不做好严格的代码审计和安全防护,亿级资金的损失只在一瞬间。特此提醒,项目方应做好自查,必要时请外部公司进行审计,交易平台应做好对项目方的审核工作和自身安全防护,投资者亦应注意风险。