卖意外险的保险公司也遭受了意外?Cover Protocol漏洞分析
最近小区出现了一些流浪狗,听说邻居家有孩子看到狗吓得就跑,结果反而被狗狂追咬了一口。
还好父母机智,给孩子上了个意外险,几针狂犬病疫苗下来没怎么花钱。
作为币民,如果加密资产不幸被盗,好在项目方或者你个人购买了保险,那么也大可放心让保险公司偿还损失的资产。
可还有最差的一种情况:但是如果连保险公司都出了安全事故,受到攻击了呢?
北京时间12月28日晚, CertiK安全技术团队发现Cover Protocol发生代币无限增发漏洞攻击。
攻击者通过反复对项目智能合约进行质押和取回操作,触发其中包含铸造代币的操作,对Cover代币进行无限增发,导致Cover代币价格崩盘。
技术分析
整个攻击流程如下:
主要攻击分为以下步骤:
1. 攻击者设置攻击必要的NOCLAIM代币。2. 攻击者使用NOCLAIM代币,为Balancer Pool提供流动性:①总计向Balancer Pool提供了2,573个DAI的流动性
②攻击者通过向Balancer Pool提供流动性,获得了约132,688个Balancer流动性证明代币BPT
3. 攻击者向Cover Protocal中的Blacksmith.sol智能合约质押(stake)前一步中所得的所有Balancer流动性证明代币。质押时,攻击者调用位于0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5的Blacksmith.sol智能合约中的deposit函数,如图一所示:图一:The deposit() function in blacksmith.sol
通过调用deposit函数,攻击者将得到的BPT流动性证明质押到cover protocol中。
首先通过图一中118行将当前流动性证明代币的pool数据读取到memory,然后调用121行代码对当前pool的数据进行更新。
接下来如图三中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()之后:
withdraw()之后:
攻击发生后,截止发稿时,cover官方已经将blacksmith迁移到安全版本:
有漏洞的blacksmith地址:0xe0b94a7bb45dd905c79bb1992c9879f40f1caed5
临时修复后的blacksmith地址:
0x1d5fab8a0e88020309e52b77b9c8edf63c519a26
临时修复后的blacksmith合同临时禁止了一切质押和取回操作,以此阻止攻击者继续实行攻击。
本次攻击最初攻击者共获利440万美金,约合人民币2900万人民币。
有其他攻击者利用该漏洞发动类似攻击,例如Grap.finance项目官方参与了利用该漏洞的攻击,获利4350个ETH代币。
在攻击发生后几个小时,Grap.finance项目官方通过Twitter声称对本次攻击负责,并表示已将所有的获利退回给了Cover Protocol。
安全建议
往期回顾
CertiK荣获2020年金色财经“与时共创”年度最佳安全服务机构大奖!
致CertiK三周年——加密世界的守望者
比特币突破23000美元,加密钱包的安全审计清单,让你放心盘!
区块链保险项目Nexus Mutual被攻击解析:黑客绝不会因为你是谁而绕道
【公告】Nexus Mutual被盗?CertiKShield正式推出WNXM Shield保险资金池!2020世界区块链大会·武汉圆桌会议 | CertiK中国区总裁探讨:DeFi之盾--狂欢背后,审计是安全的护城河吗?
手机多久没碎屏必买保险?审计过的项目有多大概率依然让你赔光?| 区块链安全概率解谜 下篇
飞机颠簸总怕下一秒空难?我们每天遇到有漏洞的DeFi合约概率是多少?| 区块链安全概率解谜 上篇
Multiplier Finance加入去中心化链上资金保险池CertiKShield
【重磅福利】神荼游戏积分兑换CTK通道即将开启!
请点击“阅读原文”访问CertiK基金会官方网站