首页 手机兼职平台区块链正文

闪电贷+重入进犯,慢雾简析 OUSD 丢失 700 万美金进犯流程

admin 区块链 2020-11-24 17:30:26 7694 0

+OUSD700Kong@

20201117DeFiOUSD

布景概要

Origin Dollar (OUSD) 由 Origin Protocol (OUSD) 创立,是一种新式的 ERC-20 安稳币,当它依然放在钱包里时,会主动从 DeFi 协议中取得有竞争力的收益。OUSD 由 USDT、USDC 和 DAI 等其他安稳币的 1:1 支撑。

进犯流程简析

1. 进犯者运用 dydx 闪电贷借出 70000 个 ETH,随后经过 Uniswap 将其兑换为 USDT 和 DAI。

2. 进犯者调用 OUSD Vault 的 mint 函数,Vault 会先进行一次 rebase 将之前堆集的奖赏进行分配,随后将 750 万 USDT 从进犯者合约转入 OUSD Vault 中。此刻 OUSD 合约会铸出等量的 750 万 OUSD 代币给进犯合约,最终经过 allocate 来结算当时的收益。

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

4. 随后进犯合约运用 mintMultiple 函数传入 DAI 合约地址与进犯合约的地址,同样是先进行一次 rebase ,将之前累计的收益进行分配 (包括从前转入的 750 万 USDT 部分),再经过 transferFrom 先将进犯合约的 2050 万 DAI 转入 Vault 中。随后将调用进犯合约的 transferFrom 函数,进犯者在进犯合约的 transferFrom 函数中结构再次调用 Vault 合约 mint 函数的逻辑来完成重入进犯。

5. 在上一过程中转入 2050 万 DAI 后经过进犯合约的 transferFrom 函数再次调用 Vault 的 mint 函数。因为重入时传入 2000 USDT 契合判别是否调用 rebase 的条件,此刻将进行一次 rebase,而因为 rebase 需求 Vault 中的财物总价值和 OUSD 的总铸币数有差值才干触发。依照本来的事务场景是进行 allocate 结算收益后改动 Vault 中的财物总价值然后经过 rebase 进行分配。而因为重入原因并没有先经过 oUSD.mint 进行铸币操作,且进犯者已先将 2050 万的 DAI 转入 Vault 中,所以 Vault 中的财物总价值依然添加了,导致合约中的财物总价值大于 OUSD 的总铸币量。因而 Vault 会将添加的 2050 万 DAI 当成收益部分进行 rebase 分配。在过程 3 中因为进犯者财物已占 Vault 总价值的一半以上,所以此刻进犯者将随便取得超越价值 1025 万的收益分配。

6. 随后将经过 oUSD.mint 铸出 2000 OUSD,并经过 allocate 结算重入时 2000 USDT 的收益 (从上一过程能够看出进犯合约传入的 2000 USDT 仅仅为了满意调用 rebase 的条件,触发收益分配罢了)。重入完毕后仍将经过 oUSD.mint 铸出之前转入的 2050 万 DAI 等值的 OUSD 代币。

7. 最终 Vault 的总价值约为 3501 万美元,但进犯者所具有的价值超越 3825 万美元,因而进犯者用大部分的 OUSD 去 Vault 进行换回操作,将 Vault 根本提空,而其他的 OUSD 是经过 Uniswap 和 Sushiswap 的 OUSD - USDT 池将 OUSD 换成 USDT 来添加收益。

总结

Vaultrebase便

mp.weixin.qq.com

版权声明

本文仅代表作者观点,不代表网赚之家本站立场。
本文系作者授权发表,未经许可,不得转载。

评论