火星链 火星链
Ctrl+D收藏火星链
首页 > DYDX > 正文

EST:走过最长的路竟是自己的套路:Alchemix事件分析

作者:

时间:1900/1/1 0:00:00

By:yudan@慢雾安全团队

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

太长不看系列

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

核心分析——Round1

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

美国7月非农就业人数增加18.7万人 低于市场预期:金色财经报道,美国7月非农就业人数增加18.7万人,为2020年12月以来最小增幅,预估为增加20万人,前值为增加20.9万人。[2023/8/4 16:19:20]

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

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

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

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

香港金发局发布2022/23年报:香港正将自己定位为开发虚拟资产及科技互补全球领导者:金色财经报道,香港金融发展局(金发局)发布2022/23年报,其中指出在全球Web 3.0发展中,香港具有发挥领导作用的有利条件,包括它是一个国际金融中心、拥有丰富本地专业和适合国际投资者的监管框架。Web 3.0为年轻专业人士提供了一系列新的就业机会,香港政府为银行和其他中介机构提供了机会,使其能够与持牌交易所合作以提供虚拟资产交易服务,代币化将在香港发挥重要作用,将债券、股票甚至房地产等传统资产带入新的数字范式。香港正在将自己定位为开发虚拟资产及科技互补(如区块链及Web 3.0)的全球领导者。[2023/7/28 16:04:34]

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

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

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

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

何一:币安近期上线的代币走低是由于市场行情低迷:7月2日消息,针对币安近期上线的代币不断走低,币安联合创始人何一在推特上表示,市场行情低迷,近期上线大小代币都在跌,大部分代币价格跌幅达80-90%,包括所有受追捧的天王级项目。MAV第一笔成交价格定在0.05,是考虑了市场行情冷淡,呼吁用户不要轻信社区喊单,一味追高;按照上一个周期历史IEO第一天也就是几倍,拉到10倍、20倍不符合市场现状,请自行做好研究。此外何一表示,币安上线数百个代币,代币价格不受币安控制,价格受买卖盘双方影响。[2023/7/2 22:13:27]

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

AGI跌破0.4美元,24小时跌超45%:金色财经报道,行情数据显示,LSD 协议 Agility Token AGI 跌破 0.4 美元,现报价 0.3928 美元,24 小时跌超 45%,行情波动较大,请做好风险控制。此外,该 Token 页面附有提醒:智能合约持有者可以制造新的 Token,请谨慎操作。[2023/4/20 14:16:21]

打个小总结

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

核心分析——Round2

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

STEPN开始向创世鞋持有者空投GMT:2月19日消息,STEPN发推称,将立即向符合条件的创世鞋持有者空投GMT。由于STEPN利用生态系统基金进行此次空投,所有GMT将被发送到SOL/BNB/ETH用户的SOL Spending账户。对于非SOL Realm用户,请创建一个SOL钱包,并在该地址存入SOL用于支付交易费用。

据此前报道,STEPN官方推特公布关于向创世鞋持有者空投GMT的计划New Horizon Initiative。根据该计划,STEPN将向每双创世灰鞋空投4000 GMT,创世绿鞋空投8000 GMT,创世蓝鞋空投16000 GMT,创世紫鞋空投32000 GMT。快照已于UTC时间2月12日0:00完成,只有在Spending账户内持有创世鞋且未挂售的用户才会获得空投。[2023/2/20 12:16:37]

然后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操作的时候,要记得检查好业务逻辑中的每一个流程,防止意外的发生,在必要的时候可以联系专业的安全团队进行专业的安全审计,防止事故的发生。

标签:ETHTERESTARVETH最新消息Minter HUBNESTA币Marvin Inu

DYDX热门资讯
BitMEX:数据显示:25亿美元比特币期权周五到期 空头占据主导地位

比特币价格在过去7天内大约下跌了22%,在6月第二次重新测试了31700美元的区域。据一些分析人士称,造成负面表现的最紧迫的消息是,据说中国正在打击场外交易的银行账户.

1900/1/1 0:00:00
RTX:中国闲置比特币矿机或超200万台 解封暂不乐观 海外“救火”需再等半年

随着四川最后靴子落地,全网算力暴跌至90E左右。此前最高为180E,全网不到两个月,算力下跌大约为90E,也从侧面说明中国算力占比约为全球50-60%.

1900/1/1 0:00:00
BTC:约10%的BTC持币者控制着当前供应量的99%

比特币的信徒对加密资产表现出巨大的信心。根据CoinMetrics的数据,目前99%以上的比特币供应被仅仅10%的比特币地址所持有.

1900/1/1 0:00:00
数字货币:抢劫比特币 法院会宣判吗?

原标题:什么?抢劫比特币?今晚地铁上,偶然看到一则四川乐山抢劫虚拟财产的案例,三名男子抢劫朋友之妻的29.0004844个比特币和1258.04064个以太坊,总价值近600万元人民币.

1900/1/1 0:00:00
ETH:项目周刊 | BTC挖矿难度预计将下调超过21%

金色周刊是金色财经推出的一档每周区块链行业总结栏目,内容涵盖一周重点新闻、行情与合约数据、矿业信息、项目动态、技术进展等行业动态。本文是项目周刊,带您一览本周主流项目以及明星项目的进展.

1900/1/1 0:00:00
比特币:金色早报 | 以太坊交易费收入创一年新低

头条▌以太坊交易费收入创一年新低金色财经报道,根据Glassnode的一份新报告,以太坊矿工从交易费中获得的收入已从一个多月前的每天15,000ETH下降了85%以上.

1900/1/1 0:00:00