据慢雾区情报,2023 年 4 月 13 日,去中心化收益聚合平台 Yearn Finance 遭到攻击,攻击者获利超千万美金。慢雾安全团队以简讯的形式分享如下:
相关信息
Yearn 的 yUSDT 合约设计存在 aUSDT、dydx 头寸、iUSDC 与 cUSDT 储备,用户在 deposit/withdraw 时会根据上述储备余额计算用户所能获得的份额/所需存款的数额。
攻击核心点
此次攻击的原因在于攻击者利用 yUSDT 合约被错误设置了 fulcrum 地址,从而操控 yUSDT 合约中的稳定币储备余额,通过在 yUSDT 中存入 USDT,以获得大量的非预期的 yUSDT 代币进行获利。
yearn.finance已回购超750万美元YFI:12月19日消息,据官方消息,DeFi收益聚合器yearn.finance近期宣布,已从公开市场购买了价值7,526,343美元的YFI。以26,651美元的平均价格回购了282.4个YFI(占总供应量的0.77%)。此外,上月回购的YFI数量超过上一年的数量。资金库目前已储蓄超过4500万美元,预计未来将会有更积极的回购。[2021/12/19 7:49:08]
具体细节分析
1、攻击者首先通过闪电贷借出大量的 DAI、USDC 和 USDT,接着通过 Curve 的 ySwap 将 DAI 和 USDC 换成 USDT,以消耗 yUSDT 合约中的 aUSDT 储备。
Nexus Mutual已接受Yearn Finance的保险理赔:DeFi保险项目Nexus Mutual已接受Yearn Finance的保险理赔,理赔数额为50ETH,约合77,863美元。保单ID为759,理赔ID为80。[2021/2/8 19:11:11]
2、接着攻击者为 Aave Pool v1 上存在负债的用户还款,目的是增加 Aave Pool v1 中的 USDT 数额,以便 yUSDT 中的 aUSDT 能够顺利被赎回。
3、紧跟着调用 yUSDT 合约的 deposit 函数进行 USDT 存款,得到相对应的 yUSDT 代币。为后续通过 withdraw 清空 yUSDT 中 aUSDT 储备做准备。
外媒:Yearn Finance有关新铸造6666枚YFI的投票已通过:Yearn Finance社区有关新铸造6666枚YFI的投票已于UTC时间18:00(北京时间2月3日2:00)通过。此前消息,官方表示,新铸造的YFI中,1/3将用于奖励贡献者,2/3将通过未来的提案分配给财政部,财政部将通过现有的治理将其部署以用于各种用途。(coindesk)[2021/2/3 18:44:36]
4、为了确保 withdraw 时能够清空 yUSDT 中 aUSDT 储备,攻击者调用 iUSDC 合约的 mint 函数铸造 iUSDC 后,将 iUSDC 直接转给 yUSDT 合约,为 yUSDT 合约增加储备深度。
yearn.finance创始人:正确的去中心化协议并不需要决策者或名义上的负责人:yearn.finance创始人Andre Cronje在接受采访时表示,一个正确的去中心化协议不需要一个决策者或名义上的负责人,yearn计划过渡至一个更加去中心化的模型,在这个模型中,多签见证者将共同批准策略。
Andre称:“我们还没有完全实现过渡。我不同意那些认为我就是yearn的观点,因为这个项目并不需要我。如果我在接受这个采访时突然心脏病发作了,项目也会继续运营的。”(The Block)[2020/9/18]
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
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。