链资讯 链资讯
Ctrl+D收藏链资讯

RAN:走过最长的路,竟是自己的套路 —— Alchemix 事件分析_FIL

作者:

时间:

By:慢雾安全团队

据慢雾区消息,2021年06月16日,以太坊DeFi项目Alchemix的alETH合约疑似出现安全问题。17日,Alchemix发布了事故分析报告,慢雾安全团队迅速介入分析,并在官方分析报告的基础上梳理了本次事件的整个脉络和核心关键点,供大家参考。

太长不看系列

本次分析文章很长。这里先说结论,方便大家有个大概的理解。本次事故的主要原因在于Alchemix通过transmuter添加了3次vault,导致收益信息记录在了一个错误的元素上,而在调用transmuter的harvest函数时也没有传入正确的index值,导致通过错误的元素获取了错误的收益,将错误的4300ETH的收益发送到adapter合约,帮助用户偿还了alETH的贷款,造成收益增多的问题,导致了悲剧。

核心分析——Round1

根据官方发布的事故分析报告,本次事故的原因是官方的alETH的部署脚本意外地创建了额外的vaults,导致Alchemix使用了vaults数组中错误的索引并计算出了错误的奖励,导致transmuter把所有的奖励用于偿还了用户的所有负债。我知道单单是这句简短的分析让人有点云里雾里,摸不着头脑,所以我们只能把目标放在官方给出的交易中,看看能不能找到真相。

根据官方给出的交易,通过ethtx.info分析工具进行分析,我们不难发现,这笔交易调用了AlchemistEth合约的harvest函数,并且传入了_vaultId=0这个参数,最后返回了

瑞士卢加诺报纸刊登使用闪电网络用BTC在当地商店付款的教程:金色财经报道,Bitcoin Magazine在社交媒体上称,瑞士卢加诺的报纸教人们如何通过使用闪电网络用BTC在当地商店付款。

此前报道,瑞士卢加诺市刚刚发行了第一笔公共数字债券,试验了区块链技术的后结算(穆迪的Aa3评级)。这要归功于瑞士的数字资产监管框架,该框架具有开拓性和前卫性。[2023/4/9 13:52:37]

"4308144937764982868765"和"4308144937764982866415"这两个值。

为了更加了解harvest函数的作用,我们需要对整个函数进行分析:

不难发现,harvest函数其实包含两个重要的操作,分别是收获奖励和将奖励分发给transmuter合约。其中vault是一个library库合约,其中的harvest逻辑实现如下:

通过代码分析不难发现,vault库合约的harvest函数其实是检查了外部的adapter的总的资金量,然后根据adapter中的资金量减去用户的充值数量计算出收益的部分。

这里我们可以将这个adapter理解为一个策略池,用于管理用户的资金和收益。然后我们回到用户一开始的AlchemistEth合约中的harvest函数,发现返回的"4308144937764982868765"和

"4308144937764982866415"这两个值其实对应的就是vault库合约的harvest函数计算出的需要提现的代币数量和从adapter(策略池)中取回的代币的数量。由于这个adapter对应的收益代币是WETH,精度为18位,那么"4308144937764982866415"这个数值换算过来就是"4308.144937764982866415"个WETH。

动态 | 库拉索央行和圣马丁岛与区块链公司Bitt合作 旨在当地发行数字货币:据ccn消息,库拉索中央银行和圣马丁岛(CBCS)宣布与区块链技术公司Bitt合作,旨在探索为库拉索岛和圣马丁岛国家发行数字货币。Bitt首席执行官Rawdon Adams表示,数字货币将与这两个国家密切相关,这两个国家都是荷兰的组成国,并且拥有相同的货币联盟。CBCS在货币联盟中印刷和分配实物现金所产生的风险和成本将大大降低,因此它将方便该地区的公民和居民。[2018/8/25]

也就是说,本次harvest操作,收益了超过4300个ETH的收益,然后这个收益在下一步中通过_distributeToTransmuter函数给到了transmuter合约进行分发,我们看下分发过程中的逻辑是怎样的:

