其他
BAI 智能合约漏洞分析及修复方法
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);