慢雾安全团队发出以太坊代币“假充值”漏洞预警。部分 Token 合约不符号规范的实现,以及致使部分中心化交易所,中心化钱包不完善的机制引发的漏洞,使得黑客利用该漏洞发起不正常的充值操作,进而套取利益。据报道,已经有交易所和钱包遭受此攻击。

该漏洞指出,在以太坊上调用合约的交易时,当合约正常执行结束后,以太坊交易返回字段 status 值为 true(即0x1),若函数未正常执行完毕,比如涉及到require ,assertthrow ,revert等机制,则说明这笔交易没有执行成功,返回 false(即0x0)。

EIP 20 规范明确表示,某些导致合约无法转账成功的情况,应直接抛出异常。

以太坊代币“假充值”漏洞分析插图

但是不幸的是,大量合约并未按照规范的写法,而是以return false 来表示合约转账是否成功,也就是当 Token转账失败的时候,该笔以太坊交易依然是成功的。

以太坊代币“假充值”漏洞分析插图1

部分问题合约列表如下,更多问题合约我们也就陆续更新至智能合约风险列表

以太坊代币“假充值”漏洞分析插图2

而部分中心化交易所或者钱包的实现机制仅通过判断返回值 TxReceipt Status 是否为 success,也就是返回字段 status 值是否为 true 来判断转账成功与否。这个返回值表示以太坊上发起该笔转账的交易是否成功,与 Token 转账函数本身的返回值无关。也就是说,当交易所遇到以return false 而非直接抛出异常来表示转账失败的合约就可能误判。

黑客可以利用这个漏洞,向交易所或钱包地址发起一笔失败的交易,但交易所/钱包却认为“充值成功”,继而套取大量的利益。

Token 合约转账涉及方方面面,这个“假充值”漏洞本质上是由于在多方对协议/接口/规范理解的不一致导致的,Token 合约项目方开发过程中未严格按照EIP 20标准实现,相关的交易所/钱包方对转账成功的判断依据也不够准确,继而引发了该漏洞。这与之前爆出的因未按照规范规范标准开发 Token 合约引起的不兼容问题如出一辙。

强烈建议各交易所和钱包进行自查,若存在上述问题,应检查转账接口返回值是否为 true。另外不同合约转账成功的判断依据可能各有不同,项目方应尽快对相关 Token 合约逐一排查。同时也建议 Token 项目方应采取措施,必要时重新发布合约。

项目方发行 Token 一定要慎之又慎,对合约代码进行详细检查,务必做好测试和审计工作,必要时寻求专业的审计团队对合约进行审计,防患于未然。



以太坊代币“假充值”漏洞分析插图3

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:http://choupangxia.com/2020/04/09/ether/