首页密报 > 文章列表
NFT 借貸平臺需警惕,XCarnival被攻擊事件給我們哪些啟示?

2022年6月24日,成都鏈安鏈必應-區塊鏈安全態勢感知平臺輿情監測顯示,NFT 借貸協議 XCarnival 遭到攻擊,黑客獲利 3087 枚以太坊(約 380 萬美元)。XCarnival官方發推稱,目前智能合約已暫停,暫時不支持存款和借款操作,團隊將盡快確認具體情況。成都鏈安安全團隊第一時間對事件進行了分析,結果如下。

image.png

#攻擊過程

攻擊交易

0x60a3143c1c7a40d650e9e319d99425da5a87604f474279765f4ffbc0c4c375c2(其中一筆創建攻擊質押記錄)

0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35(其中一筆盜取資金的攻擊交易)

攻擊者地址

0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a

攻擊合約(利用多個合約進行轉移NFT)

0xc45876C90530cF0EE936c93FDc8991534F8A6962

0xA04EC2366641a2286782D104C448f13bF36B2304

0x234e4B5FeC50646D1D4868331F29368fa9286238

0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8

0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d

被攻擊合約

0xb38707e31c813f832ef71c70731ed80b45b85b2d (Xtoken)

0xb14b3b9682990ccc16f52eb04146c3ceab01169a (XNFT)


我們選擇一條典型的攻擊交易進行展開分析

1. 攻擊者先通過Tornado.cash提取資金120ETH作為攻擊準備。

image.png

2. 購買BAYCNFT,利用攻擊合約(0xf70F...cA8d)進行批量創建抵押記錄。

image.pngimage.png

在抵押時,並沒有限製Xtoken地址,導致地址可被攻擊者控製,因此在IXToken(xToken)(0xA04E...2304).borrow調用時,攻擊者傳入了自己事先部署的攻擊地址(如果是在正常合約中,質押之後記錄後同時會調用borrow函數借出資金),但是此處攻擊者的Xtoken中故意沒有借出資金,導致記錄的同時沒有借出錢,因此可以馬上提取質押的NFT。

image.pngimage.png

3. 有了抵押記錄後但是沒有借出資金,所以可以通過withdarw NFT取出被抵押的NFT,但是這裏的NFT被取出後並沒有更新Xtoken的質押記錄,只是更改了NFT是否被取出的標識。

image.png

4. 由於前面的步驟中抵押的NFT被取出但是對應的質押記錄仍然存在,因此攻擊者創建多個攻擊合約,再將反復轉移該NFT進行2-3中的步驟,創建多個異常的質押記錄。

image.png

5. 利用步驟4中創建的多個質押記錄借貸出大量資金,因為借出時Borrow驗證並沒有驗證NFT被取出的狀態,只是驗證了訂單ID。

image.pngimage.pngimage.png

#漏洞分析

本次攻擊主要利用了NFT抵押時合約中未檢查攻擊者傳入的xToken地址是否為項目方白名單中的地址,並且在借貸時,並未對抵押記錄的狀態進行檢測的漏洞,導致攻擊者反復使用無效的抵押記錄進行借貸。

image.png

#資金追蹤

攻擊發生後,被盜資金約3087ETH轉移2967ETH至(0xCA67...3586),120ETH轉入tornado.cash。

不過就在剛剛,XCarnival攻擊者已經返還1467枚ETH給項目方,因為上午XCarnival官方表示在攻擊者退還盜取資金的前提下將給予攻擊者1500枚ETH的賞金,並明確免除對此人的法律訴訟。

#總結

針對本次事件,成都鏈安安全團隊建議:

Xtoken的地址應該設置為白名單進行限製並驗證。項目在抵押借貸的業務當中應該針對抵押品的狀態進行多次驗證以防止狀態驗證未判斷導致資金被盜,同時NFT借貸平臺需要引起安全重視。此外建議項目上線前選擇專業的安全審計公司進行全面的安全審計,規避安全風險。

生成海报
请长按保存图片,将内容分享给更多好友