REWARD:Cover 协议攻击时间分析:黑客利用accRewardsPerToken实现代币增发

12月29日,针对Cover协议遭受攻击一事,慢雾安全团队对整个流程进行了简要分析,如下:

1.在Cover协议的Blacksmith合约中,用户可以通过deposit函数抵押BPT代币;

2.攻击者在第一次进行deposit-withdraw后将通过updatePool函数来更新池子,并使用accRewardsPerToken来记录累计奖励;

Poloniex创新区已上线DeFi项目COVER:Poloniex创新区于12月8日02:00(HKT)正式上线DeFi项目COVER ,充值入口已开放,并开启COVER/USDT交易市场。[2020/12/8 14:33:58]

3.之后将通过_claimCoverRewards函数来分配奖励并使用rewardWriteoff参数进行记录;

YFI创始人:DILL、Cream v2和Cover v1.1等4个项目正在接受审计:YFI创始人Andre Cronje发推表示:目前共有4个新项目正在接受审计,明确提到3个:分别是DILL代币、Cream v2借贷协议、Cover1.1 perps。第四个新项目并没有说明,引发众多推特用户猜测。

同时Andre Cronje“吐槽”一把审计过程:等待反馈的循环很痛苦,感觉就像“浪费掉”的时间,你不能开始新的工作,也不能发布项目。[2020/12/7 14:27:10]

4.在攻击者第一次withdraw后还留有一小部分的BPT进行抵押;

Yearn将与DeFi保险项目Cover Protocol合并:11 月 28 日,yearn.finance(YFI)创始人 Andre Cronje 表示,此次合并将有利于 Yearn 和 Cover Protocol 开发人员优化、增强和扩大已经在进行的保险类工作。

Cover 将会提供更广泛的保障范围,并接受更多类型的抵押品;推出永续保险这种不失效的保险模式;保险服务将面向所有 DeFi 项目。

在 Cover1.1 版本中,将允许其他协议创建自己的保险范围,这使得其他社区能够设计出可掌控的属于自己的保险系统;Yearn 的 lp 被默认参与 Cover 的永续保险;同时 Andre 表示,Cover 现有的代币模型将保持不变。[2020/11/28 22:26:00]

5.此时攻击者将第二次进行deposit,并通过claimRewards提取奖励;

6.问题出在rewardWriteoff的具体计算,在攻击者第二次进行deposit-claimRewards时取的Pool值定义为memory,此时memory中获取的Pool是攻击者第一次withdraw进行updatePool时更新的值;

7.由于memory中获取的Pool值是旧的,其对应记录的accRewardsPerToken也是旧的会赋值到miner;

8.之后再进行新的一次updatePool时,由于攻击者在第一次进行withdraw后池子中的lpTotal已经变小,所以最后获得的accRewardsPerToken将变大;

9.此时攻击者被赋值的accRewardsPerToken是旧的是一个较小值,在进行rewardWriteoff计算时获得的值也将偏小,但攻击者在进行claimRewards时用的却是池子更新后的accRewardsPerToken值;

10.因此在进行具体奖励计算时由于这个新旧参数之前差值,会导致计算出一个偏大的数值;

11.所以最后在根据计算结果给攻击者铸造奖励时就会额外铸造出更多的COVER代币,导致COVER代币增发。

具体accRewardsPerToken参数差值变化如下图:

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:15ms0-1:514ms