_distributeToTransmuter函数的逻辑只有简单的3行,我们主要关注的是最后的外部调用——lowerHashMinted函数。该函数所对应的xtoken在这里指的是alETH本身。因为alETH本身是用户通过借贷借出来的,所以lowerHashMinted这里的操作其实是使用harvest的收益将alETH总的贷出数量减少了,从而减少了每个用户的贷款。总结来说就是用harvest4300ETH的收益偿还用户的alETH贷款。

打个小总结

这里先总结下这个流程,就是AlchemistEth合约通过harvest函数,得到了4300ETH的收益,并将这个收益分发出去了,用于偿还用户的alETH贷款,导致了我们看到的情况——已经贷出alETH的用户在不需要还款的情况下就可以拿回他们质押的ETH。那究竟是为什么,会有这4300ETH的收益呢?这多出来的4300ETH的收益是怎么来的?针对这个问题,我们开始下一轮的分析。

哈萨克斯坦新兴组织希望在当地发展区块链:哈萨克斯坦的“区块链与加密货币协会”是一个新兴组织,正在申请成为合法实体,希望能为当地的区块链事业贡献力量。其主要目标是帮助相关组织为当地的区块链市场运作制定法律框架,并且从多方面促进该技术在哈萨克斯坦的发展,力求成为全球加密货币中心之一。[2017/12/12]

核心分析——Round2

要了解为什么会多出来4300ETH,就必须了解AlchemistEth的资金存储过程。在AlchemistEth合约中,合约总的充值情况是使用Vaultlibrary库的Data结构体进行记录的,然后通过flushActiveVault函数更新对应的充值数量(totalDeposit)。

然后depositAll函数会将充值的代币金额打到对应的adapter(策略池)中,那么在下一次harvest的时候,通过adapter(策略池)获取的totalValue,就会是用户的本金加上策略池的收益。为了计算收益过程中的本金部分,我们对官方给出的交易进行debug,发现本金仅为9000ETH,从adapter获取的收益加上本金共有13000ETH,也就是说9000ETH的本金产生了4300ETH的收益。

但是,按照上面分析的逻辑,用户的本金是不会产生那么大的收益的,问题肯定是出在了adapter获取的totalValue。也就是说adapter不止只有AlchemistEth充值代币,还存在其他的收益渠道。为了验证我们的想法,慢雾安全团队分析了adapter的所有代币收入,果然发现了一笔异常的转入行为,并且金额也能刚好对上多出的4300ETH的收益。也就是说,问题就在这里了。

通过查看交易数据,发现这是一笔调用harvest操作的交易,调用的合约是transmuter合约:

也就是说,是这个harvest函数出问题了,harvest函数的逻辑如下:

同样是调用了vault的harvest函数,熟悉的配方,熟悉的味道。我们再次进行debug,发现一个惊人的事实——在进行收益的时候,vault的totalDeposit竟然为0,导致4300ETH的收益直接分发给了adapter,导致了adapter获取的totalValue错误了,多了4300个ETH,原因就是在这里。

到了这里,我们已经很接近真相了,剩下要解决的就是为什么totalDeposit会为0?我们查询了transmuter合约中能改变totalDeposit的地方,发现只有_plantOrRecallExcessFunds函数可以改变这个值,而这个函数上层调用的又是distribute函数。而transmuter合约的distribute函数是AlchemistEth合约在收益的时候进行调用的。也就是说本身的流程应该是:

1.AlchemistEth合约调用harvest进行收益

2.AlchemistEth合约调用transmuter合约的distribute函数记录收益情况,并把收益部分给adapter

3.adapter收到了transmuter的收益,根据收益偿还用户的alETH的贷款

但是问题就出在了_plantOrRecallExcessFunds函数中。由于在记录充值信息的时候,用的是_vaults.last()来获取最新的vault,所以其实充值信息叠加在了最后一个元素上。但是项目方调用了三次setActiveVault函数,所以其实充值信息是叠加到了_vaults数组的3号元素,也就是index为2的vault元素上。但是在transmuter合约在harvest的时候传入的_vaultId却是0,0号元素是没有任何充值记录的,所以transmuter合约就误将所有的收益都给了adapter了。导致了悲剧的发生。

总结

