2021年5月8日,据链闻消息,以太坊收益聚合协议RariCapital因集成了AlphaFinance产生了漏洞,损失近1500万美元。事后,RariCapital官方发布了事故分析报告,分析了此次事故的主要原因。慢雾安全团队在官方分析的基础上,结合慢雾安全团队对此次事件的深入分析,进一步解读本次安全事故的原因。
攻击细节分析
本次攻击发生在RariCapital的RariManger合约中,整个过程下来就是攻击者首先通过闪电贷从dYdX中借出巨量资金,然后不停的重复调用RariManger合约中的deposit和withdraw函数,完成获利。如下图:
LooksRare将推出NFT聚合器:11月5日消息,据官方公告表示,LooksRare将推出NFT聚合器,用户将可在LooksRare上从其他市场购买NFT。目前尚未确定启动日期。启动前LooksRare将从11月8日开始与Code4rena举办公共安全审计竞赛。在之后的评估期,团队将进行必要的改进,并为最终发布做好准备。[2022/11/5 12:19:36]
那么用户是如何通过deposit和withdraw这两个操作获利的呢?我们需要分析对应的函数:
Tribe DAO再次启动社区投票以赔偿Rari Capital黑客受害者:金色财经报道,Tribe DAO(由 Rari Capital 和 Fei Protocol 合作实体)已经证实将再次启动社区投票以赔偿 Rari Capital 黑客受害者。新提案是 DAO 宣布解散后的一项举措,其他措施包括将 FEI 赎回 DAI,按比例向 TRIBE 代币持有者提供 DAO 资产的份额,以及取消 Tribe 的所有治理权。根据链上投票平台 Tally 的数据显示,99% 的选票支持全额赔付。 如果通过,该提案将向受 Fuse Hack 黑客影响的人支付与黑客窃取的全部金额相对应的款项。据此前相关报道,2022 年 4 月,Rari Capital(一种 DeFi 借贷协议)上的几个流动资金池被盗了 8000 万美元。(Tally)[2022/9/20 7:07:22]
NFT市场Rarible已上线Solana NFT:7月18日消息,NFT市场Rarible官方发推文称,Solana生态NFT系列已可以在Rarible上上架和交易。上线首月,Solana NFT的交易将免除平台费。
此前消息, Rarible已上线以太坊、Flow、Tezos和Polygon。[2022/7/18 2:20:07]
以上是deposit函数的部分逻辑,首先deposit函数本身会调用内部的_depositTo函数,然后会再次调用getFundBalance函数来获取合约的余额。getFundBalance函数最终是会调用到RariController合约的getBalance函数去获取余额。最后是通过RariController合约中的AlphaPoolController库的getBalance函数获取余额。如下图:
英超联赛NFT授权竞标中Sorare报价高达3至5.9亿美元:2月18日消息,据英国《每日邮报》报道,英超联赛已邀请各公司竞标其NFT许可证,NFT平台Sorare、Dapper Labs、Candy和ConsenSys进入了英超联赛NFT授权竞标的最后阶段。其中,法国基于以太坊的梦幻足球和数字收藏平台Sorare准备向英超联赛推出一系列数字收藏品,提供的报价是四年内回报在2.2亿英镑(3亿美元)到4.34亿英镑(5.9亿美元)之间。此前消息,去年9月份,Sorare平台以43亿美元估值完成6.8亿美元B轮融资,由软银(SoftBank)领投。[2022/2/18 10:01:40]
日本著名女优上原亚衣将在Rarible拍卖15件NFT收藏品:日本著名女优上原亚衣5月5日发推表示将在NFT交易平台Rarible拍卖15件《非同质化女朋友》系列 NFT 收藏品,最终的买家还将获得一部特别电影。[2021/5/6 21:27:58]
流程上略微复杂,用图来展示大概就是下面这样:
从上面的分析不难发现,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@慢雾安全团队
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。