曲速未來:充一贈一的假充值漏洞介紹區塊鏈
曲速區:今年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次重復交易,這樣便達到了利用該漏洞的目的。
總結
曲速區提醒:黑客只需要幾行代碼就可以完成假轉賬,這種漏洞的原因要歸于交易所沒有處理好邏輯漏洞。開發人員在代碼上線前應注意檢查,小心仔細。安全無小事。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。