木星链 木星链
Ctrl+D收藏木星链
首页 > OKB > 正文

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

作者:

时间: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。

Louis Vuitton宣布推出标志性行李箱作为数字收藏品:金色财经报道,法国奢侈品牌 Louis Vuitton 宣布推出标志性行李箱作为数字收藏品,该系列的最新设计名为 VIA Treasure Trunk,它被设计为灵魂绑定令牌 (SBT),可让所有者解锁 Louis Vuitton 设计公司 Maison 的作品。此外,Treasure Trunk 还将授予访问 VIA 的权限,VIA 是路易威登通往数字收藏品世界的门户。

每个 Treasure Trunk 的标价为 39,000 欧元,数量“只有几百个”可供购买。路易威登爱好者需要在 6 月 8 日使用加密钱包在等候名单上注册。[2023/6/6 21:19:32]

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

Bigg Digital Assets:确认在SilverGate以及硅谷银行都没有风险敞口:金色财经报道,加拿大加密货币公司Bigg Digital Assets称,确认在SilverGate以及硅谷银行都没有风险敞口。[2023/3/11 12:55:24]

假设当前系统中没有其他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质押的数字资产。

协议首先检查01-FNTF是否已经unlock,如果已经unlock,那么协议会burn掉UserB的25个01-FNFT,并给他转25*1e18数量的WETH。此时01-FNFT的totalSupply为75。

Revest合约还提供了另外一个接口,叫做depositAdditionalToFNFT,以便让用户为一个已经存在的FNFT添加更多的underlyingasset。下面我们用2张图描述它的“正常”用法。

ETH Research Grant首轮资助二次方投票在DoraHacks.io正式开启:1月16日消息,以太坊研究长期资助Grant(ETH Research Grant)首轮二次方投票已在开发者激励平台DoraHacks.io正式开启。本次投票将首次使用基于PLONK系统的零知识投票(DoraHacks MACI-PLONK)。1月15日-1月20日,vcDORA社区可以通过DoraHacks平台为所支持的项目进行投票,零知识投票结果将决定首期5000美金Grant分配。

ETH Research Grant旨在长期资助以太坊社区的开发者和研究者,资助课题覆盖账户抽/ERC4337,零知识证明,DeGov,Data Availability,Rollups,zkEVM/zkVM,ERC/EIP,以及以太坊应用采用等。

在第一轮19个BUIDL团队中,5个BUIDL进入Grant,分别是Eigen Network,Soul Wallet,EthStorage,ERC1155Delta,ZKSAFE。[2023/1/16 11:14:16]

这里有三种情况

一.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。

伊朗拟起诉元宇宙公司“煽动行为”:10月12日消息,伊朗计划起诉美国技术公司元宇宙存在与伊朗反政府抗议活动有关的“煽动行为”。据迈赫尔通讯社报道,伊朗内政部副部长马吉德·米尔-艾哈迈迪10日说,元宇宙平台公司旗下两大社交网络Instagram和WhatsApp参与传播煽动性材料,并参与危害我们的国家安全,这是我们敌人阴谋行动的一部分。报道称,在三周多前伊朗这场抗议活动开始后不久,伊朗政府不仅对互联网采取了大规模限制,还封禁了在伊朗极受欢迎的Instagram和WhatsApp。[2022/10/12 10:31:43]

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

?fnftId:2?asset:WETH?depositAmount:2.0*1e18(1.5*1e18+0.5*1e18)

可口可乐与数字时装店DressX达成合作,将推出限量版Dreamworld元宇宙服装:8月11日消息,可口可乐与数字时装店DressX达成合作,该合作伙伴关系是创作部门Dreamland的一部分。同时推出新限量版Dreamworld口味将于8月15日在美发售。

此外,可口可乐还宣布与DressX达成合作打造数字空间梦境,为粉丝们创造受限量版Dreamworld启发的服装,供他们下载并在元宇宙中穿着。(福布斯)[2022/8/11 12:17:45]

此时

?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

标签:NFTFNFDEPODEPNFTYfnf币会销毁吗dep币前景

OKB热门资讯
Staking:“存币生币”唤醒熊市机遇,五款Staking质押方案齐上顶峰AscendEX -ODAILY

4月22日,顶峰AscendEX同时上线五款热门币种的Staking质押方案,包括雪崩协议Avalanche、现象级链游AxieInfinity、高性能公链Fantom、Layer2扩展方案Po.

1900/1/1 0:00:00
UNI:顶峰课堂:Uniswap-ODAILY

加密主流项目5-Uniswap什么是Uniswap?Uniswap是构建在以太坊公链上的一个去中心化金融应用,允许人们以去中心化的方式进行代币自动兑换交易.

1900/1/1 0:00:00
NFT:顶峰课堂:经济术语「缺口」-ODAILY

缺口是指资产价格在快速变动过程中,由于一段价格区间内没有产生任何交易而产生的一种价格跳空现象,显示在K线图上,就是一个真空区域,这片真空区域就被称为“缺口”,或者“跳空”.

1900/1/1 0:00:00
NFT:详解NFT中的版权漏洞-ODAILY

许多NFT和DAO旨在提供新的或更方便的方式来拥有和销售创意作品。Beeple的NFT作品“EVERYDAYS:TheFirst5000Days”在拍卖会上以6900万美元的价格售出.

1900/1/1 0:00:00
区块链:区块客周刊:区块链行业的13个技术趋势-ODAILY

2022.3.28第111期本期关键字V神提出新分片;宝格丽推出手表NFT系列;说唱歌手SnoopDogg推出NFT;哔哩哔哩推出数字藏品;ElonMusk将构建社交媒体将支持狗狗币;TheSa.

1900/1/1 0:00:00
BIT:Bitfinex周报(0314-0320)-ODAILY

数据:Bitfinex上巨鲸已平仓其70%空头仓位3月15日消息,据Bitfinex合约市场数据显示,Bitfinex上此前重仓做空的BTC巨鲸现已平仓其大部分空头仓位.

1900/1/1 0:00:00