以太坊代币“假充值”漏洞分析
慢雾安全团队发出以太坊代币“假充值”漏洞预警。部分 Token 合约不符号规范的实现,以及致使部分中心化交易所,中心化钱包不完善的机制引发的漏洞,使得黑客利用该漏洞发起不正常的充值操作,进而套取利益。据报道,已经有交易所和钱包遭受此攻击。
该漏洞指出,在以太坊上调用合约的交易时,当合约正常执行结束后,以太坊交易返回字段 status
值为 true(即0x1),若函数未正常执行完毕,比如涉及到require
,assert
, throw
,revert
等机制,则说明这笔交易没有执行成功,返回 false(即0x0)。
EIP 20 规范明确表示,某些导致合约无法转账成功的情况,应直接抛出异常。
但是不幸的是,大量合约并未按照规范的写法,而是以return false
来表示合约转账是否成功,也就是当 Token转账失败的时候,该笔以太坊交易依然是成功的。
部分问题合约列表如下,更多问题合约我们也就陆续更新至智能合约风险列表:
而部分中心化交易所或者钱包的实现机制仅通过判断返回值 TxReceipt Status
是否为 success
,也就是返回字段 status
值是否为 true 来判断转账成功与否。这个返回值表示以太坊上发起该笔转账的交易是否成功,与 Token 转账函数本身的返回值无关。也就是说,当交易所遇到以return false
而非直接抛出异常来表示转账失败的合约就可能误判。
黑客可以利用这个漏洞,向交易所或钱包地址发起一笔失败的交易,但交易所/钱包却认为“充值成功”,继而套取大量的利益。
Token 合约转账涉及方方面面,这个“假充值”漏洞本质上是由于在多方对协议/接口/规范理解的不一致导致的,Token 合约项目方开发过程中未严格按照EIP 20标准实现,相关的交易所/钱包方对转账成功的判断依据也不够准确,继而引发了该漏洞。这与之前爆出的因未按照规范规范标准开发 Token 合约引起的不兼容问题如出一辙。
强烈建议各交易所和钱包进行自查,若存在上述问题,应检查转账接口返回值是否为 true。另外不同合约转账成功的判断依据可能各有不同,项目方应尽快对相关 Token 合约逐一排查。同时也建议 Token 项目方应采取措施,必要时重新发布合约。
项目方发行 Token 一定要慎之又慎,对合约代码进行详细检查,务必做好测试和审计工作,必要时寻求专业的审计团队对合约进行审计,防患于未然。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接