1月3日,Radiant Capital項目遭受了一次嚴重的閃電貸攻擊,導致了1900枚ETH(約450萬美元)的損失。Radiant Capital是一個去中心化的跨鏈借貸協議,它允許用戶在不同的區塊鏈上存入和借出各種資產,從而消除流動性孤島。
根據鏈上數據顯示,黑客利用了一個新市場激活的時間窗口,以及Compound/Aave代碼庫中的一個舍入問題,來執行一個閃電貸攻擊。這種攻擊方式是指借用大量的資金,在一個區塊內完成一系列的操作,然後在區塊結束前歸還資金,從而獲利。
漏洞攻擊簡要
根據PeckShield和派盾的報告,攻擊者利用了Radiant Capital的一個計算漏洞,通過控制精度和四捨五入的方式,使得他們可以以低價提取大量的USDC。USDC是一種穩定幣,它的價值與美元掛鉤,是去中心化金融協議中常用的資產之一。
攻擊者的攻擊流程如下:
1. 攻擊者首先通過AAVE閃電貸借貸了300萬枚USDC,用於攻擊啓動資金。閃電貸是指借用大量的資金,在一個區塊內完成一系列的操作,然後在區塊結束前歸還資金,從而獲利。
2. 攻擊者將200萬枚USDC質押到Radiant合約,並獲得了200萬枚rUSDCn憑證代幣。
3. 攻擊者通過Radiant合約進行閃電貸,借貸200萬USDC,並在回調函數中將200萬USDC歸還,同時將第二步質押的USDC提取出來,最後閃電貸函數會調用transferfrom函數連本帶利的將攻擊者的USDC轉入合約。此時會收取9/10000的手續費,而收取的手續費便成爲了池子的流動性。
4. 攻擊者通過多次重複步驟3的操作,將liquidityIndex控制得很大,liquidityIndex=271800000000999999999999998631966035920。liquidityIndex是Radiant合約中用來記錄流動性增長的變量,它會隨着時間和利息的累積而增加。
5. 接下來,攻擊者新建了一個合約,並向其中打入54.36萬USDC,因爲5436(USDC數值)正好是步驟4中2718(liquidityIndex數值)的兩倍,可方便進行四捨五入控制。
6. 攻擊者將54.36萬USDC全部抵押進Radiant合約,並獲得相同數量的rUSDCn。
7. 攻擊者提取40.77萬USDC,本應該銷燬40.77萬rUSDCn,但如上所述,burn函數進行了精度擴展與四捨五入計算。407700000000000000000000000000000000000/271800000000999999999999998631966035920=1.49999999,而四捨五入結果爲1,導致結果偏小了1/3。如下圖,本該銷燬40.77萬,但還剩27.18萬,說明只銷毀了27.18萬,攻擊者便提取了40.77萬USDC。
8. 攻擊者利用第七步的漏洞,重複質押提取操作,並且提取始終比質押數量多1/3,最終將池子裏的USDC全部兌換出來。
當前資金沒有面臨風險
Radiant Capital在其官方帖子中承認了這一問題,並表示已經暫停了其在Arbitrum上的借貸市場,正在調查事件的原因和影響。Arbitrum是一個二層擴展解決方案,它可以提高以太坊的交易速度和降低成本。Radiant Capital還表示,目前沒有用戶的資金面臨風險,計劃在問題解決後發佈檢測報告,並恢復運營。
結語:
這一事件再次提醒了我們,去中心化金融協議的安全性是至關重要的,需要不斷地進行審計和測試,以防止潛在的漏洞和攻擊。用戶也應該注意風險,只在信任的平臺上參與借貸和投資。Radiant Capital雖然遭受了重大損失,但也表現出了積極的態度和責任感,希望它能儘快恢復並改進其協議的安全性和穩定性。同時,我也希望其他的去中心化金融協議能夠從這一事件中吸取教訓,加強自身的安全防範,爲用戶提供更好的服務和體驗。#RadiantCapital #黑客攻击