主页 > 怎么注册imtoken钱包 > 慢雾区公开以太坊代币“虚假充值”漏洞详情及修复方案

慢雾区公开以太坊代币“虚假充值”漏洞详情及修复方案

怎么注册imtoken钱包 2023-01-31 08:06:39

今日区块链(Chinaz.com)7月11日消息 7月9日,“慢雾区”发布以太坊代币“虚假充值”漏洞攻击预警。 今日,慢雾安全团队正式披露“假充值”漏洞详情及修复。

据慢雾区消息,以太坊代币“虚假充值”漏洞已影响相关中心化交易所、中心化钱包、代币合约等,其中3619个代币合约存在“虚假充值”漏洞风险。

根据以太坊代币披露的“虚假充值”漏洞详情,攻击者可以利用存在缺陷的代币合约向中心化交易所、钱包等服务平台发起充值操作。 如果交易所误判充值成功,可能存在“假充值”漏洞。 详情如下所示:

以太坊怎么充值_以太坊怎么充值_以太坊官网以太坊

以太坊代币交易回执中的status字段是0x1(true)还是0x0(false)取决于交易执行过程中是否抛出异常(例如使用require/assert/revert/throw机制)。 当用户调用代币合约的转账函数进行转账时,如果转账函数运行正常,没有抛出异常,则交易状态为0x1(true)。

以太坊官网以太坊_以太坊怎么充值_以太坊怎么充值

以太坊怎么充值_以太坊官网以太坊_以太坊怎么充值

如代码所示,部分代币合约的转账函数使用if判断方式查询转账发起方(msg.sender)的余额。 当balances[msg.sender] < _value时以太坊怎么充值,进入else逻辑部分,返回false,最终没有抛出异常。 我们认为only if/else这种温和的判断方式在transfer等敏感函数场景下是一种不严谨的编码方式。 大部分代币合约的transfer function都会采用require/assert方式,如图:

以太坊怎么充值_以太坊官网以太坊_以太坊怎么充值

以太坊怎么充值_以太坊官网以太坊_以太坊怎么充值

当不满足条件时以太坊怎么充值,会直接抛出异常中断合约后续指令的执行,或者可以使用EIP 20推荐的if/else + revert/throw函数组合机制来显示抛出的异常,如如图所示:

以太坊官网以太坊_以太坊怎么充值_以太坊怎么充值

以太坊怎么充值_以太坊怎么充值_以太坊官网以太坊

我们很难要求所有程序员编写具有最佳安全实践的代码。 这种不精确的编码方式是一种安全缺陷,在特殊场景下可能会导致安全问题。 攻击者可以利用存在缺陷的代币合约向中心化交易所、钱包等服务平台发起充值操作。 如果交易所只判断TxReceipt Status为成功(即上述状态为0x1(true)),则认为充值成功,则可能存在“虚假充值”漏洞。 如图所示:

以太坊官网以太坊_以太坊怎么充值_以太坊怎么充值

以太坊怎么充值_以太坊怎么充值_以太坊官网以太坊

此外,慢雾区还公布了修复计划,内容如下

除了判断交易是否成功,还需要判断充值钱包地址的余额是否准确增加。 其实这个二次判断可以通过事件日志来进行。 很多中心化交易所、钱包等服务平台会通过事件日志获取转账金额来判断转账的准确性。 但是这里需要特别注意合约的恶意行为,因为Event是可以任意编写的,并不是不可篡改的强制默认选项:

发出转移(从,到,值); // value等参数可以任意定义

作为平台方,在对接新上线的代币合约之前,需要进行严格的安全审计。 这种安全审计必须强制代币合约方实施最佳安全实践。