慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件_区块链前沿

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

事件首要起源在于 Alchemix 经历 transmuter 增加了 3 次 vault,终究致使经历过错的元素获得了过错的收益。

原文题目:《走过最长的路,竟是本人的套路 —— Alchemix 事情理会》
撰文:yudan,上任于慢雾平安团队

据慢雾区动态,2021 年 06 月 16 日,以太坊 DeFi 名目 Alchemix 的 alETH 合约疑似浮现平安题目。17 日,Alchemix 宣告了事件理会陈诉,慢雾平安团队赶快参与理会,并在官方理会陈诉的原形上梳理了本次事情的全面头绪和中心环节点,供专家参考。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

太长不看系列

本次理会作品很长。这边先说论断,简单专家有个大约的明白。本次事件的首要起源在于 Alchemix 经历 transmuter 增加了 3 次 vault,致使收益讯息记载在了一个过错的元素上,而在挪用 transmuter 的 harvest 函数时也不传入精确的 index 值,致使经历过错的元素获得了过错的收益,将过错的 4300 ETH 的收益发送到 adapter 合约,搀扶用户归还了 alETH 的贷款,形成收益加多的题目,致使了悲剧。

中心理会——Round 1

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

按照官方宣告的事件理会陈诉,本次事件的起源是官方的 alETH 的布置剧本不料地创造了特为的 vaults,致使 Alchemix 运用了 vaults 数组中过错的索引并计划出了过错的夸奖,致使 transmuter 把一齐的夸奖用于归还了用户的一齐欠债。我显示单单是这句简略的理会让人有点云里雾里,摸不着脑子,以是咱们只可把宗旨放在官方给出的买卖中,看看能不行找到实情。

按照官方给出的买卖,经历 ethtx.info 理会东西施行理会,咱们不难浮现,这笔买卖挪用了 AlchemistEth 合约的 harvest 函数,而且传入了 _vaultId=0 这个参数,结尾返回了
「4308144937764982868765」和「4308144937764982866415」这两个值。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

为了更加明白 harvest 函数的听命,咱们须要对全面函数施行理会:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

不难浮现,harvest 函数本来蕴含两个要害的职掌,区别是劳绩夸奖和将夸奖散发给 transmuter 合约。个中 vault 是一个 library 库合约,个中的 harvest 逻辑完结以下:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

经历代码理会不难浮现,vault 库合约的 harvest 函数本来是查看了外部的 adapter 的总的资本量,尔后按照 adapter 中的资本量减去用户的充值数目计划出收益的局部。

这边咱们也许将这个 adapter 明白为一个战略池,用于治理用户的资本和收益。尔后咱们回到用户一发端的 AlchemistEth 合约中的 harvest 函数 , 浮现返回的「4308144937764982868765」和
「4308144937764982866415」这两个值本来对应的即是 vault 库合约的 harvest 函数计划出的须要提现的代币数目和从 adapter (战略池) 中取回的代币的数目。因为这个 adapter 对应的收益代币是 WETH,精度为 18 位,那末 「4308144937764982866415」这个数值换算过来即是「4308.144937764982866415」个 WETH。

也即是说,本次 harvest 职掌,收益了胜过 4300 个 ETH 的收益,尔后这个收益不才一步中经历 _distributeToTransmuter 函数给到了 transmuter 合约施行散发,咱们看下散发进程中的逻辑是何如的:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

_distributeToTransmuter 函数的逻辑惟有简洁的 3 行,咱们首要关注的是结尾的外部挪用 —— lowerHashMinted 函数。该函数所对应的 xtoken 在这边指的是 alETH 自身。由于 alETH 自身是用户经历借贷借出来的,以是 lowerHashMinted 这边的职掌本来是运用 harvest 的收益将 alETH 总的贷出数目缩小了,进而缩小了每一个用户的贷款。归纳来讲即是用 harvest 4300 ETH 的收益归还用户的 alETH 贷款。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

打个小归纳

