OUSD 损失 700 万美金事件分析

据慢雾区情报, 11 月 17 日,以太坊 DeFi 项目 OUSD 遭受闪电贷攻击。慢雾安全团队针对本次攻击进行了简要分析,如下:

1. 攻击者使用 dydx 闪电贷借出 70000 个 ETH,随后通过 Uniswap 将其兑换为 USDT 和 DAI。

2. 攻击者调用 OUSD Vault的 mint 函数,随后将 750 万 USDT 从攻击者合约转入 OUSD Vault 中。

3. 在攻击者转入 750 万之前,Vault 的价值约为 7018138 美元。攻击者转入 750 万 USDT 后将占 Vault 总价值的一半以上。

4. 随后攻击合约利用 mintMultiple 函数传入 DAI 合约地址与攻击合约的地址,将调用攻击合约的 transferFrom 函数,攻击者在攻击合约的 transferFrom 函数中构造再次调用 Vault 合约 mint 函数的逻辑来实现重入攻击。

5. 在上一步骤中转入 2050 万 DAI 后通过攻击合约的 transferFrom 函数再次调用 Vault 的 mint 函数。在步骤 3 中由于攻击者资产已占 Vault 总价值的一半以上,所以此时攻击者将凭空获得超过价值 1025 万的收益分配。

6. 随后将通过 oUSD.mint 铸出 2000 OUSD,并通过 allocate 结算重入时 2000 USDT 的收益。重入结束后仍将通过 oUSD.mint 铸出之前转入的 2050 万 DAI 等值的 OUSD 代币。

7. 最后 Vault 的总价值约为 3501 万美元,但攻击者所拥有的价值超过 3825 万美元,因此攻击者用大部分的 OUSD 去 Vault 进行赎回操作,将 Vault 基本提空,而其余的 OUSD 是通过 Uniswap 和 Sushiswap 的 OUSD – USDT 池将 OUSD 换成 USDT 来增加收益。

总结:此次攻击关键在于调用外部合约造成的重入问题与 Vault 的 rebase 收益分配机制相结合,导致攻击者可以通过重入来凭空获得巨额的收益分配。针对此类情况,慢雾安全团队建议对传入资产进行检查后,对不在白名单内的资产直接进行回滚,并使用防重入锁以避免重入攻击。

Author: FaxToken

发表评论

电子邮件地址不会被公开。 必填项已用*标注