http://www.7klian.com

首发|CertiK:卖意外险的保险公司也蒙受了意外?CoverProtocol裂痕阐明

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

最近小区呈现了一些流离狗,传闻邻人家有孩子看到狗吓得就跑,功效反而被狗狂追咬了一口。

还好怙恃机警,给孩子上了个意外险,几针狂犬病疫苗下来没怎么费钱。

作为币民假如加密资产不幸被盗,但项目方可能你小我私家购置了保险,那么也大可安心让保险公司送还损失的资产。

可尚有最差的一种环境:可是假如连保险公司都出了安详变乱,受到进攻了呢?

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

北京时间12月28日晚,CertiK安详技能团队发明Cover Protocol产生代币无限增发裂痕进攻。

进攻者通过重复对项目智能合约举办质押和取回操纵,触发个中包括锻造代币的操纵,对Cover代币举办无限增发,导致Cover代币价值崩盘。

技能阐明

主要进攻分为以下步调:

1. 进攻者配置进攻须要的假代币。

2. 进攻者利用假代币,为Balancer Pool提供活动性:

①总计向Balancer Pool提供了2,573个DAI的活动性

②进攻者通过向Balancer Pool提供活动性,得到了约132,688个Balancer活动性证明代币BPT

3. 进攻者向Cover Protocal中的Blacksmith.sol智能合约质押(stake)前一步中所得的所有Balancer活动性证明代币。

质押时,进攻者挪用位于0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5的Blacksmith.sol智能合约中的deposit函数,如图一所示:

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

图一:The deposit() function in blacksmith.sol

通过挪用deposit函数,进攻者将获得的BPT活动性证明质押到cover protocol中。

首先通过图一中118行将当前活动性证明代币的pool数据读取到memory,然后挪用121行代码对当前pool的数据举办更新。

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

图二:blacksmith.sol中的updatePool()函数

如图二第75行所示,在updatePool()函数中修改的当前活动性证明代币的pool数据是一份存储在storage中的数据,与在deposit()中存储在memory中当前活动性证明代币的pool数据是两份数据。

在图二第84行lpTotal的值代表当前条约中总共存入的活动性证明代币数目,由于该变量数值较小,因此通过84行公式pool.accRewardsPerToken的数值将会增大,更新过的accRewardsPerToken值存储在storage中。

图三:blacksmith.sol中的_claimCoverRewards()函数

接下来如图三中318行所示,deposit()通过挪用_claimCoverRewards()函数,向函数挪用者(msg.sender)锻造必然数目标cover代币。

锻造cover代币的数目与pool.accRewardsPerToken, CAL_MULTIPLIER以及miner.rewardWriteoff三个变量相关。

请留意这里pool.accRewardsPerToken的数值是利用了存放在memory中的pool数据,并非利用图二中update()函数更新之后的数值。

同时,通过图1中deposit函数得知,miner.rewardWriteoff的数值更新是在_claimCoverRewards()函数执行完成之后产生。

因此原本设计上应利用更新过的miner.rewardWriteoff的数值计较需要锻造cover代币的数目,这里错误的利用了未更新过的miner.rewardWriteoff的数据,导致实际锻造cover代币数目比应锻造代币数目增多,最终导致了代币增发。

质押乐成之后,进攻者通过挪用blacksmith.sol智能合约中的withdraw()函数,将质押的BPT取回,同时取得特别锻造的cover代币,完成进攻。

通过比拟执行deposit()函数和执行withdraw()函数之后的代币结余表,我们可以发明通过这一组deposit和withdraw函数挪用之后,,进攻者可以得到约704个COVER代币。

deposit()之后:

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

withdraw()之后:

首发|CertiK:卖意外险的保险公司也承受了意外?CoverProtocol裂缝阐发

进攻者通过重复执行deposit和withdraw函数,可以使Blacksmith函数无限锻造代币,并将代币转到本身的地点中,由此赢利。

进攻产生后,截至发稿时,cover官方已经将blacksmith迁移到安详版本:

有裂痕的blacksmith地点:

0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5

姑且修复后的blacksmith地点:

0x1d5fab8a0e88020309e52b77b9c8edf63c519a26

姑且修复后的blacksmith条约姑且克制了一切质押和取回操纵,以此阻止进攻者继承实行进攻。

本次进攻最初进攻者共赢利440万美金,约合人民币2900万人民币

有其他进攻者操作该裂痕动员雷同进攻,譬喻Grap.finance项目官方参加了操作该裂痕的进攻,赢利4350个ETH代币。

在进攻产生后几个小时,Grap.finance项目官方通过Twitter声称对本次进攻认真,并暗示已将所有的赢利退回给了Cover Protocol。

安详发起

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