REWARD:一次由存储状态引发的惨案 Cover协议被黑简要分析

By:??慢雾安全团队

据慢雾区情报,2020年12月29日,Cover协议价格暴跌。慢雾安全团队第一时间跟进相关事件并进行分析,以下为分析简略过程。

攻击流程简析

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

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

QITCHAIN第一次早期20个测试节点大会结束:据官方消息,4月30日,PoST第一阶段升级测试完成,召开全球早期前20大测试节点第一次大会,对“技术如何支持QTC生态和全球共识发展”做了论证,并达成“一致行动人”决议。讨论了关于全网前十大竞赛POS节点增加至20个竞赛节点,并进行模型推演和技术测试,结果将后续公布。会议现场对截至4月30号的网络节点和数据进行了统计和整理,搜索实验室账户持有量为1450万Q;QTC基金会账户持有量为525万Q;以上账户在2025年1月前共计会有450万Q根据团队和生态需要进行释放,其余全部锁仓;早期参与的20个测试节点总持有量为389万Q,2025年1.1之前不流通至二级市场;全网数据显示,目前全网质押和参与POS竞赛锁仓的数量为546万Q;可追溯的全网数量总计为2896万Q,据区块浏览器数据显示全网总产出量为3155.73万Q,目前市场的总流通量为259.59万Q。[2022/5/1 2:44:01]

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

法国央行:1亿欧元数字债券发行是欧洲CBDC的一次试验:5月1日消息,事实证明,欧洲投资银行本周早些时候发行的1亿欧元数字债券实际上是欧洲央行数字货币的试验。法国央行Banque de France周四宣布,该数字债券是通过区块链上的CBDC进行结算的。该两年期债券于周二在以太坊公共区块链上发行,并于次日结算,到期日为2023年4月28日。此次交易的经办行包括高盛、桑坦德银行和法国兴业银行。

法国央行表示:“从技术角度来看,该试验需要在安全条件下开发和部署智能合约,因此,法国央行可以发行和控制CBDC代币的流通,并且CBDC转账与向投资者的证券代币交付同时发生。”该行还透露了未来进一步试验的计划,指出这是为了给欧洲CBDC提供用例证据:“在接下来的几个月里,法国央行将与市场合作进行更多的试验,以评估央行数字货币在银行间结算中的其他用途。”(Cointelegraph)[2021/5/1 21:16:25]

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

Overwinter发布 Zcash第一次硬分叉临近:Zcash发布了新软件,为其第一次系统级软件升级做准备。该软件被称为“Overwinter”,并于6月份启动,该软件发现zcash的开发团队正在努力加强其技术,以期未来更新。 由于代码的性质,将通过称为硬分叉执行,所有用户将被要求进行转换。Overwinter将包括“重放保护,透明交易的性能改进,交易到期等新功能。”[2018/3/3]

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:0ms0-3:202ms