慢雾:Harvest.Finance被黑事件简析

2020年10月26日,Harvest Finance项目因闪电贷攻击损失超400万美元。慢雾安全团队分析攻击流程如下:

  • 攻击者通过Tornado.cash转入20ETH作为手续费,并通过UniswapV2闪电贷借出大量USDC与USDT
  • 利用Curve交易所的exchange_underlying函数兑换USDT/USDC,人为改变池中investedUnderlyingBalance数值
  • 向Harvest的Vault存入USDC时,系统因依赖Curve失衡报价而多铸造fUSDC代币
  • 攻击者通过逆向操作恢复Curve池平衡后,赎回fUSDC获得超额USDC获利
  • 重复上述操作持续套利,核心漏洞在于Harvest的fToken铸币机制过度依赖外部可操纵的Curve报价

(注:事件涉及具体交易哈希已省略,完整技术细节可参考原文分析)

总结

2020 年 10 月 26 号,据慢雾区消息 Harvest Finance 项目遭受闪电贷攻击,损失超过 400 万美元。以下为慢雾安全团队对此事件的简要分析。

1. 攻击者通过 Tornado.cash 转入 20ETH 作为后续攻击手续费

2. 攻击者通过 UniswapV2 闪电贷借出巨额 USDC 与 USDT

3. 攻击者先通过 Curve 的 exchange_underlying 函数将 USDT 换成 USDC,此时 Curve yUSDC 池中的 investedUnderlyingBalance 将相对应的变小

4. 随后攻击者通过 Harvest 的 deposit 将巨额 USDC 充值进 Vault 中,充值的同时 Harvest 的 Vault 将铸出 fUSDC,而铸出的数量计算方式如下:    

amount.mul(totalSupply()).div(underlyingBalanceWithInvestment());    

计算方式中的 underlyingBalanceWithInvestment 一部分取的是 Curve 中的 investedUnderlyingBalance 值,由于 Curve 中 investedUnderlyingBalance 的变化将导致 Vault 铸出更多的 fUSDC

5. 之后再通过 Curve 把 USDC 换成 USDT 将失衡的价格拉回正常

6. 最后只需要把 fUSDC 归还给 Vault 即可获得比充值时更多的 USDC。

7. 随后攻击者开始重复此过程持续获利

其他攻击流程与上述分析过程类似

参考交易哈希:

0x35f8d2f572fceaac9288e5d462117850ef2694786992a8c3f6d02612277b0877

总结:此次攻击主要是 Harvest Finance 的 fToken(fUSDC、fUSDT...) 在铸币时采用的是 Curve y池中的报价(即使用 Curve 作为喂价来源),导致攻击者可以通过巨额兑换操控外部的价格来控制 Harvest Finance 中 fToken 的铸币数量,从而使攻击者有利可图。

分享至:

作者:PA荐读

本文为PANews入驻专栏作者的观点,不代表PANews立场,不承担法律责任。

文章及观点也不构成投资意见

图片来源:PA荐读如有侵权,请联系作者删除。

关注PANews官方账号,一起穿越牛熊
推荐阅读
6小时前
7小时前
9小时前
9小时前
10小时前
13小时前

热门文章

行业要闻
市场热点
精选读物

精选专题

App内阅读