一文讀懂EOS抵押漏洞細節
星球君的朋友们
2018-06-26 12:07
本文约1048字,阅读全文需要约4分钟
你的安全意識該上線了。

編者按:本文來自數字彗星科技,經授權發布。

一、事件概述

一、事件概述

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。

三、漏洞原理解析

三、漏洞原理解析

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

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.梳理相關業務邏輯,審查是否存在類似漏洞。

五、漏洞分析總結

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


星球君的朋友们
作者文库