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

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

攻击细节分析

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

数据:共识层合约地址余额即将突破1300万枚ETH:7月5日消息,Tokenview链上数据监测,当前共识层(原ETH2)合约地址余额达到12996309枚ETH,近一周新增21424枚ETH。[2022/7/5 1:51:43]

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

数据:CME比特币期货未平仓量突破50亿美元:The Block新闻主管Frank Chaparro发推表示,数据显示,CME比特币期货未平仓量已突破50亿美元。[2021/10/24 6:09:51]

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

Rari Fuse上Vesper Lend借贷池再次遭攻击损失约100万美元:12月31日消息,官方报道,Vesper Finance表示,在利率协议Fuse上推出的23号借贷池Vesper Lend beta再次遭遇攻击。攻击者操纵了一个预言机并耗尽了约100万美元的DAI、ETH、WBTC和USDC的Beta测试借贷池。这不是对Vesper合约的攻击,没有VSP或VVSP受到威胁。Vesper已禁 Beta Vesper Lend Rari Pool #23中所有代币的借贷,还将预言机从VUSD/USDC切换到 VUSD/ETH (Uni v3)。

此前消息,Rari Fuse上Vesper Lend借贷池遭攻击,攻击者获利300万美元。[2021/12/31 8:16:10]

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

美食元宇宙游戏OneRare与Polygon Studios达成合作,将发布名厨招牌菜NFT:12月5日消息,Polygon旗下游戏和NFT部门Polygon Studios与美食元宇宙游戏OneRare达成合作,将知名厨师Arnold Poernomo、Saransh Goila、Jaimie Van Heije引入这一全新的数字世界。每位厨师都将推出自己的NFT,以庆祝其烹饪之旅。

据此前报道,OneRare完成200万美元融资,Arkstream Capital、Momentum 6、StableNode、Exnetwork Capital、Enjinstarter、Everse Capital、Kangaroo Capital、Tag Ventures、Maven Capital、1010 Capital、CSP DAO、Skyman Ventures、FF Ventures、ZBS Capital和Lucid Blue Ventures等参投。[2021/12/5 12:52:40]

Yearn创始人AC发文介绍类Loot游戏Rarity属性:9月6日消息,Yearn.finance创始人Andre Cronje发文介绍类Loot游戏Rarity的属性,共有6个核心属性,分别为Strength (Str)力量、Dexterity (Dex)敏捷、Constitution (Con)、Intelligence (Int)智力、Wisdom (Wis)智慧、Charisma (Cha)魅力。当能力得分发生变化时,与该得分相关的所有属性也会相应地发生变化。玩家在分配召唤师属性之前仔细研究这些,因为只能设置一次,之后它们是永久的,有些专长和法术有基础要求。

此前消息,Yearn.finance创始人Andre Cronje发文称,在Fantom链上推出类Loot游戏Rarity。游戏内包含野蛮人、巫师等11种角色,玩家可以通过探险获得经验值后完成升级。升级中的玩家可以利用角色特性制造道具,并且可以在二级市场出售。[2021/9/6 23:03:42]

从上面的分析不难发现,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@慢雾安全团队

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

金智博客

比特币交易以太坊上新的事务类型:EIP-2718 简介_PIT:ANC

以太坊采用不同的事务类型来定义不同的操作,例如,将以太币发送至某个地址、部署合约等等。在最近的柏林升级之前,以太坊主要有4种不同的事务“类型”:带有收款方地址、数据字段的常规事务不带有收款方地址.

[0:15ms0-8:671ms