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把所有的奖励用于偿还了用户的所有负债。我知道单单是这句简短的分析让人有点云里雾里,摸不着头脑,所以我们只能把目标放在官方给出的交易中,看看能不能找到真相。
香港警务处推出新的元宇宙平台Cyber??Defender:金色财经报道,根据5月27日的一份声明,香港警务处网络安全及科技罪案调查科 (CSTCB) 推出了一个旨在让市民迎接数字时代挑战做好准备的元宇宙平台Cyber??Defender。CSTCB 总督察叶卓裕先生表示,网络空间中的所有犯罪也可能发生在元宇宙中,例如投资欺诈、未经授权访问系统、盗窃和性犯罪,权力下放可能会增加资产被盗的风险。Web3 中虚拟资产的去中心化性质可能增加网络犯罪分子将终端设备、虚拟资产钱包和智能合约作为目标的可能性。[2023/5/28 9:46:58]
根据官方给出的交易,通过ethtx.info分析工具进行分析,我们不难发现,这笔交易调用了AlchemistEth合约的harvest函数,并且传入了_vaultId=0这个参数,最后返回了
"4308144937764982868765"和"4308144937764982866415"这两个值。
为了更加了解harvest函数的作用,我们需要对整个函数进行分析:
Moonbirds宣布Mythic Eggs将于4月17日启动申领:金色财经报道,NFT项目Moonbirds在社交媒体宣布Mythic Eggs将于4月17日启动申领,Mythic Eggs是Moonbirds即将推出PFP系列Moonbirds Mythics的一部分,代表了 Moonbirds 生态系统的第一次“官方”扩展,Mythic Eggs分为三类:石蛋、符文蛋和传奇蛋。本文撰写时,PROOF Collective Pass地板价降至12.5 ETH,而Moonbirds地板价则下跌至 3.2 ETH(分别比 3 月初下降了 -33% 和 -50%)。[2023/4/12 13:58:17]
不难发现,harvest函数其实包含两个重要的操作,分别是收获奖励和将奖励分发给transmuter合约。其中vault是一个library库合约,其中的harvest逻辑实现如下:
通过代码分析不难发现,vault库合约的harvest函数其实是检查了外部的adapter的总的资金量,然后根据adapter中的资金量减去用户的充值数量计算出收益的部分。
这里我们可以将这个adapter理解为一个策略池,用于管理用户的资金和收益。然后我们回到用户一开始的AlchemistEth合约中的harvest函数,发现返回的"4308144937764982868765"?和?
NFT平台MOOAR Launchpad第二季投票已结束,共锁仓超过1800万枚GMT:2月26日消息,STEPN开发商Find Satoshi Lab(FSL)推出的新兴NFT平台MOOAR Launchpad第二季投票已于2月26日8:00结束,目前正在唱票,将于2月28日8:00公布最终结果。第二季用户在以太坊和Solana链上总共锁仓超过1800万枚GMT。目前Web3文学作品孵化器Read2N居首位,Web3动画IPFS Lands NFT居次席,Web3链上娱乐项目BetBatsNFTs位列第三。
本季共包括7个应用类新项目,分别是Web3动画IPFS Lands NFT,非洲文旅及渡渡鸟保护项目Dodo Verse、Web3链上娱乐项目BetBatsNFTs、西海岸潮流主题IP Clumsy Bears、Web3文学作品孵化器Read2N、多链艺术社交社区Pink Flamingo Social Club以及潮流文化主题项目LOONY FACE。[2023/2/26 12:30:12]
"4308144937764982866415"这两个值其实对应的就是vault库合约的harvest函数计算出的需要提现的代币数量和从adapter(策略池)中取回的代币的数量。由于这个adapter对应的收益代币是WETH,精度为18位,那么?"4308144937764982866415"?这个数值换算过来就是"4308.144937764982866415"?个WETH。
也就是说,本次harvest操作,收益了超过4300个ETH的收益,然后这个收益在下一步中通过_distributeToTransmuter函数给到了transmuter合约进行分发,我们看下分发过程中的逻辑是怎样的:
MinerSwap疑似发生Rug Pull,308枚ETH已转入Tornado Cash:11月7日消息,PeckShield监测数据显示,ETHPoW上稳定币交易协议MinerSwap疑似发生RugPull,获利资金已从ETHPoW跨链至以太坊,其中已有约308枚ETH被转入Tornado Cash。MSP代币价格下跌34%。[2022/11/7 12:29:00]
_distributeToTransmuter函数的逻辑只有简单的3行,我们主要关注的是最后的外部调用——lowerHashMinted函数。该函数所对应的xtoken在这里指的是alETH本身。因为alETH本身是用户通过借贷借出来的,所以lowerHashMinted这里的操作其实是使用harvest的收益将alETH总的贷出数量减少了,从而减少了每个用户的贷款。总结来说就是用harvest4300ETH的收益偿还用户的alETH贷款。
打个小总结
这里先总结下这个流程,就是AlchemistEth合约通过harvest函数,得到了4300ETH的收益,并将这个收益分发出去了,用于偿还用户的alETH贷款,导致了我们看到的情况——已经贷出alETH的用户在不需要还款的情况下就可以拿回他们质押的ETH。那究竟是为什么,会有这4300ETH的收益呢?这多出来的4300ETH的收益是怎么来的?针对这个问题,我们开始下一轮的分析。
报告:BTC和ETH两种加密货币占银行风险敞口的近90%:金色财经报道,尽管全球银行对加密货币市场的敞口仍然相对较小,但这些金融机构正在慢慢向数字资产敞开大门,国际清算银行 (BIS) 的一份新报告列出了这些银行中最受欢迎的加密货币报告了加密货币风险。
根据巴塞尔协议 III?,按市值计算的两种最大的加密货币比特币和以太坊处于领先地位,据报道,31%的加密资产敞口属于比特币,22%属于以太坊。这两种主要加密货币“占报告风险敞口的近 90%”,而银行中其他加密资产包括:DOT占报告风险暴露的2%,XRP占报告风险暴露的 2%,ADA占1%,SOL占 1%,LTC占 0.4%,XLM占 0.4%。
BIS 解释说:根据巴塞尔委员会当前的咨询提案,这些风险敞口很可能被归类为第 2 组加密资产。银行还报告了少量稳定币和代币化资产。[2022/10/4 18:38:49]
核心分析——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操作的时候,要记得检查好业务逻辑中的每一个流程,防止意外的发生,在必要的时候可以联系专业的安全团队进行专业的安全审计,防止事故的发生。
原生与非原生加密艺术作品的法律关系都是NFT,但两者的版权属性存在差别。 什么是NFT? NFT的概念 NFT全称为(non-fungibleToken),即非同质化通证(或非同质化代币),意为不可互换的通证,是相对于可互换而言的一种.
1900/1/1 0:00:00金色午报 | 7月19日午间重要动态一览:7:00-12:00关键词:华尔街、美联储、西班牙对外银行、银保监会 1.华尔街监管机构还没让比特币ETFs离开寒冬期; 2.
1900/1/1 0:00:00原标题:《国盛区块链·深度|DeFi新金融:暴跌下的压力测试,DeFi韧性如何?》 作者:宋嘉吉、任鹤义 摘要 DeFi为市场广泛担忧的是:当币价快速下跌时.
1900/1/1 0:00:00随着比特币在过去一年中飙升至新高,许多人都在考虑是否应该入场投资。然而近日,高盛ISG团队却警告称,对于大多数投资者,投资组合中配置数字货币是没有意义的.
1900/1/1 0:00:00新华社讯:端午假日期间,北京和上海不少抽中数字人民币红包的“幸运儿”们开启了“买买买”的愉悦体验。丰富的数字人民币消费场景,叠加部分商家的端午节营销,为假日消费添活力.
1900/1/1 0:00:00过去两周国会就数字美元举行的听证会被视为推进普惠金融的机会。这是一个崇高的目标,但我们要现实一点:说到底还是权力问题.
1900/1/1 0:00:00