查看原文
其他

BAI 智能合约漏洞分析及修复方法

慢雾安全团队 慢雾科技 2019-09-10



5 月 24 日 10:51,KKCoin 转发 BAIC 社区公告称:


BAIC(BAI)项目方在5月24日凌晨发现BAI交易存在大量异常问题,并有若干BAI持仓账户出现异常转出情况,同样情况也出现在其他一些ERC20项目上,据初步分析可能属于ERC20智能合约新漏洞,为保护所有BAI持有人利益,项目方决定立即暂停所有交易所BAI的交易,并建议所有BAI持有人不要私下交易或进行转账操作,以避免损失,项目方会及时跟踪事态进展并进行处理,暂停交易期间,为您带来的不便,敬请谅解。


慢雾安全团队第一时间分析发现,BAI 存在和 EDU 一样的智能合约漏洞。


漏洞分析



在 BAI 智能合约 transferFrom 函数中,未校验 allowed[_from][msg.sender] >= _value 并且函数内 allowed[_from][msg.sender] -= _value; 没有使用 SafeMath,导致无法抛出异常并回滚交易。


通过这个漏洞,攻击者不需要私钥即可转走指定账户里所有的 BAI,并且由于合约没有 Pause 设计,导致无法止损。


修复方法


在 require(balances[_from] >= _value); 下一行增加 require(allowed[_from][msg.sender] >= _value); 或者引入 SafeMath,在合约中增加 using SafeMath for uint256; 同时修改为 allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);




    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存