Rari 被黑事故分析:开心做聚合 无奈被攻击

2021年5月8日,据链闻消息,以太坊收益聚合协议RariCapital因集成了AlphaFinance产生了漏洞,损失近1500万美元。事后,RariCapital官方发布了事故分析报告,分析了此次事故的主要原因。慢雾安全团队在官方分析的基础上,结合慢雾安全团队对此次事件的深入分析,进一步解读本次安全事故的原因。

攻击细节分析

本次攻击发生在RariCapital的RariManger合约中,整个过程下来就是攻击者首先通过闪电贷从dYdX中借出巨量资金,然后不停的重复调用RariManger合约中的deposit和withdraw函数,完成获利。如下图:

Sorare一周内NFT交易量突破700万美元,仅次于BAYC:8月3日消息,以太坊梦幻足球游戏Sorare的NFT交易量在过去7天超过700万美元(约4,430ETH),根据Crypto Slam数据,目前在NFT市场交易量排名第二,仅次于BAYC。

此前报道,Sorare于7月25日宣布与AC米兰足球俱乐部达成多年合作关系,会于今年夏天晚些时候发布2021和2022年意甲冠军NFT卡片。(nftgators)[2022/8/3 2:55:01]

那么用户是如何通过deposit和withdraw这两个操作获利的呢?我们需要分析对应的函数:

Coinbase Wallet整合OpenSea和Rarible订单:金色财经报道,据Coinbase钱包官方社交媒体账号发文,Coinbase Wallet已进行升级,旨在使NFT交易可以更加无缝地完成,并且对新用户更加友好。此外,Coinbase钱包功能还得到了进一步拓展,可以广播NFT市场OpenSea和Rarible的报价信息,这意味着用户可以在Coinbase钱包上查看NFT订单,而且还可能通过钱包内置工具接受或巨鲸报价。OpenSea 是 Web3 中最受欢迎的 NFT 市场,每天处理 25,000 到 30,000 个用户的订单,目前其智能合约已经部署到以太坊 (ETH)、Solana (SOL) 和Polygon (MATIC) 区块链,而Rarible NFT市场目前支持以太坊 (ETH)、Tezos (XTZ) 和 Flow (FLOW) 区块链。[2022/7/23 2:33:20]

Looks Rare开源Exchange V1智能合约:5月16日消息,NFT市场Looks Rare宣布开源其Exchange V1智能合约,包括核心交易合约、Librarie、目前的管理者合约、执行管理者和策略合约以及版税相关合约。Looks Rare表示,未来Looks Rare将完全开源。[2022/5/17 3:20:37]

以上是deposit函数的部分逻辑,首先deposit函数本身会调用内部的_depositTo函数,然后会再次调用getFundBalance函数来获取合约的余额。getFundBalance函数最终是会调用到RariController合约的getBalance函数去获取余额。最后是通过RariController合约中的AlphaPoolController库的getBalance函数获取余额。如下图:

AC宣布于Fantom链推出类Loot游戏Rarity:9月5日消息,YFI创始人AndreCronje宣布在Fantom链上推出类Loot游戏Rarity,游戏内包含11种角色,玩家可以通过探险获得经验值后完成升级。升级中的玩家可以利用角色特性制造道具,可在二级市场中出售。[2021/9/6 23:02:16]

流程上略微复杂,用图来展示大概就是下面这样:

Alpha Finance Lab首席工程师:Rari Capital损失约1000万美元:Alpha Finance Lab首席工程师Nipun表示,Rari Capital上的REPT-ETH兑换,依赖Homora Bank的ibETH:ETH汇率,可能在`work`函数调用期间不一致。攻击者操纵并利用汇率,每次净获得差价。Rari Capital损失2600 ETH(约1000万美元),Alpha Homora资金安全。根本原因仅在于bETH:ETH汇率,已重启用Alpha Homora。

此前消息,DeFi智能投顾协议Rari Capital在推特上表示,其ETH资金池出现了一个因集成Alpha Finance Lab协议而导致的漏洞,并遭受攻击。[2021/5/9 21:40:54]

从上面的分析不难发现,Rari合约最终是用到了AlphaFinance项目的ibETH合约的totalETH函数获取合约的余额,目的是为了根据totalETH和totalSupply的比值计算出Rari合约真正的ETH余额。deposit函数是根据用户的充值ETH的数量和比值计算要发放给用户的REPT数量,而withdraw函数的公式也大同小异,同样需要通过getBalance函数获取合约的ETH余额并计算比值,然后根据用户的REPT代币的余额和比值计算需要返还给用户的ETH的数量。但是问题恰恰出在这个获取ETH余额的公式上。

根据官方描述,从ibETH合约获取的totalETH函数获取的值是可以被用户操控的。以下是官方原文:

根据官方的描述,用户可通过ibETH合约的work函数操控totalETH函数返回的值,导致Rari整个价值计算公式崩溃。我们分别分析ibETH的work函数和totalETH函数:

totalETH函数:

work函数:

以上分别是ibETH合约中的totalETH函数和work函数的部分实现。不难发现totalETH函数其实就是获取合约的总的ETH的数量。而work函数,本身是一个payable函数,也就是说,用户是可以通过work函数来控制ibETH合约中的ETH数量从而来改变totalETH返回的值的。更糟糕的是,work函数同时还支持调用其他的任意合约。那么整个思路就很清晰了。

攻击流程

1、从dYdX中进行闪电贷,借出大量的ETH;

2、使用一部分的ETH充值到RariCapital合约中,此时从ibETH获取的比值还是正常的;

3、使用剩余的ETH充值到ibETH合约中,调用ibETH合约的work函数,为后续推高ibETH合约的totalETH的返回值做准备;

4、在work函数中同时对RariCapital合约发起提现,由于上一步已经推高totalETH值,但是计算的totalETH()/totalSupply()的值相对于充值时被拉高,从而使攻击者能从RariCapital中使用等量的REPT获取到更多的ETH。

总结

本次分析下来,主要的原因是协议的不兼容问题,攻击者通过闪电贷和重入的方式,攻击了RariCapital,造成了巨大的损失。慢雾安全团队建议在DeFi逐渐趋于复杂的情况下,各DeFi项目在进行协议间交互时,需要做好协议之间的兼容性,避免因协议兼容问题导致的损失。

RariCapital官方分析:

https://medium.com/rari-capital/5-8-2021-rari-ethereum-pool-post-mortem-60aab6a6f8f9

攻击交易(其中一笔):

https://etherscan.io/tx/0x171072422efb5cd461546bfe986017d9b5aa427ff1c07ebe8acc064b13a7b7be

By:yudan@慢雾安全团队

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

Uniswap币圈教主马斯克呼风唤雨背后的“真意图”

马斯克最近关于加密货币的一系列操作可谓是让人眼花撩乱,而其对加密货币市场的影响力之大,实际上已经奠定了其全球“教主”的地位。然而近日马斯克宣布特斯拉不再接受比特币支付的言论,激怒了狗狗币联合创始人.

抹茶交易所一文读懂DeFi保险

来源:链新 作者:冯铭 在传统金融行业,保险是最重要的基石之一。在金融市场较为发达国家,保险总资产通常会占到金融总资产的25%-35%左右。对标传统保险,DeFi保险也是一个非常广阔的市场.

BNBSHIB只是昙花一现,以太坊才是终极货币

作者|布劳克琴 编辑?|门人??运营|小石头风清扬四月份ETH的收益表现远超BTC,ETH-BTC交易对汇率从0.03一路上涨至0.06,市场上有关“以太坊市值超越比特币/Flippening”的口号和观点又开始活跃起来.

[0:15ms0-3:481ms