原文标题:《走过最长的路,竟是自己的套路 —— Alchemix 事件分析》 据慢雾区消息,2021 年 06 月 16 日,以太坊 DeFi 项目 Alchemix 的 alETH 合约疑似出现安全问题。17 日,Alchemix 发布了事故分析报告,慢雾安全团队迅速介入分析,并在官方分析报告的基础上梳理了本次事件的整个脉络和核心关键点,供大家参考。 太长不看系列 本次分析文章很长。这里先说结论,方便大家有个大概的理解。本次事故的主要原因在于 Alchemix 通过 transmuter 添加了 3 次 vault,导致收益信息记录在了一个错误的元素上,而在调用 transmuter 的 harvest 函数时也没有传入正确的 index 值,导致通过错误的元素获取了错误的收益,将错误的 4300 ETH 的收益发送到 adapter 合约,帮助用户偿还了 alETH 的贷款,造成收益增多的问题,导致了悲剧。 核心分析——Round 1根据官方发布的事故分析报告,本次事故的原因是官方的 alETH 的部署脚本意外地创建了额外的 vaults,导致 Alchemix 使用了 vaults 数组中错误的索引并计算出了错误的奖励,导致 transmuter 把所有的奖励用于偿还了用户的所有负债。我知道单单是这句简短的分析让人有点云里雾里,摸不着头脑,所以我们只能把目标放在官方给出的交易中,看看能不能找到真相。 根据官方给出的交易,通过 ethtx.info 分析工具进行分析,我们不难发现,这笔交易调用了 AlchemistEth 合约的 harvest 函数,并且传入了 _vaultId=0 这个参数,最后返回了 为了更加了解 harvest 函数的作用,我们需要对整个函数进行分析: 不难发现,harvest 函数其实包含两个重要的操作,分别是收获奖励和将奖励分发给 transmuter 合约。其中 vault 是一个 library 库合约,其中的 harvest 逻辑实现如下: 通过代码分析不难发现,vault 库合约的 harvest 函数其实是检查了外部的 adapter 的总的资金量,然后根据 adapter 中的资金量减去用户的充值数量计算出收益的部分。 (责任编辑:admin) |