充一赠一的假充值漏洞

曲速未来安全区
曲速未来安全区 机构得得号

Aug 09, 2018 专注于为读者提供区块链安全领域最新讯息

摘要: 攻击者利用交易所对USDT交易充值的判断逻辑缺陷,恶意进行虚假转账牟取交易所的代币。

事件介绍

在6月28日晚,有安全机构发布了一条针对USDT的预警及漏洞分析,同时提醒各大交易所尽快暂停有关USDT的充值功能,并对自身的代码进行检查,查看是否存在逻辑缺陷。“假充值”是指用户向交易所充值USDT时并不会损失自身的USDT,这些充值的USDT可以正常使用。

同时,在今年6月11就已经有用户发现门罗币存在假充值漏洞,并在门罗币的GitHub仓库上提交了相关issue。

漏洞介绍

USDT

攻击者利用交易所对USDT交易充值的判断逻辑缺陷,恶意进行虚假转账牟取交易所的代币。USDT自身是没有问题的。

我们以Omniexplorer提供的素材为例。

通过一例无效交易来阐释这个过程。

地址:1b5c80f487d2bf8b69e1bbba2b1979aacb1aca7a094c00bcb9abd85f9af738ea

(https://omniexplorer.info/search/1b5c80f487d2bf8b69e1bbba2b1979aacb1aca7a094c00bcb9abd85f9af738ea)

这笔无效的交易发生在Omniexplorer。 Omin采用的数字资产转移的方法是Simple Send。

而他的记账模型是基于地址的。通过地址查询交易者余额并与交易发送的地址对比,余额小于发送的金额,这笔交易就会被标记为无效。

同时,对余额的检验是通过Omni 客户端进行的,但Omni没有 UTXO 机制,这也就导致了无效交易也能被广播。

利用场景

1.用户发起恶意 USDT 充值行为;

2.黑客绕过检查系统生成恶意交易并广播;

3.由比特币区块链(Omni core 钱包基于比特币)确认交易;

4.交易所检查交易数目(绕过了余额检查);

5.交易完成;

6.⽤户发起提币。

门罗币

首先我们先看一下官方发布的修复代码

判读一次交易的公共密钥是否已经存在,若存在,则否定此次交易。

在没有添加这段代码前,门罗币客户端的show_transfers指令不会跳过重复的交易,重复的交易金额也会被计算出来。

也就是说,当攻击者交易所的充值地址发送多条重复交易,若交易所校验不严谨没有检测真实钱包收账余额,仅仅通过show_transfers来确认用户充值的话,便会出现假充值漏洞,导致交易所给用户充值的余额和交易所自己实际收到的余额不符,攻击者假充值成功后可以进行消费或提款。

利用场景

在门罗币的开源代码中插入利用代码,然后编译运行。

攻击者在门罗币的cryptonote_tx_utils.cpp文件的第354行中插入大量重复代码。客户端每次发起交易的时候便会向目标多发送3次重复交易,这样便达到了利用该漏洞的目的。

总结:

黑客只需要几行代码就可以完成假转账,这种漏洞的原因要归于交易所没有处理好逻辑漏洞。开发人员在代码上线前应注意检查,小心仔细。安全无小事。

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 曲速未来安全区 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信