曲速未来:充一赠一的假充值漏洞介绍区块链

曲速未来安全区 2018-08-06 22:05
分享到:
导读

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

事件介绍

在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次重复交易,这样便达到了利用该漏洞的目的。

总结

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

交易 交易所 代码 USDT 漏洞
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


专题报道