4

SharkTeam独家分析 | 锁仓越大,风险越大:Compound第62提案升级导致奖励分发过多漏洞...

 2 years ago
source link: https://www.tuoniaox.com/news/p-517618.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

SharkTeam独家分析 | 锁仓越大,风险越大:Compound第62提案升级导致奖励分发过多漏洞分析

SharkTeam 2021-10-12 17:10
article_qmarks.svg 摘要:

锁仓越大,风险越大:Compound第62提案升级导致奖励分发过多漏洞分析

Compound是一个老牌的去中心化借贷平台,锁仓量已超过100亿美元。其运营管理方式是DAO,通过社区和提案机制来升级系统。2021年9月30日,Compound DAO出现这样一条提案(Proposals 62: https://compound.finance/governance/proposals/62   ),该提案提出更新 Comptroller 合约以修复一些 Bug。然后该提案升级却引入了严重的安全问题。

image.png

Compound官方声明,该漏洞是由于Compound的62次提案升级所导致。https://compound.finance/governance/proposals/62 

image.png

升级主要做了以下改变:

1.使用 Comptroller#compBorrowSpeeds 和Comptroller#compSupplySpeeds来代替Comptroller#compSpeedsstorage类型变量;

2.Comptroller#_setCompSpeeds(CToken[],uint256[],uint256[])来对Comptroller#_setCompSpeed(CToken,uint256) 进行升级;

3.设定所有新增的初始化的市场状态指数(initial index is 1e36);

原本设定所有未初始化的市场状态指数是为了解决惰性初始化导致的许多其他问题,来解决之前存在的整数溢出漏洞,但是并没有全面考虑到如此的升级对原本的功能的影响!

该漏洞产生的条件:

需要在62次提案更新之前与某些特定代币(cSAI、cTUSD、cMKR、cSUSHI、cAAVE、cYFI)进行存款或借款,并留有一定的余额,就可以获得大量的comp收益奖励。 

以其中一个交易为例进行分析:https://etherscan.io/tx/0xee318650ae8bcf83517e77e8654d40201990080fcb888087f737aea28e70bdb1

image.png

获利者地址为(0xab5a193a11f779fe105e8edf9815a0b514b013ca),通过claimCmop函数来提取收益,但是却获得了22,995.930896459946832819 枚comp的收益,这个数字远远大于应获得的收益。

image.png

通过交易追踪发现,该获利者在领取借贷代币(cUSDT)的奖励时,获得了大量的comp代币( 22,995.425435193061317525枚)。

image.png

用户借贷comp奖励的公式为:borrowerAmount * deltaIndex(即:借款数量*奖励因子)。deltaIndex = borrowIndex - borrowerIndex(奖励因子 = 池借贷指数 - 用户借贷指数),由于第62次提案的升级,cUSDT池借贷指数被初始化为 compInitialIndex (1e36),而此时用户的借贷指数为0,导致算出的奖励因子deltaIndex非常大为1e36。合约正常逻辑应该先通过if (borrowerIndex == 0 && borrowIndex > = compInitialIndex) 该分支的判断,使用户的借贷指数进行更新为compInitialIndex(1e36),才可以进行奖励的计算!此处由于 borrowIndex > compInitialIndex(缺少等号) 导致绕过该判断,直接进行奖励计算,导致奖励因子计算出的值非常的大。

image.png

image.png

该用户在62次提案更新之前的一笔cUSDT的借款,为其带来了22,995枚comp的”收益“。因此该漏洞并不是任何人都可以获利,需要在62次提案更新之前与某些特定代币进行存款或借款,并留有一定的余额,就可以获得大量的comp收益奖励。

image.png

通过更新提案可知,这些特定代币为cTUSD、cAAVE、cSAI、cSUSHI、cMKR、cYFI这6种代币,其池借贷指数和存款指数均被初始化为1e36!

image.png

Compound创始人表示拿出多出来收益的10%作为白帽奖励,希望获利的用户可以归还多出来的奖励,并通过提案63,64对问题进行了修复。目前部分用户已归还了奖励。

启示:Compound虽然通过DAO的管理模式进行自治,但是在每次进行协议提案升级之前是否进行充分的安全性验证?当问题突发时,需要一定的提案过程与时间才可以对问题进行修复。这暴露了DAO对突发问题机动能力不足的问题,代码部署上链前一定要做好充足的审计与测试工作。

SharkTeam提醒您,在涉足区块链项目时请提高警惕,选择更稳定、更安全,且经过完备多轮审计的公链和项目,切不可将您的资产置于风险之中,沦为黑客的提款机。而作为项目方,智能合约安全关系用户的财产安全,至关重要!区块链项目方应与专业的安全审计公司合作,进行多轮审计,避免合约中的状态和计算错误,为用户的数字资产安全和项目本身安全提供保障。

SharkTeam作为领先的区块链安全服务团队,为开发者提供智能合约审计服务。智能合约审计服务由人工审计和自动化审计构成,满足不同客户需求,独家实现覆盖高级语言层、虚拟机层、区块链层、业务逻辑层四个方面近两百项审计内容,全面保障智能合约安全。

image.png

和2万人一起加入鸵鸟社群

添加QQ群:645991580

添加TG群:鸵鸟中文社区 https://t.me/tuoniaox

声明: 鸵鸟区块链所有发布内容均为原创或授权发布,如需转载,请务必注明文章作者以及来源:鸵鸟区块链(微信公众号:MyTuoniao),任何不尊重原创的行为鸵鸟区块链都将进行责任追究!鸵鸟区块链报道和发布内容,不构成任何投资建议。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK