一文讀懂EOS抵押漏洞細節區塊鏈
你的安全意識該上線了。
針對前段時間EOS漏洞問題,本文將進行整體細節的回顧,希望大家提起安全意識,但也不要過度恐慌,正確看待安全問題。
一、事件概述
6月22日凌晨,EOS官方社區發布消息稱:發現EOS漏洞,用戶抵押投票的代幣在漏洞修復之前都無法贖回。隨后我們根據相關消息對該漏洞進行驗證確認該漏洞確實存在,且在漏洞修復前,通過精心構造的攻擊使得特定用戶資產進行無限期抵押,無法贖回。
我們知道EOS采用DPoS共識機制,該機制通過社區投票選舉21個超級節點來維護EOS網絡,為EOS網絡提供算力、帶寬以及存儲支持。用戶投票不需消耗EOS,但EOS會被鎖定。用戶可以隨時申請贖回抵押的EOS,申請贖回后 72小時后到賬,同時,投票將被扣減。
此次漏洞事件發生在EOS贖回過程中,如果其他用戶抵押EOS給贖回用戶,系統首先將贖回用戶贖回過程中的EOS進行再次抵押。我們已經知道申請贖回的EOS需要72小時才能到賬,如前所訴,通過精心構造的攻擊理論上使得指定用戶資產進行無限期抵押,對用戶造成嚴重危害。
二、漏洞攻擊流程
1.假設被攻擊用戶擁有0.0005個正在贖回途中EOS。
2.此時攻擊者向贖回用戶抵押0.0001個EOS。
3.交易生效后,我們看到攻擊者的余額沒有發生變化,而贖回用戶正在贖回途中的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,都應該直接在抵押發起方余額中扣除(贖回過程不受此限制);
2.梳理相關業務邏輯,審查是否存在類似漏洞。
五、漏洞分析總結
通過以上分析,通過精心構造的攻擊使得特定用戶資產進行無限期抵押,無法贖回。利用緩解方案的措施修補代碼能夠有效緩解和修復該漏洞。
1.TMT觀察網遵循行業規范,任何轉載的稿件都會明確標注作者和來源;
2.TMT觀察網的原創文章,請轉載時務必注明文章作者和"來源:TMT觀察網",不尊重原創的行為TMT觀察網或將追究責任;
3.作者投稿可能會經TMT觀察網編輯修改或補充。