KingDefi收益计算逻辑漏洞分析_DEF:VES

漏洞原因

近日,据业内人士提供的有关信息,名为KingDefi的项目合约存在漏洞,并提示其他用户谨慎操作,提取资金并取消授权。知道创宇区块链安全实验室调研发现,KingDeFi是一个DeFi项目,主要功能包含对BSC、Solana链上DeFi的收益聚合分析、用户DeFi收益追踪以及项目原生代币的抵押挖矿。

在查看BSC链上的KrownMaster合约源码后发现,该合约确实存在逻辑漏洞,会导致用户收益率受到影响,在相应的计算逻辑存在疏漏,以下为详细解释。合约链上地址如下:https://bscscan.com/address/0x56a65a3736e65349e5b0737cb2c5eb7d5ccbbbe3#code如下图所示,我们注意到在项目用户奖励更新算法逻辑的处理过程中存在对investor数组的一个遍历,此处investor地址存在被重复遍历并且修改对应奖励的可能性。

KingData监控:灰度ETH基金累计持仓 317.6万:据KingData数据显示,灰度 ETH 基金减持 651.32 枚以太坊,基金持仓总规模变为 317.57万 枚 ETH。(注:灰度暂未开放赎回,小幅减持或因每股含币量微调、扣减管理费所致。)[2021/3/23 19:09:00]

如下图所示,用户在通过deposit调用进行抵押的时候,判断当用户抵押数量为0时,可作为investor地址加入投资收益列表从而获得抵押收益,而该判断可被黑客利用。

KingData监控:灰度ETC基金累计持仓 1227.5万:据KingData数据显示,灰度 ETC 基金减持 1008.96 枚以太坊经典,基金持仓总规模变为 1227.53万 枚 ETC。(注:灰度暂未开放赎回,小幅减持或因每股含币量微调、扣减管理费所致。)更多数据或KingData下载见原文链接。[2021/2/27 17:58:40]

如下图所示,黑客可通过调用withdraw或者withdrawAll函数将指定pid池子中的抵押数量提现,从而使得user.amount为0,进而该地址可以在再次deposit抵押的时候通过相应检查进入investor列表,从而在updatePool函数中对黑客investor地址进行重复遍历并且增加多次抵押奖励,使得抵押奖励分配不均,影响到其他用户的抵押挖矿收益。

Kik称在与美国SEC达成和解后,将为交易所上线Kin“打开道路”:Kik表示,尽管不得不向美国SEC支付500万美元的罚款,但剩余的Kin代币以及Kin基金会本身,目前已脱离法律困境。其在一份声明表示:“除了罚款之外,Kik的资产仍然是Kik的财产,包括剩余的treasury、Kin的储备以及所有的智力资本。同时,Kin基金会的未来不会受到不利影响。SEC没有要求将Kin注册为证券,也没有对其施加交易限制。”声明中重申,虽然在和解之前,“交易所曾质疑能否上线Kin代币”,但现在“有了一条在以前无法上线Kin的交易所上线的开放道路”。

根据法院命令,在未来三年内,Kik将有义务在“直接或间接参与”任何新的“加密货币”、“数字货币”、“数字代币”的发行、发售、销售或转移,“或使用分布式账本技术发行或转移的类似数字资产”(包括通过2017年ICO发行的3万亿Kin)之前,提前45天通知SEC。然而,Kik在采取此类行动之前不需要寻求SEC的批准或同意,也不必向SEC提供“本协议规定的通知之外的任何信息”。

注:SEC宣布终止对Kik的诉讼,Kik将需要向SEC支付500万美元的罚款,并就未来三年的任何筹资情况向SEC提交通知。(Decrypt)[2020/10/23]

BitMax将Band Protocol 并同步开启BAND Staking服务:BitMax(BTMX.COM)交易所将于2020年6月10日 22:00(北京时间)上线Band Protocol (BAND)开放BAND/USDT交易对,并同步开启BAND Staking服务。

6月10日 22:00 - 6月20日 22:00期间,平台将对净充值BAND (充值量-提现量) ≥50 BAND 的用户从高到低进行排名,并按排名可获得对应Staking 30%的年化收益加成奖励。更多活动和交易详情见BitMax平台官网。[2020/6/9]

通过查看项目github发现,KingDefi项目方当前已对该问题进行了修改。漏洞修复

那么项目方如何修复该漏洞?查看项目的github地址(https://github.com/kingdefi/Krown-Contracts/tree/main/Farm),发现其在18个小时前曾更新过代码,对比一下更新代码。

发现项目方已经删除了用于存储用户地址的数组,改为了rewardsPerShare变量,该变量表示单位抵押代币所对应的奖励代币;同时项目方也更改了奖励的计算方式(updatePool函数):由原来循环所有用户地址来按比例分配奖励改为更新rewardsPerShare变量来计算用户奖励代币。

对比两种奖励方式,后者已经不会产生前者因为重复计算奖励的问题,这种奖励方式类似于sushiswap的奖励计算方式,同时也避免了前者因为循环次数太多导致的gas销毁过大的问题。漏洞总结

Kingdefi这次的漏洞影响到的是用户的奖励代币数量,攻击者可不断抵押提取来提高自身奖励的分配数量,但是用户的抵押代币是不受任何影响,可以正确安全提取出来。从项目方的修复结果来看,其换了一种常规奖励计算方式,该方式符合抵押挖矿逻辑,用户可正常且正确提取抵押和奖励代币。在此提醒广大项目方,在上线Defi挖矿项目前一定要做好代码审计,不同的计算方式在吸引新用户的同时也会大大增加犯错的风险!i

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

金宝趣谈

[0:15ms0-3:456ms