細節!EOS 抵押漏洞分析

安全 EOS 觀點 鏈聞獨家 2018-07-25

針對前段時間 EOS 漏洞問題,數字彗星科技 CTO 兼創始人張東誼的安全團隊向鏈聞 ChainNews 透露了整體回顧細節,希望大家提起安全意識,但也不要過度恐慌,正確看待安全問題。

一、事件概述

6 月 22 日凌晨,EOS 官方社區發佈消息稱:發現 EOS 漏洞,用戶抵押投票的代幣在漏洞修復之前都無法贖回。隨後我們根據相關消息對該漏洞進行驗證確認該漏洞確實存在,且在漏洞修復前,通過精心構造的攻擊使得特定用戶資產進行無限期抵押,無法贖回。

我們知道 EOS 採用 DPoS 共識機制,該機制通過社區投票選舉 21 個超級節點來維護 EOS 網絡,為 EOS 網絡提供算力、帶寬以及存儲支持。用戶投票不需消耗 EOS,但 EOS 會被鎖定。用戶可以隨時申請贖回抵押的 EOS,申請贖回後 72 小時後到賬,同時,投票將被扣減。

此次漏洞事件發生在 EOS 贖回過程中,如果其他用戶抵押 EOS 給贖回用戶,系統首先將贖回用戶贖回過程中的 EOS 進行再次抵押。我們已經知道申請贖回的 EOS 需要 72 小時才能到賬,如前所訴,通過精心構造的攻擊理論上使得指定用戶資產進行無限期抵押,對用戶造成嚴重危害。

二、漏洞攻擊流程

  1. 假設被攻擊用戶擁有 0.0005 個正在贖回途中 EOS。

  1. 此時攻擊者向贖回用戶抵押 0.0001 個 EOS。

  1. 交易生效後,我們看到攻擊者的餘額沒有發生變化,而贖回用戶正在贖回途中的 0.0001 個 EOS 被迫再次進行抵押。

三、漏洞原理解析

攻擊流程圖中的攻擊命令如下:

cleos --wallet-url http://localhost:6666 --url http://mainnet.genereos.io:80 system delegatebw (attacker) (victim) 「0.0001 EOS」 「0.0000 EOS」 --transfer

由於攻擊者在調用命令時加入了--transfer 參數,在調用到抵押函數 delegatebw 時會調用 changbw 函數,此時 transfer 為 true

當 transfer 變量為 true 時,from 地址變成被攻擊對象的地址

接下來被攻擊對象的數據被修改,EOS 再次抵押

四、漏洞緩解方案

綜合以上分析,數字彗星團隊建議修改部分業務邏輯緩解和修復該抵押漏洞。

1.transfer 參數不管是否為 true,都應該直接在抵押發起方餘額中扣除(贖回過程不受此限制)

  1. 梳理相關業務邏輯,審查是否存在類似漏洞

五、漏洞分析總結

通過以上分析,通過精心構造的攻擊使得特定用戶資產進行無限期抵押,無法贖回。利用緩解方案的措施修補代碼能夠有效緩解和修復該漏洞。

六、參考引用

https://github.com/EOSIO/eos/issues/4273

數字彗星科技專注區塊鏈生態安全,真正解決區塊鏈至全網安全問題。團隊成員均是由全球頂級網絡安全攻防實戰的團隊創建,核心技術成員曾為 360、阿里巴巴、SUN 中國工程學院、國家部委等貢獻安全力量,對境外組織利用來竊取國家敏感信息的漏洞及時發現,提出臨時解決方案。

團隊個人均獲各項國家專利,曾多次在國內知名漏洞平臺提交可洩漏千萬級公民用戶數據的重大漏洞。 數字彗星科技的核心能力是區塊鏈企業安全服務,為區塊鏈生態企業保駕護航。

鏈聞 ChainNews:有謠言買入,有新聞賣出。


鏈聞作者:張東誼
版權聲明:文章為作者獨立觀點,不代表 鏈聞 ChainNews 立場。

相關推薦

推薦中...