到这里,整个事情已经变得很清晰了,Alchemix项目方由于某种原因,通过transmuter添加了3次vault,导致收益信息记录在了一个错误的元素上,而在调用transmuter的harvest函数时也没有传入正确的index值,导致通过错误的元素获取了错误的收益,错误收益被发送到adapter合约,造成收益增多,导致了悲剧。

慢雾安全团队在此提醒,DeFi是一个复杂的系统,在进行DeFi操作的时候,要记得检查好业务逻辑中的每一个流程,防止意外的发生,在必要的时候可以联系专业的安全团队进行专业的安全审计,防止事故的发生。

__

官方事故分析报告:

___https://forum.alchemix.fi/public/d/137-incident-report-06162021_

收益计算错误交易:https://etherscan.io/tx/0x3cc071f9f40294bb250fc7b9aa6b2d7e6ca5707ce4d6d222157d7a0feef618b3

__

往期回顾

HPOOL入驻慢雾区,发布「安全漏洞与威胁情报赏金计划」

重磅!慢雾的安全审计结果已集成到CoinMarketCap

Tokenlon入驻慢雾区,发布「安全漏洞与威胁情报赏金计划」我竟了我自己?——BurgerSwap被黑分析

代币闪崩,差点归零-PancakeBunny被黑简析

慢雾导航

慢雾科技官网

https://www.slowmist.com/

慢雾区官网

https://slowmist.io/

慢雾GitHub

https://github.com/slowmist

Telegram

https://t.me/slowmistteam

Twitter

https://twitter.com/@slowmist_team

Medium

https://medium.com/@slowmist

币乎

https://bihu.com/people/586104

知识星球

https://t.zsxq.com/Q3zNvvF

火星号

http://t.cn/AiRkv4Gz

链闻号

https://www.chainnews.com/u/958260692213.htm

免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。

本文来源于非小号媒体平台:

慢雾科技

现已在非小号资讯平台发布68篇作品,

非小号开放平台欢迎币圈作者入驻

入驻指南:

/apply_guide/

本文网址:

/news/10084665.html

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场

上一篇:

SendingLabs完成1250万美元种子轮融资,以构建「Web3通信堆栈」

标签:RANFILTPS非小号TRANSPARENTDigital Fileshttps://etherscan.io维基币今日价格非小号

比特币价格今日行情热门资讯
SDT:Avalaunch交易竞赛:交易XAVA,瓜分25,000 USDT!_泰达币官网回收USDT吗

为庆祝库币成功接入Avalaunch(XAVA)的C-Chain并开启充值、提现服务,Avalaunch团队将联合库币发放25,000USDT豪华奖池.

比特币:多个支撑连连破位 ?_btceasypay

据Bitcoinwin交易所平台行情显示:昨日BTC在缩量反弹至39500后受阻回落,行情不断震荡走低,今日早间一度放量跌破38000支撑大关.

FIL:在当前熊市行情下,FlL能否独善其身?_peco币归零

随着牛市的持续衰退,整个币圈大盘一片飘红,其中以大饼为首已经跌穿40000美金大关,整体仍有继续下行的趋势,这也预示着熊市即将到来.

FIL:投资ipfs矿机要多少钱?filecoin挖矿多久回本?_3000代币多少钱

币圈进入熊市之后,币价大跌,很多投资者都有点慌神。其实这波熊市亏得最惨的还是玩合约,玩杠杆的炒币玩家,很多人开多倍爆仓,资产一夜清零。币圈的名言是“熊市挖矿”,矿工损失其实并不大.

BIT:韩国银行对 Upbit、Bithumb、Coinone 和 Korbit 进行反评估_gram币能涨到一块吗

链闻消息,据韩联社报道,韩国K-Bank、韩国农协银行以及新韩银行目前正在对虚拟货币交易所Upbit、Bithumb、Coinone和Korbit进行「虚拟资产运营商反风险评估」.

GATE:Gate.io投票上币空投福利第154期—YIELD App (YLD) ,10,000美元YLD空投福利开启_Gate.io

6月20日12:00—6月27日12:00我们将开启YIELDApp(YLD)超级空投福利,$10,000美元YLD等你来拿!新用户请点击注册Gate.io并参与活动.