前言
11 月 3 日,知道创宇区块链安全实验室 监测到 以太坊上的 DeFi 协议 VesperFi Fianance 遭遇预言机操控攻击,损失超 300 万美元。
知道创宇区块链安全实验室 第一时间对本次事件深入跟踪并进行分析。
攻击流程简析
攻击分为两部分:
第一部分:攻击阶段
交易哈希:
0x89d0ae4dc1743598a540c4e33917efdce24338723b0fabf34813b79cb0ecf4c5
1. 攻击者向 pool 添加 (VUSD 对 USDC 为无穷大) 的 0.1USDC 流动性
2. 攻击者通过 Swap 用 232k USDC 兑换走 pool 内正常的 222k VUSD 流动性
第二部分:套利阶段
交易哈希:
0x8527fea51233974a431c92c4d3c58dee118b05a3140a04e0f95147df9faf8092
1. 通过 Swap 将 222k VUSD 兑换为 2205MM fVUSD
2. 将 2205MM 抵押置换成其他 pool 基础代币
攻击原理分析
1. 首要分析为什么黑客要进行两次操作,而不通过同一攻击合约完成操作?
解决这个问题首先我们要知道 Uniswap V3 使用的预言机为 TWAP 类型,该预言机功能为获取一个时间周期上的交易平均价格,也就是说当价格已经发生改变时,该交易可能还并没有处在 TWAP 获取价格的时间周期中。
所以在黑客已经完成攻击后,他并没有基于兑换手中的 VUSD,而是等到价格发生变化时再入手。我们也确实可以看到套利阶段发生在攻击阶段 10 块高后。
攻击交易哈希:
套利交易哈希:
2. 至于添加流动性和兑换流动性得到解释
在 Uniswap V3 中,只有一个区块内对价格有影响的第一笔交易会被写入预言机。
因此添加过高的流动性可以让 TWAP 发现并获取到攻击者指定的价格。而兑换走流动性则是让 TWAP 发现前一步骤以及套利。
总结
本次安全事件的主角虽然是 VesperFi Fianance,但是更让人关心的是 Uniswap V3 的 TWAP 预言机是否依然安全,可以观察到并非 TWAP 预言机本身错误地获取了价格,而是一个严重超高的价格被设置出来让它获取的,不可否认其存在局限性,但是本次事件最主要的问题还是流动性过于集中在预期价格附近很容易被操纵以及允许 pool 内单个代币不合理的流动性被设置。
知道创宇区块链安全实验室在此提醒,任何有关资金问题的操作都需要慎重考虑,合约审计、风控措施、应急计划等都有必要切实落实。