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这个参数,最后返回了
CZ:没有人知道市场上涨/下跌的真正原因,投资者应理性看待:6月10日消息,Binance 创始人 CZ 表示,没有人真正知道市场上涨和下跌的真正原因,很多人声称自己知道,而且往往把它归咎于一个单一的(通常是错误的)原因。事实上,市场上有很多卖家和买家,每个人都可能有自己的原因。类似 Binance 抛售加密货币、Robinhood 平台抛售山寨币,或者各地的禁令,贪婪和恐惧,这两种是投资者在任何市场都需要管理的情绪。[2023/6/10 21:28:20]
"4308144937764982868765"和"4308144937764982866415"这两个值。
为了更加了解harvest函数的作用,我们需要对整个函数进行分析:
不难发现,harvest函数其实包含两个重要的操作,分别是收获奖励和将奖励分发给transmuter合约。其中vault是一个library库合约,其中的harvest逻辑实现如下:
通过代码分析不难发现,vault库合约的harvest函数其实是检查了外部的adapter的总的资金量,然后根据adapter中的资金量减去用户的充值数量计算出收益的部分。
这里我们可以将这个adapter理解为一个策略池,用于管理用户的资金和收益。然后我们回到用户一开始的AlchemistEth合约中的harvest函数,发现返回的"4308144937764982868765"和
Sui基金会以Suiet钱包为例发布Sui生态应用介绍:2月2日消息,Sui基金会官方博客发布Sui生态应用介绍(App Showcase),旨在帮助用户了解Sui生态网络的各类应用及其功能。文章以Suiet钱包作为Sui生态的首个应用案例,对其主要功能和未来开发计划进行介绍。
据悉,Sui钱包支持存储Sui生态Token及NFT,具有安全透明、界面简洁和多功能性等特点。[2023/2/2 11:43:41]
"4308144937764982866415"这两个值其实对应的就是vault库合约的harvest函数计算出的需要提现的代币数量和从adapter(策略池)中取回的代币的数量。由于这个adapter对应的收益代币是WETH,精度为18位,那么"4308144937764982866415"这个数值换算过来就是"4308.144937764982866415"个WETH。
也就是说,本次harvest操作,收益了超过4300个ETH的收益,然后这个收益在下一步中通过_distributeToTransmuter函数给到了transmuter合约进行分发,我们看下分发过程中的逻辑是怎样的:
_distributeToTransmuter函数的逻辑只有简单的3行,我们主要关注的是最后的外部调用——lowerHashMinted函数。该函数所对应的xtoken在这里指的是alETH本身。因为alETH本身是用户通过借贷借出来的,所以lowerHashMinted这里的操作其实是使用harvest的收益将alETH总的贷出数量减少了,从而减少了每个用户的贷款。总结来说就是用harvest4300ETH的收益偿还用户的alETH贷款。
彭博社高级商品策略师:以太坊可能与股票有更高的相关性:金色财经报道,据彭博社高级商品策略师Mike McGlone表示,彭博社分析师Mike McGlone称比特币(BTC)是一张“WildCard”,一旦传统股票最终触底,它的表现就“成熟”了。McGlone解释说,比特币是一张“WildCard”,在股票下跌时表现更成熟,但过渡到看起来更像黄金和债券。联邦基金指标转向紧缩通常是时间问题,一旦发生,比特币将成为主要受益者。
McGlone补充说,虽然比特币将遵循与政府债券和黄金类似的趋势,但以太坊“可能与股票有更高的相关性”。[2022/9/8 13:16:53]
打个小总结
这里先总结下这个流程,就是AlchemistEth合约通过harvest函数,得到了4300ETH的收益,并将这个收益分发出去了,用于偿还用户的alETH贷款,导致了我们看到的情况——已经贷出alETH的用户在不需要还款的情况下就可以拿回他们质押的ETH。那究竟是为什么,会有这4300ETH的收益呢?这多出来的4300ETH的收益是怎么来的?针对这个问题,我们开始下一轮的分析。
核心分析——Round2
要了解为什么会多出来4300ETH,就必须了解AlchemistEth的资金存储过程。在AlchemistEth合约中,合约总的充值情况是使用Vaultlibrary库的Data结构体进行记录的,然后通过flushActiveVault函数更新对应的充值数量(totalDeposit)。
币安创始人赵长鹏:加密货币价格崩溃“最糟糕的部分可能已经结束”:6月22日消息,币安创始人赵长鹏表示,加密货币价格崩溃“最糟糕的部分可能已经结束”。币安有“责任”来帮助陷入困境的加密货币公司。(金十)[2022/6/22 1:24:40]
然后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,原因就是在这里。
苏富比将展售日本艺术家松山智一9幅NFT作品:金色财经报道,苏富比拍卖行(Sotheby's)宣布将于6月14至21日首次展售日本艺术家松山智一的9幅NFT作品,其中包括3幅一版1件、3幅一版5件及3幅一版150件,在苏富比元宇宙平台Sotheby’s Metaverse上亦可供观赏和购买。另外,苏富比指,若购买全部3幅每版各150件的NFT作品,可获赠1幅由松山智一设计的特别版NFT礼物,但每个钱包地址可最多申请一件NFT礼物。[2022/6/11 4:18:22]
到了这里,我们已经很接近真相了,剩下要解决的就是为什么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
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通信堆栈」
标签:ETHTERVESTISTEthsidechaincounterpartyharvestfinance币发行价SatoshiStreetBets
Fil最近跌的比较厉害,当然,全网跌的都很厉害。不过技术确实不断在推进,比如gas费的降低,比如多扇区共同提交,比如TPS的加快,比如质押币的减少.
1900/1/1 0:00:00截止2021-5-2614:41,FIL币报价大约为74美元。相比此前四月份币价高位时,FIL币目前的币价可以说是遭到大跳水.
1900/1/1 0:00:00阿拉伯数字中,最受欢迎的数字当属6这个数字。在中国,六是一个吉利数字,“六六大顺”就经常用来祝福好友事业发达的意思.
1900/1/1 0:00:00聊到区块链,尤其是币圈,三句不离熊市。这也是没办法的事情,因为这个事情确实影响太大,无论币圈还是链圈都特别倚重行情.
1900/1/1 0:00:00为了庆祝YFDAIFinance(YFDAI)在库币重磅上线,库币和YFDAI团队将提供20YFDAI(约36,000USDT)的豪华奖池.
1900/1/1 0:00:00作者|秦晓峰编辑|郝方舟出品|Odaily星球日报??????一、整体概述高盛计划用以太坊期权和期货来扩大其面向客户的加密货币产品.
1900/1/1 0:00:00