USDT:Yearn Finance 被黑简析

据慢雾区情报,2023 年 4 月 13 日,去中心化收益聚合平台 Yearn Finance 遭到攻击,攻击者获利超千万美金。慢雾安全团队以简讯的形式分享如下:

相关信息

Yearn 的 yUSDT 合约设计存在 aUSDT、dydx 头寸、iUSDC 与 cUSDT 储备,用户在 deposit/withdraw 时会根据上述储备余额计算用户所能获得的份额/所需存款的数额。

攻击核心点

此次攻击的原因在于攻击者利用 yUSDT 合约被错误设置了 fulcrum 地址,从而操控 yUSDT 合约中的稳定币储备余额,通过在 yUSDT 中存入 USDT,以获得大量的非预期的 yUSDT 代币进行获利。

Curve和Yearn发现新资金池存在风险后已关闭,资金将退回给用户:稳定币兑换平台Curve Finance发推称,我们在新的Yearn.finance yv2 资金池中发现了问题,所有资金是安全的,所有存款将直接发送到流动性提供者的钱包,用户不需要任何操作。Curve还表示该安全问题是由Curve和Yearn团队共同合作发现和处理的。[2021/2/8 19:13:36]

具体细节分析

1、攻击者首先通过闪电贷借出大量的 DAI、USDC 和 USDT,接着通过 Curve 的 ySwap 将 DAI 和 USDC 换成 USDT,以消耗 yUSDT 合约中的 aUSDT 储备。

Yearn社区讨论新铸造6666枚YFI 其中1/3将用于奖励贡献者:1月29日,yearn.finance (YFI)官方表示治理论坛发布了一个新的YIP57提案,讨论了新铸造6666枚YFI的可能性。官方表示,新铸造的YFI中,1/3将用于奖励贡献者,2/3将通过未来的提案分配给财政部,财政部将通过现有的治理将其部署以用于各种用途,例如:未来的贡献者激励、流动性挖矿计划、兑现奖励、协议合并和人才获取、跨协议激励措施等,以加强整个生态系统项目系列之间的合作。官方表示,提出铸造6666 枚YFI的原因是其为30,000YFI总供应量的22%。在收集反馈,对许多铸币方案和各种保留计划进行建模之后,确定大约20% 的增长是提供竞争性保留计划的最小可行量。该提案的投票将于2021年2月3日2时结束,目前投票支持率为95.3%。[2021/1/29 14:21:11]

2、接着攻击者为 Aave Pool v1 上存在负债的用户还款,目的是增加 Aave Pool v1 中的 USDT 数额,以便 yUSDT 中的 aUSDT 能够顺利被赎回。

MakerDao社区计划将yearn.finance添加至BTCUSD预言机白名单:9月17日,MakerDao社区成员于MakerDao论坛上发起新提案MIP10c9-SP10,计划将yearn.finance添加至BTCUSD预言机白名单。根据该提案,MakerDao正在构建第二个基于Maker的金库,该库将以使用ETH-A同类库yWETH保管库类似的方式,来使用WBTC-A库。该库将维护一个Maker Vault,并将制造的DAI委托到yearn的DAI Vault。[2020/9/17]

3、紧跟着调用 yUSDT 合约的 deposit 函数进行 USDT 存款,得到相对应的 yUSDT 代币。为后续通过 withdraw 清空 yUSDT 中 aUSDT 储备做准备。

yearn创始人AndreCronje宣布推出去中心化保险服务yinsure.finance:yearn创始人AndreCronje宣布推出去中心化的保险类服务原型yinsure.finance,将于接下来的几周里系统性地发布产品。该产品将包含三个核心部分:承保金库(InsurerVaults)、投保金库(InsuredVaults)和索赔治理(ClaimGovernance)。承保金库的保险服务是由流动性提供方(LP)提供的,但是可以获得相关的费用作为收入。首个上线的承保金库是USDC,首个提供的投保金库是yVault中的yUSD(包裹的yCRV)资产。[2020/8/17]

4、为了确保 withdraw 时能够清空 yUSDT 中 aUSDT 储备,攻击者调用 iUSDC 合约的 mint 函数铸造 iUSDC 后,将 iUSDC 直接转给 yUSDT 合约,为 yUSDT 合约增加储备深度。

5、随后攻击者调用 yUSDT 合约的 withdraw 函数进行取款,由于此时 provider 指定为 AAVE,因此 yUSDT 会通过 Aave Pool v1 赎回 USDT 给提款人。

6、由于攻击者在之前通过 iUSDC 增加了合约中的储备,因此在此次提现中可以将 yUSDT 里的 aUSDT 储备全部清空。

7、此时 yUSDT 合约中的 aUSDT、dydx 头寸与 cUSDT 储备都被操控为 0 了。最后,为清空 iUSDC 储备,攻击者调用 yUSDT 合约的 rebalance 函数,进行储备更新。

8、由于此时 yUSDT 中只剩余 iUSDC,因此合约的新 provider 将会被指向iUSDC,导致 Rebalance 函数会先进行 _withdrawAll 操作,再通过余额获取的方式更新储备。

9、而在 _withdrawAll 操作中会燃烧掉 iUSDC 以获得 USDC 代币,但在更新储备时获取的是 yUSDT 合约中 USDT 的余额。因此 fulcrum 储备被错误的指向了 iUSDC,导致此时 yUSDT 合约储备被操控为 0。

10、攻击者为确保能通过存款获得大量的 yUSDT,向 yUSDT 合约中转入 1 wei 的 USDT。

11、最后,攻击者调用 yUSDT 的存款函数,存入 10,000 枚 USDT,获得 1,252,660,242,850,000 枚 yUSDT,并通过 curve 将 yUSDT 换成大量的 yDAI、yUSDC、yTUSD。

总结

本次攻击事件是由于 Yearn Finance 的 yUSDT 合约错误的配置导致的。慢雾安全团队建议在对协议进行配置时,应仔细检查所有参数是否符合预期并进行充分的测试以确保协议的安全。

慢雾科技

个人专栏

阅读更多

金色财经 善欧巴

Chainlink预言机

金色早8点

白话区块链

Odaily星球日报

Arcane Labs

深潮TechFlow

欧科云链

BTCStudy

MarsBit

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-1:185ms