2022年3月27日,以太坊上的stakingDeFi項目RevestFinance遭到黑客攻擊,損失約200萬美元。BlockSecTeam團隊第一時間介入分析,并在tweeter上向社區分享了我們的分析成果。事實上,就在我們通過tweeter向社區分享我們的分析成果時,我們發現了RevestFinance的TokenVault合約中還存在著一個criticalzero-dayvulnerability。利用該漏洞,攻擊者可以用更加簡單的方式盜取協議中的資產。于是我們立刻聯系了RevestFinance項目方。在確定該漏洞已經被修復后,我們決定向社區分享這篇blog。
0.What'stheRevestFinanceFNFT
RevestFinance是針對DeFi領域中staking的解決方案,用戶通過RevestFinance參與的任何DeFi的staking,都可以直接生成一個NFT,即FNFT(FinanceNon-FungibleToken),該NFT代表了這個staking倉位的當前以及未來價值。用戶可以通過RevestFinance提供的3個接口和項目進行交互。質押自己的數字資產,mint出相應的FNFT。
?mintTimeLock:用戶質押的數字資產在一段時間之后才能被解鎖。
?mintValueLock:用戶質押的數字資產只有在升值或者貶值到預設數值才能被解鎖。
?mintAddressLock:用戶質押的數字資產只能被預設的賬戶解鎖。
RevestFinance通過以下3個智能合約完成對用戶存入的數字資產的鎖定和解鎖。
?FNFTHandler:繼承自ERC-1155token(openzepplin實現)。每次執行lock操作時,fnftId會進行自增(fnftId類似于ERC721中的tokenId)。FNFT在被創建時,用戶需要指定它的totalSupply。當用戶想要提走FNFT背后的underlyingasset,需要burn掉相應比例的FNTF。
分析師:持有5.9萬億枚PEPE的Smart Money地址全部拋售或需4.6萬年時間:4月19日消息,Conotoxia Ltd. 市場分析師 Grzegorz Drozdz 針對近日某 Smart Money 地址 4 日前斥資 0.125 ETH 買入 5.9 萬億枚 PEPE 獲利 4500 倍」的消息發表觀點表示,由于 PEPE 的流動性問題,該 Smart Money 地址將難以實現這一理論上的利潤,假設市場對 PEPE 的買入需求不會下降,全部拋售這些資產也需要 46,200 年的時間,反而開始拋售后很快就會導致價格跌至(甚至低于)買入水平。
此前報道,據 Lookonchain 數據顯示,某SmartMoney地址于 4 天前在 Uniswap 平臺將 0.125 枚 ETH(約合 251 美元)兌換為 5.9 萬億枚 PEPE。以當時 PEPE 報價 0.0000001933 美元計算,該地址囤積的 5.9 萬億枚 PEPE 的價值已達到 114 萬美元,若能以當前價格全部出售(目前暫未出售),本次投資回報將達到 4500 倍。[2023/4/19 14:13:58]
?LockManage:記錄FNFT被解鎖(unlock)的條件。
?TokenVault:接收和發送用戶存入的underlyingasset,并記錄每一種FNFT的metadata。例如fnftId=1的FNFT背后質押的資產類型。
因為此次攻擊,黑客攻擊的入口是mintAddressLock函數,那么我們以該函數為例,講述FNFT的生命周期。
UserA調用Revest的mintAddressLock函數
?unlocker:UserX->只有UserX可以解鎖這筆資產?recipients:?quantities:->mint數量為100(sum(quantities)),UserA,UserB,UserC各擁有50,25,25枚。?asset:WETH->mint出的FNFT以WETH為抵押品。?depositAmount:1e18->每一枚FNFT背后的抵押品數量為1枚WETH(WETHdecimal為18)
數據:今日1402枚XMON解鎖是代幣價格暴跌95%主因,巨鯨yfimaxi.eth損失達120萬美元:金色財經報道,據鏈上分析師Lookonchain披露數據顯示,由于Sudoswap Lockdrop結束,今日1402枚XMON解鎖,解鎖時價格約為3450萬美元,但當前價值僅約500萬美元。由于代幣解鎖導致XMON價格從24,600美元下跌95%至1,236美元低點,其中巨鯨yfimaxi.eth損失達到120萬美元,該巨鯨以23,112美元價格購入60.8 XMON,今日以3,119美元售出44.5 XMON,通過鎖定XMON代幣yfimaxi.eth總計獲得623,110枚SUDO,價值約合120萬美元。[2023/3/2 12:39:13]
假設當前系統中沒有其他FNFT,UserA通過mintAddressLock與系統進行交互,FNFTHandler返回的fnftId=1
LockManger為其添加相應的記錄
?fnftId:1?unlocker:UserX
TokenVault為其添加相應的記錄
?fnftId:1?asset:WETH?depoistAmount:1e18
接著TokenValut要從UserA這里轉走100*1e18數量的WETH。
最后系統分別給UserA,UserB,UserCmint50,25,25枚01-FNFT。
通過mintAddressLock函數鑄造FNFT就完成了。
當UserX解鎖01-FNFT后,用戶B便可以通過withdrawFNFT提走underlyingasset。如圖二所示,UserB想要提取自己手中持有的25個01-FNFT質押的數字資產。
破產文件顯示FTX Ventures財務數據混亂,資金無法追蹤:金色財經報道,新的破產文件表明,FTX Ventures財務數據混亂,資金無法追蹤。文件顯示,FTX Ventures既投資于其他公司又接受投資,將其資金分散在Clifton Bay Investments LLC、FTX Ventures Ltd、Island Bay Ventures Inc和“潛在的附屬公司”。此外,根據新任FTX CEO John Ray的說法,Clifton Bay Investments和FTX Ventures是唯一編制季度財務報表的實體。甚至還沒有找到Island Bay Ventures的財務報表。9月30日的資產負債表顯示,FTX Ventures的資產為4.93億美元,其中大部分歸屬于“投資”項下,FTX Ventures的總負債為4.92億美元。
此前報道,前Lightspeed Ventures合伙人、FTX Ventures負責人Amy Wu上周五宣布辭職。[2022/11/18 13:19:32]
協議首先檢查01-FNTF是否已經unlock,如果已經unlock,那么協議會burn掉UserB的25個01-FNFT,并給他轉25*1e18數量的WETH。此時01-FNFT的totalSupply為75。
Revest合約還提供了另外一個接口,叫做depositAdditionalToFNFT,以便讓用戶為一個已經存在的FNFT添加更多的underlyingasset。下面我們用2張圖描述它的“正常”用法。
這里有三種情況
一.quantity==01-FNFT.totalSupply()如圖三所示
以圖二中的場景為上下文,UserA要為01-FNFT添加更多的抵押物。
以太坊公共測試網Ropsten將于6月初進行PoS合并:金色財經消息,以太坊的主要公共測試網Ropsten將于6月初進行權益證明(PoS)合并,這是以太坊主區塊鏈可以切換到權益證明共識之前的最后準備工作之一,當前工作量證明鏈與新的權益證明鏈的測試合并預計將于6月8日進行。
以太坊研究工具EthHub聯合創始人Anthony Sassano估計,主網上的合并最早可能在8月發生,但尚未提供官方時間表。(THE BLOCK)[2022/5/19 3:26:44]
?quantity=75->為75個01-FNFT追加質押。
?amount=0.5*1e18->每一枚01-FNFT追加0.5*1e18數量的WETH。
于是UserA需要向TokenVault轉入37.5*1e18WETHTokenVault修改系統記賬,將depositAmount修改為1.5*1e18。現在每一枚01-FNFT承載的資產為1.5*1e18WETH。
此時UserC調用withdrawFNFT,burn掉他持有的25枚01-FNFT,他可以拿走25*(1.5*1e18)=37.5*1e18WETH。
于是,此時01-FNFT的totalSupply為50。
二.quantity<01-FNFT.totalSupply()如圖四所示
以圖三中的場景為上下文,UserA繼續為01-FNFT添加更多的抵押物。
?quantity=10->為10枚01-FNFT追加質押。?amount=0.5*1e18->為10枚01-FNFT每一枚追加0.5*1e18WETH
由于quantity<01-FNFT.totalSupply()于是,UserA向協議支付5*1e18WETH系統將會burn掉10枚01-FNFT,mint出10枚02-FNFT,并將burn掉的10枚01-FNFT承載的資產和UserA新轉入的資產,注入到02-FNFT中。于是就有
Polygon 正與安永合作啟動專為企業設計的 Layer 2 Rollup 方案 Polygon Nightfall:5月17日消息,Polygon 正與安永合作在主網上啟動專為企業設計的 Layer 2 Rollup 解決方案 Polygon Nightfall,Polygon Nightfall 結合了 Optimistic Rollup 和零知識(ZK)密碼學的概念,可為希望采用以太坊的公司提供可訪問性和隱私性。[2022/5/17 3:22:01]
?fnftId:2?asset:WETH?depositAmount:2.0*1e18(1.5*1e18+0.5*1e18)
此時
?01-FNFT.totalSupply:4001-FNFT.depositAmount:1.5*1e18?02-FNFT.totalSupply:1002-FNFT.depositAmount:2.0*1e18
三.quantity>01-FNFT.totalSupply()
這種情況,交易會revert。
1.What'ttheRe-entrancyvulnerability
在理解了mintAddressLock函數和depositAdditionalToFNFT函數的基本工作流程后,來看一下攻擊者使用的重入手法。假定thelastestfnftId=1
如圖五所示第一步:攻擊者調用mintAddressLock函數
?depositAmount=0
?quantities=
mint出了2枚01-FNFT,由于攻擊者將depositAmount設置為0,因此他沒有轉入任何數字資產。相當于01-FNFT背后承載的underlyingasset為0。
第二步:攻擊者再次調用mintAddressLock函數
?depositAmount=0
?quantities=準備mint36w枚02-FNFTdepositAmount為0。
在mint的最后一步,攻擊者利用ERC-1155的call-back機制重入了depositAdditionalToFNFT函數。
在depositAdditionalToFNFT中,攻擊者傳入
?quantity=1
?amount=1*1e18
?fnftId=1
因為quantity<fntfId.totalSupply(),因此協議會burn掉攻擊者1枚01-FNFT,鑄造1枚02-FNFT。(02-FNFT在協議中已經存在,但是fnftId更新延遲)然后修改fnftId=2的depositAmount為amount。相信你已經發現,這一步,攻擊者通過重入將fnftId=2的depositAmount從0修改為1.0*1e18,僅僅花費1*1e18RENA就獲得了(360000+1)*1*1e18RENA的系統記賬。
最后攻擊者調用withdrawNFNFT函數,burn掉360,001枚02-FNFT,取走了360,001*1e18RENA。
建議修復方法
2.theNewZero-dayVulnerability
在blockSecTeam團隊分析RevestFinance的代碼時,handleMultipleDeposits函數引起了我們的注意。
當用戶調用depositAdditionToNFT函數追加抵押物時,該函數會改變FNFT的depositAmount。從代碼中我們可以發現,當newFNFTId!=0時,該函數既改變了fnftId對應的FNFT的depositAmount也改變了newFNFTId對應的depositAmount。
按照常理,當newFNFTId!=0時,系統應該只記錄newNFTId對應的depositAmount。不應該改變fnftId對應的depositAmount。
我們認為這是一個非常嚴重的邏輯bug,利用該漏洞,攻擊者可以很輕松提走系統中的數字資產。下面用3張圖描述模擬攻擊的原理。假定thelatestfnftId=1
首先攻擊者調用mintAddressLock函數,mint出360000個01-FNFT。攻擊者將amount設置為0因此他不必轉入任何資產到RevestFinance協議中。mint結束后,攻擊者擁有360000枚depositAmount=0的01-FNFT。
然后攻擊者調用depositAdditionalToFNFT函數,參數如下
?fnftId=1
?amount=1*1e18
?quantity=1
協議轉走攻擊者amount*quantity數量的代幣,即1*1e18RENA協議會burn掉攻擊者1枚01-FNFT,并為其鑄造一枚02-FNFT按照handleMultipleDeposits函數中的邏輯,fnftId=2的資產,其depositAmount會被設置為1.0*1e18。但是fnftId=1的資產,其depositAmount也會被設置為1.0*1e18,而這個值本應該為0!
第三步,攻擊者直接提款,將手中所有的01-FNFT提現。不考慮gas費,他將凈賺359,999*1e18數量的REAN代幣。
很顯然,使用這種方式進行攻擊,比真實的重入攻擊更加簡單直接。
建議修復方法
針對該漏洞,blockSecTeam團隊給出了相應的patch方法。
3.項目方的修復方式
由于TokenVaultandFNFTHandler兩個漏洞合約存儲了許多關鍵的狀態,無法在短時間內重新部署它們,為了快速恢復使用,RevestFinance官方重新部署了Revest合約(https://etherscan.io/address/0x36c2732f1b2ed69cf17133ab01f2876b614a2f27#code)的精簡版本。該版本關閉了大部分復雜的功能,以避免被進一步攻擊。項目方將在未來遷移狀態并重新部署修復過的合約。
4.總結
提升DeFi項目的安全性不是一件容易的事情。除了代碼審計,我們認為社區應該采取更加主動的方式,例如項目監控預警、甚至是攻擊阻斷使得DeFi社區更加安全。(https://mp.weixin.qq.com/s/o41Da2PJtu7LEcam9eyCeQ).
參考文獻
*:https://blocksecteam.medium.com/revest-finance-vulnerabilities-more-than-re-entrancy-1609957b742f
據最新消息,波場去中心化算法穩定幣USDD發行總額為242,138,906美元,突破2.4億美元,對應TRX銷毀量為3,037,999,231TRX,超30億枚TRX.
1900/1/1 0:00:00你是游戲開發的行家嗎?對于SolanaRiptide黑客馬拉松,Orca為基于我們旗艦NFT項目Orcanauts建造的最好的游戲提供了一份特別的獎勵! 如何贏取 從2月2日到3月17日.
1900/1/1 0:00:002019年,扎克伯格旗下的Facebook發布Libra白皮書,試圖創造一個符合互聯網時代特點的超越主權范圍的加密幣,但僅僅運行數月,Libra協會就突然瓦解.
1900/1/1 0:00:00摘要 「政策動向」: -美國財政部確認,加密礦工、錢包提供商不受國稅局稅收報告的約束-美國SEC對加密借貸公司BlockFi處以創紀錄的1億美元罰款-俄羅斯經濟部提出加密挖礦合法化-Binanc.
1900/1/1 0:00:00但我不認為Web3僅僅是一組新技術。更是一種新的模式。個人和企業通過尊重他們自由和選擇的網絡進行互動,使他們能夠管理自己的生活.
1900/1/1 0:00:00社區是一個長期的過程.創造暫時的關注是一回事,但培養有意義的關系群體并團結整個社區在一段時間內貢獻他們的時間和精力是另一回事.
1900/1/1 0:00:00