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

事件介绍

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

总结

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

本文内容来自微信公众号【曲速未来安全区】

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806A1F1QO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券