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

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

Author:

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

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。

谷歌云正在策劃更多以Web3為中心的產品:金色財經報道,谷歌云Web3負責人James Tromans表示,谷歌云正在策劃更多以Web3為中心的產品,使其計算產品成為行業公司和開發人員的首選。谷歌云最近推出了一項旨在支持Web3領域參與者的啟動計劃。Tromans表示,谷歌云將繼續在 BigQuery(谷歌的“無服務器數據倉庫”)上提供以太坊等鏈上數據集,其云計算服務部門繼續以與其區塊鏈節點引擎相同的方式構建服務,幫助客戶成為Web3生態系統中的變革性參與者是該公司使命的核心部分。該高管沒有詳細說明可能正在制定的任何具體舉措。[2023/7/22 15:51:47]

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

假設當前系統中沒有其他FNFT,UserA通過mintAddressLock與系統進行交互,FNFTHandler返回的fnftId=1

加密投資基金SevenX Ventures向跨鏈DID .bit成功申領sevenx.bit:9月15日,加密投資基金SevenX Ventures通過其官方社交媒體向跨鏈DID.bit成功申領了保留賬戶sevenx.bit。據悉,.bit通過引用第三方數據源保留的賬戶,在規定時間內成功發起申領就可以按注冊費獲得該賬戶。

此前報道,8月15日,跨鏈DID.bit宣布完成1300萬美元A輪融資,,CMB International領投,HashKey Capital, SevenX Ventures, QingSong Fund, GSR Ventures, GGV Capital與SNZ參投。9月14日,加密投資基金SevenX Ventures完成第三期基金首次募集,共募集8000萬美元。[2022/9/15 6:59:14]

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質押的數字資產。

協議首先檢查01-FNTF是否已經unlock,如果已經unlock,那么協議會burn掉UserB的25個01-FNFT,并給他轉25*1e18數量的WETH。此時01-FNFT的totalSupply為75。

以太坊合并進度完成96.54%,全網算力跌破900 TH/S:8月19日消息,據OKLink多鏈瀏覽器“以太坊合并倒計時”數據顯示,當前以太坊合并進度已完成96.54%,按照當前網絡情況計算,合并預計將于9月15日進行。當前以太坊全網算力886.65TH/S,其中Top5礦池擁有520.09TH/S算力,占比全網算力93.56%。[2022/8/19 12:36:19]

Revest合約還提供了另外一個接口,叫做depositAdditionalToFNFT,以便讓用戶為一個已經存在的FNFT添加更多的underlyingasset。下面我們用2張圖描述它的“正常”用法。

這里有三種情況

一.quantity==01-FNFT.totalSupply()如圖三所示

以圖二中的場景為上下文,UserA要為01-FNFT添加更多的抵押物。

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

印度今年迄今為止有400多個加密廣告違反其指導方針:金色財經報道,印度廣告標準委員會(ASCI)透露,今年迄今為止有400多個加密廣告違反了其指導方針。在所有投訴中,有419個加密貨幣廣告需要修改,并指出大多數投訴涉及影響者。印度有兩套適用于大多數加密廣告的指南。一個涵蓋了加密貨幣、加密交易所和NFT的推廣和廣告。該標準由ASCI于今年2月發布,并于今年4月生效。另一套指導方針于去年6月生效,對網紅的廣告和營銷活動進行了規范。

今年5月,印度證券交易委員會(SEBI)提議禁止包括名人和運動員在內的公眾人物為加密產品和服務做廣告和背書。證券監管機構還提議,公眾人物在推廣加密產品時的任何違法行為都應被追究責任。(news.bitcoin)[2022/6/29 1:39:00]

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

?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

以色列風投公司Pitango旗下基金創建投資DAO,并計劃發行代幣:金色財經消息,以色列最大風投公司Pitango推出了一個去中心化自治組織(DAO),以投資Web3項目。

據悉,Pitango的基金名為“Pitango First”,已推出First Labs,且創建了一個名為“First DAO”的去中心化自治組織。

“我們正在打破傳統的風險投資模式,并將發行代幣,”Pitango的First Labs負責人Aviv Barzilay在接受采訪表示。但Barzilay拒絕透露代幣發行的時間、Tokenomics的細節以及DAO推出的投資金額。

據了解,Pitango管理著約30億美元的資產。(The Block)[2022/6/7 4:09:09]

三.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

Tags:NFTFNFITADEP

加密貨幣
MixMarvel 3月月報:MixMarvel DAO Venture建立,DeHero表現強勁-ODAILY_Marvel:MixMarvel

三月總結 MixMarvelDAOVenture3月,MixMarvel成立了去中心化投資組織MixMarvelDAOVenture,已準備好進入專業投資和孵化高質量Web3項目和團隊的階段.

1900/1/1 0:00:00
保護區塊鏈行業與市場,波場聯合儲備繼續大力度增持儲備金-ODAILY_加密貨幣:Isiklar Coin

據官方消息,為保護整個區塊鏈行業和加密市場,波場聯合儲備繼續大力度增持儲備金。5月12日,波聯儲官方宣布,已先后買入1000枚BTC、1,467,612,695枚TRX及100,000,000枚.

1900/1/1 0:00:00
Paraluni攻擊事件分析-ODAILY_POS:PARETO價格

1.前言 北京時間2022年03月13日,知道創宇區塊鏈安全實驗室監測到BSC上Paraluni項目遭到攻擊,黑客獲利約170萬美金。知道創宇區塊鏈安全實驗室將對本次事件深入跟蹤并進行分析.

1900/1/1 0:00:00
V神直言歡迎加密冬天,五大因素影響后市-ODAILY_NFT:XETH幣

2022年2月11日至2月20日,為期10天的ETHDenver會議在美國丹佛市順利落幕。這是目前規模最大、持續時間最長的ETH活動.

1900/1/1 0:00:00
DAOrayaki:輕量級MACI匿名化協議-ODAILY_ORA:Seigniorage Shares

https://doraresear.ch/2022/04/30/light-weight-maci-anonymization/ 更多閱讀: 1.

1900/1/1 0:00:00
AC新項目有多火?一夜之間引爆Fantom的Vampire War-ODAILY_EDAO:EDA

還記得曠日持久的CurveWar嗎?協議們為了話語權激烈廝殺。現在,「CurveWar」在Fantom鏈上被復制,受到YFI創始人AndrewCronje的號召,所有人的目光都聚焦在Fantom.

1900/1/1 0:00:00
ads