以太坊上feiprotocol 和RariCapital 協議中的多個池子遭到重入攻擊,導致超8000 萬美元損失!前言
北京時間2022 年4 月30 日,知道創宇區塊鏈安全實驗室監測到以太坊上feiprotocol 和RariCapital 協議中的多個池子遭到重入攻擊,導致損失超8000 萬美元。
知道創宇區塊鏈安全實驗室第一時間跟踪本次事件並分析。
基礎信息
眾所周知,compound 項目的代碼本就存在一些安全問題,而feiprotocol 和RariCapital協議延用了compound 的代碼庫,同時在doTransferOut() 方法的實現中使用了存在重入的寫法,導致了事件的發生。
因此次事件中的多次攻擊方式相同,本文僅對一次攻擊進行分析。
攻擊者地址:0x6162759edad730152f0df8115c698a42e666157f
攻擊合約:0x32075bad9050d4767018084f0cb87b3182d36c45
tx:0xadbe5cf9269a001d50990d0c29075b402bcc3a0b0f3258821881621b787b35c6
CEtherDelegator合約:0xfbD8Aaf46Ab3C2732FA930e5B343cd67cEA5054C
漏洞分析
漏洞關鍵在於CEtherDelegator 合約中的doTransferOut 方法使用了call 方法進行代幣轉移,而在使用時並未對其進行gas限制,導致能夠被利用實現重入攻擊;
其次,合約在對用戶進行借貸放款時,並未實行檢查-生效-交互的模式,更新抵押資產價值在放款之後,使得攻擊者能夠在藉款之後進行函數回調;
最為關鍵的一點是,攻擊者在藉款後調用了exitMarket()函數退出借款的市場,之後對抵押品進行贖回,由於此時攻擊者已退出市場,因而協議不會計算這筆借款,所以能夠成功贖回抵押品。
攻擊流程
1、攻擊者使用閃電貸貸款並抵押到協議中;
2、攻擊者藉出ETH,隨後觸發重入;
3、調用exitMarket() 函數退出借款的市場,並取出抵押品;
4、歸還閃電貸;
5、成功賴賬套利,免費借出ETH;
6、最後,攻擊者重複攻擊手法對協議中的池子進行攻擊,成功套利約8000 萬美元。
總結
本次攻擊事件核心是協議引用了存在重入漏洞的compound 代碼庫,導致合約發生重入攻擊。
建議項目方在編寫項目時,應始終使用檢查-生效-交互的模式,並在合約中應用重入鎖,在發送以太幣時一定要限制gas 或者使用thransfer(),一定不要使用存在安全問題的項目代碼。
在此提醒項目方發布項目後一定要將私鑰嚴密保管,謹防網絡釣魚,另外,近期,各類合約漏洞安全事件頻發,合約審計、風控措施、應急計劃等都有必要切實落實。
展開全文打開碳鏈價值APP 查看更多精彩資訊