以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

?More than Re-entrancy : Revest Finance 被攻擊事件分析

Author:

Time:1900/1/1 0:00:00

DeFi項目RevestFinance遭到黑客攻擊,損失約200萬美元。BlockSecTeam團隊第一時間介入分析,并在tweeter上向社區分享了我們的分析成果。事實上,就在我們通過tweeter向社區分享我們的分析成果時,我們發現了RevestFinance的TokenVault合約中還存在著一個criticalzero-dayvulnerability。利用該漏洞,攻擊者可以用更加簡單的方式盜取協議中的資產。于是我們立刻聯系了RevestFinance項目方。在確定該漏洞已經被修復后,我們決定向社區分享這篇blog。

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。

香港金管局總裁:mBridge預計明年初可進入MVP階段,另有兩地央行正洽談加入:6月19日消息,香港金融管理局總裁余偉文在接受采訪時表示,多邊央行數字貨幣橋mBridge項目預計明年初可進入最簡可行產品(MVP)階段,除了中國內地、中國香港、泰國及阿聯酋四地央行,另有兩地央行正洽談加入,相信于MVP前會有更多央行參與。他還表示,在四地央行以外,mBridge現有15個央行或國際組織作為觀察成員,其中兩個正洽談加入,詳情稍后公布。余偉文坦言,暫不想擴展太大,盼先建立規模可控的合作平臺,以便在試驗階段洽談細節,建立平臺后再逐漸擴大網絡。

余偉文指出,此次到訪阿聯酋的行程系與該國商討如何解決一些難題,盼推進mBridge至MVP階段,令貿易結算更便宜快捷。他直言,現時困難之處不是技術層面,并列舉四大挑戰,分別為協調各地監管、平臺管治方法、確保本幣流動性,以及保障外幣流動性。[2023/6/19 21:46:38]

?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)

MUFG宣布Progmat Coin將很快被用于推出與日元掛鉤的穩定幣:金色財經報道, Megabank Mitsubishi UFJ Financial Group (MUFG) 宣布其穩定幣發行平臺Progmat Coin將很快被日本銀行用于在多個公共區塊鏈上推出與日元掛鉤的穩定幣,在6月2日的公告中,MUFG概述了Progmat Coin將用于促進在以太坊、Polygon、Avalanche 和 Cosmos 上發行銀行支持的穩定幣,未來將添加更多網絡。

MUFG 還透露,其區塊鏈技術和安全合作伙伴TOKI和Datachain正在搭建一座橋梁,以在支持的區塊鏈列表之間實現跨鏈交易、借貸和互換。該銀行預計跨鏈基礎設施將于2022年第二季度啟動。[2023/6/3 11:56:09]

假設當前系統中沒有其他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就完成了。

數據:某地址申領1555萬枚1INCH,并將300萬枚存入幣安:6月2日消息,據 Lookonchain 監測,北京時間 13:05:59,0x7459 開頭地址申領 1555 萬枚 1INCH(約 575 萬美元),并將 300 萬枚 1INCH(約 110 萬美元)存入幣安,目前該地址還持有 1255 萬枚 1INCH(約 464 萬美元)。[2023/6/2 11:54:34]

當UserX解鎖01-FNFT后,用戶B便可以通過withdrawFNFT提走underlyingasset。如圖二所示,UserB想要提取自己手中持有的25個01-FNFT質押的數字資產。

協議首先檢查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添加更多的抵押物。

?quantity=75->為75個01-FNFT追加質押。

報告:四月份38%的鏈上交易與游戲有關:金色財經報道,數據公司DappRadar在一份四月份市場數據報告中表示,區塊鏈游戲繼續占所有鏈上交易的很大一部分,4月份38%的加密貨幣鏈上交易與游戲有關,盡管與上個月相比,每日活躍錢包減少了10%(約672,000個)。報告表示,Splinterlands和Alien Worlds所在的區塊鏈WAX繼續占據榜首,但以太坊側鏈網絡Polygon可能會爭奪它的寶座。根據報告,Polygon是第二受歡迎的游戲區塊鏈。DappRadar報告稱,以太坊擴展解決方案Arbitrum在4月份的用戶數量也出現激增,與上個月相比增長了118%以上,而Immutable X增長了約9%。[2023/5/12 14:58:21]