这边先归纳下这个过程,即是 AlchemistEth 合约经历 harvest 函数,得回了 4300 ETH 的收益,并将这个收益散发出去了,用于归还用户的 alETH 贷款,致使了咱们看到的状况 —— 已贷出 alETH 的用户在不须要还款的状况下便可以拿回他们质押的 ETH。那毕竟是为何,会有这 4300 ETH 的收益呢?这多出来的 4300 ETH 的收益是何如来的?针对这个题目,咱们发端下一轮的理会。

中心理会——Round 2

要明白为何会多出来 4300 ETH,就必需明白 AlchemistEth 的资本保存进程。在 AlchemistEth 合约中,合约总的充值状况是运用 Vault library 库的 Data 组织体施行记载的,尔后经历 flushActiveVault 函数革新对应的充值数目 (totalDeposit)。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

尔后 depositAll 函数会将充值的代币金额打到对应的 adapter(战略池) 中,那末不才一次 harvest 的时间,经历 adapter(战略池) 获得的 totalValue,就会是用户的本金加良策略池的收益。为了计划收益进程中的本金局部,咱们对官方给出的买卖施行 debug,浮现本金仅为 9000 ETH,从 adapter 获得的收益加上本金公有 13000 ETH,也即是说 9000 ETH 的本金孕育了 4300 ETH 的收益。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

不过,依照上头理会的逻辑,用户的本金是不会孕育那末大的收益的,题目信任是出在了 adapter 获得的 totalValue。也即是说 adapter 不只惟有 AlchemistEth 充值代币,还保管其余的收益渠道。为了考证咱们的归天,慢雾平安团队理会了 adapter 的一齐代币收入,居然浮现了一笔出格的转入动作,而且金额也能适值对上多出的 4300 ETH 的收益。也即是说,题目就在这边了。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

经历察看买卖数据,浮现这是一笔挪用 harvest 职掌的买卖,挪用的合约是 transmuter 合约:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

也即是说,是这个 harvest 函数出题目了,harvest 函数的逻辑以下:

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

一样是挪用了 vault 的 harvest 函数,清楚的配方,清楚的滋味。咱们再次施行 debug,浮现一个惊人的究竟 ——在施行收益的时间,vault 的 totalDeposit 果然为 0,致使 4300 ETH 的收益直接散发给了 adapter,致使了 adapter 获得的 totalValue 过错了,多了 4300 个 ETH,起源即是在这边。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

到了这边,咱们已很热诚实情了,剩下要束缚的即是为何 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 了。致使了悲剧的产生。

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

归纳

到这边,全面工作已变得很明显了,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

起源链接:mp.weixin.qq.com

免责说明:动作区块链讯息平台,本站所宣告作品仅代表作家一面见解,与链闻 ChainNews 态度无关。作品内的讯息、见识等均仅供参考,并不是动作或被视为本质投资倡导。

以太坊

以太坊

以太坊

以太坊

怒放的宣传式区块链运用平台,经历其专属加密钱币 Ether 以太币供应去重心化的假造机,解决点对点合约。理睬任何人设立和运用经历区块链岁月运转的去重心化运用,不任何狡黠、审查、第三方禁锢。 以太坊的观念初次在 2013 至 2014 年由维塔利克·布特林 Vitalik Buterin 受比特币发掘后提议,旨在共通建立一个更寰球化、更自如、更切实的互联网。以太坊EthereumETHERC 20ERC-20ERC20ERC721ERC-721以太坊 2.0察看更多Alchemix

Alchemix

Alchemix

Alchemix

Alchemix 是 DeFi 合成财产,理睬创造代表改日收益的合成财产代币,运用户恐怕针对安定币的偶尔入款检索热诚立即的通证化价格。其为用户供应了多数的运用,并为开拓者供应了使人激昂的新东西。AlchemixAlchemix FinanceALCX察看更多以太坊 岁月 平安 DeFi Alchemix

区块链前沿是一个专业的比特币价格查询&区块链数字货币资讯平台,我们为用户提供关于区块链企业、数字货币币种、数字货币交易平台及区块链人物的相关信息,我们整理发布全球主流比特币交易平台、虚拟数字货币交易平台、区块链应用企业的结构化信息,我们对区块链及数字资产充满热情,立志打造成一个区块链综合门户网站。
区块链前沿 » 慢雾:技术详解 DeFi 借贷协议 Alchemix 中 alETH 合约漏洞事件

发表评论