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

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

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

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

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

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

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

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

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

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

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

参考文献

[1] 智能合约风险列表(awesome-buggy-erc20-tokens) https://github.com/sec-bit/awesome-buggy-erc20-tokens

[2] 数千份以太坊 Token 合约不兼容问题浮出水面,恐严重影响DAPP生态 https://mp.weixin.qq.com/s/1MB-t_yZYsJDTPRazD1zAA

以上数据均由安比(SECBIT)实验室提供,合作交流请联系info@secbit.io。


安比(SECBIT)实验室

安比(SECBIT)实验室专注于区块链与智能合约安全问题,全方位监控智能合约安全漏洞、提供专业合约安全审计服务,在智能合约安全技术上开展全方位深入研究,致力于参与共建共识、可信、有序的区块链经济体。

安比(SECBIT)实验室创始人郭宇,中国科学技术大学博士、耶鲁大学访问学者、曾任中科大副教授。专注于形式化证明与系统软件研究领域十余年,具有丰富的金融安全产品研发经验,是国内早期关注并研究比特币与区块链技术的科研人员之一。研究专长:区块链技术、形式化验证、程序语言理论、操作系统内核。