?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添加更多的抵押物。

Zipmex首席執行官:拒絕辭職并將引入新的股東:金色財經報道,泰國加密貨幣平臺Zipmex的創始人兼首席執行官Marcus Lim表示,除非新的大股東強迫他辭職,否則他將繼續掌管公司。該公司上個月停止了客戶提款,但該高管聲稱要賠償所有受影響的用戶。動蕩導致客戶恐慌,其中一些人要求Lim辭職。據他們說,他糟糕的管理決策導致了Zipmex的問題。在最近接受《澳大利亞金融評論》采訪時,Lim聲稱在所有損失的資金都歸還給持有人之前,他不會辭職。為了實現這一目標,首席執行官打算引入新的大股東。(cryptopotato)[2022/8/22 12:40:28]

?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中。于是就有

?fnftId:2?asset:WETH?depositAmount:2.0*1e18(1.5*1e180.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。

在理解了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就獲得了(3600001)*1*1e18RENA的系統記賬。

最后攻擊者調用withdrawNFNFT函數,burn掉360,001枚02-FNFT,取走了360,001*1e18RENA。

當用戶調用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代幣。?

很顯然,使用這種方式進行攻擊,比真實的重入攻擊更加簡單直接。

3.項目方的修復方式

由于TokenVault?and?FNFTHandler?兩個漏洞合約存儲了許多關鍵的狀態,無法在短時間內重新部署它們,為了快速恢復使用,RevestFinance官方重新部署了Revest?合約(https://etherscan.io/address/0x36c2732f1b2ed69cf17133ab01f2876b614a2f27#code)的精簡版本。該版本關閉了大部分復雜的功能,以避免被進一步攻擊。項目方將在未來遷移狀態并重新部署修復過的合約。

安全性不是一件容易的事情。除了代碼審計,我們認為社區應該采取更加主動的方式,例如項目監控預警、甚至是攻擊阻斷使得DeFi社區更加安全。(https://mp.weixin.qq.com/s/o41Da2PJtu7LEcam9eyCeQ).參考文獻

*:https://blocksecteam.medium.com/revest-finance-vulnerabilities-more-than-re-entrancy-1609957b742f

Tags:NFTFNFAMODEPMUCNFT價格FNF幣DIAMONDSDEP幣

中幣交易所
周彥靈:比特幣大漲大跌打回寬幅區間 以太深V筑底以待時機_POLY:GON

周彥靈:4.21比特幣大漲大跌打回寬幅區間以太深V筑底以待時機沖不沖?我指的不是行情,而是對于交易方面要不要再下手的意思,你們別忘了,雖然一天內有大幅度上漲和下跌.

1900/1/1 0:00:00
Gate.io 將進行 BTC 結算永續合約升級公告(明晚 22:00)

Gate.io將於2022年4月20日22:00~22:10進行BTC算的永續合約引擎升級,時間約爲10分鐘.

1900/1/1 0:00:00
數字藏品市場LimeWire完成逾1000萬美元代幣私募融資_WIRE:LimeWire Token

4月21日消息,藝術和娛樂數字藏品市場LimeWire宣布在LMWR私募代幣銷售中籌集到逾1000萬美元,KrakenVentures、ArringtonCapital和GSR領投.

1900/1/1 0:00:00
“幣安合約第 1 層區塊鏈代幣交易大賽”、“BNX U本位合約交易大賽”活動結束公告_COI:coinbase注冊教程

親愛的用戶: “幣安合約第1層區塊鏈代幣交易大賽”、“BNXU本位合約交易大賽”活動已結束。“幣安合約第1層區塊鏈代幣交易大賽”、“BNXU本位合約交易大賽”Circle將完全控制USDC的發行.

1900/1/1 0:00:00
XT.COM關於暫停DOT, KSM充提的公告_HTT:htt幣價格今日行情

尊敬的XT.COM用戶:因DOT,KSM錢包升級維護,XT.COM現已暫停DOT,KSM充提業務.

1900/1/1 0:00:00
XT.COM關於支持ERR合約更換的公告_COM:HTT

尊敬的XT.COM用戶:應ERR項目方要求,ERR將更換新的合約地址。新合約地址:https://polygonscan.com/token/0xFB32513135e3267995268E30.

1900/1/1 0:00:00
ads