北京时间2020年11月20日,Telegram社群出现某些截图声称Keep3rLink接受了CertiK的审计服务。
在此,CertiK郑重声明:CertiK团队从未对"Keep3rLink"项目进行过任何审计。
同日,CertiK安全研究团队发现Keep3r项目存在中心化安全风险。
项目拥有者拥有过大权限,可将允许奖励的限制提高,从而可以向任意参与者发送任意数额的奖励且可向任意地址铸造任意数目代币。?
项目风险及相关细节
Keep3rV1:
●代码地址:
https://github.com/keep3r-network/keep3r.network/blob/master/contracts/Keep3r.sol
●?部署地址:
新兴市场教父:比特币或跌穿1万美元,加密货币繁荣与美联储疯狂印钞有关:金色财经报道,新兴市场教父Mark Mobius表示,比特币价格可能在2023年跌破1万美元,较当前价格再下跌40%以上。此前,他曾准确预测比特币跌破2万美元。他表示,比特币已经跌破1.8万美元、1.7万美元的技术支撑位,那么距离跌破1万美元已经不远了。
他对媒体表示,他沽空比特币的理由是利率上升和美联储收紧货币政策。随着利率上升,持有比特币或者其他加密货币的吸引力不再那么大,因为仅仅持有比特币是无法赚取利息的。
他说,当然,有很多公司为加密货币存款提供5%甚至更高的利息,但这些公司基本都破产了。因此,随着投资者遭遇损失,人们会更害怕为赚取利息而持有加密货币。加密货币的繁荣与美联储疯狂印钞有关。在过去几年,美元货币供应量增长了40%以上。他解释道,当美联储开始收回流动性时,人们在市场上的投资能力就会变得困难。[2022/12/4 21:21:50]
https://etherscan.io/address/0x1cEB5cB57C4D4E2b2433641b95Dd330A33185A44
CME比特币期货6月合约收报39710美元:金色财经报道,成交量最高的CME比特币期货2021年6月合约今日收涨2385美元,收报39710美元。2021年7月、8月及9月合约分别收报39810美元、39965美元和40145元。[2021/6/15 23:36:56]
Keep3rV1Helper:
●?代码地址:
https://github.com/keep3r-network/keep3r.network/blob/master/contracts/Keep3rV1Helper.sol
●?部署地址:
https://etherscan.io/address/0x93747c4260e64507a213b4016e1d435c9928617f
如下图图一所示,Keep3r项目的Keep3rV1智能合约中定义了两个角色:governance与pendingGovernance。
SEC专员:SEC应批准比特币ETF:金色财经报道,美国证券交易委员会(SEC)专员、“加密妈妈”Hester Peirce在D.C. Bar的虚拟炉边谈话中批评了该委员会长期以来对比特币ETF的抵制。Peirce认为,作为交易所交易基金(ETF)的基础投资,比特币并非唯一具有波动性。Peirce说道,许多其他产品都基于混乱的产品,但仍然可以在其上构建有序的产品。Peirce认为,比特币市场已经成熟,这个领域有很多资金和资深的参与者,并且已经做了很多工作来规范比特币的交易。市场已经足够成熟,可以在上面建立其他的东西。[2020/9/25]
1178行setGovernance()函数允许当前governance角色将pendingGovernance角色设定为任意给定地址_governance。
同时在1186行acceptGovernance()函数中,当前pendingGovernance可以将自己授权为governance角色。
因此从逻辑上governance角色与pendingGovernance角色可以循环授权,且没有任何event事件可以提醒投资者governance角色与pendingGovernance角色的变更。
此时,项目拥有者可以随意设置拥有两个角色的地址。
图一:governance、pendingGovernance角色以及KPRH设置函数setKeep3rHelper()
一旦拥有governance角色,拥有角色的地址可以利用图一中1169行setKeep3rHelper()函数对当前KPRH指向的Keep3rHelper智能合约进行修改。
修改之后图二中1076行KPRH.getQuoteLimit()的具体实现就也极有可能被修改,接下来会返回给调用该函数的Keep3rV1合约不同的返回值。
图二:对某个用户keeper进行奖励的函数workReceipt()
项目拥有者如果考虑发动攻击,由于拥有governance角色,因此可以首先调用图三中addKPRCredit()函数。
在916行对某一个job的地址给与任意数目的信用数目credit。
之后可以部署一个新的Keep3rHelper智能合约,然后在该智能合约中的将getQuoteLimit方法定义为返回uint类型变量的最大值。
然后项目拥有者可以使用ADDR_A的地址来调用图1中setKeep3rHelper()函数,将KPRH值指向给定的Keep3rHelper智能合约。
最终调用图二中workReceipt()函数,由于1076行代码由于KPRH.getQuoteLimit()函数被指定返回最大值的缘故必定通过。
在1077行中由于项目拥有者使用ADDR_A的地址来进行的调用,其在该智能合约中拥有的信用数目为CREDIT_A,因此amount的数目可以为略小于CREDIT_A的任意值。
当通过1077行之后,amount的奖励数目被给与keeper的地址。
最终该keeper可以调用合同内部的ERC20的转移函数,将获得的奖励转移到自己给定的地址中,完成攻击行为。
图三:对某个job增加信用数目credit的函数addKPRCredit()
除了上文讲述的中心化风险漏洞之外,图四中的mint()允许为governance角色的地址铸造任意数目的代币。
由于governance角色的地址可以通过图一中的setGovernance()函数以及acceptGovernance()进行设置。
也就代表着项目管理者只要拥有governanvce角色,即可以通过重设governance角色地址的方式,向任意地址铸造任意数目的代币。
图四:允许governance角色随意铸造代币的函数mint()
通过查询etherscan上Keep3rV1智能合约的数据,图五显示Keep3rV1拥有者地址为0x2d407ddb06311396fe14d4b49da5f0471447d45c。
同时,如图六显示,北京时间11月20日早11点governance角色的地址也为0x2d407ddb06311396fe14d4b49da5f0471447d45c。
可以得知项目拥有者拥有governance角色权限,因此有权限可以通过上述中心化漏洞进行攻击并获利。
图五:Keep3rV1智能合约拥有者等相关信息
图六:governance角色地址
总结
区块链作为时代颠覆性的核心技术,也已在各个领域得到了广泛的应用,隐藏在收益和利好之下的安全隐患也不应被忽视。
安全审计现在已经是高质量项目的标配。
若项目没有被审计,对于用户来说,投资行为则要格外慎重;对于项目方来说,则需要准备好相关资料并寻找专业并且声誉好的审计公司进行审计。
若项目被审计过,则需尽量了解审计公司背景以及其审计报告中的各项指标。
CertiK采用形式化验证工具来证明智能合约可靠性,公司内部审计专家将利用包括形式化验证在内的多种软件测试方法,结合一流的白帽黑客团队提供专业渗透测试,从而确保项目从前端到智能合约整体的安全性。
近期,有部分项目方假借CertiK的名义发布不实审计报告。
首先,CertiK很感谢项目方对我们的认可。但项目方应对项目的发展负责,一份完整且符合安全标准的安全审计报告不可或缺,如您有审计需求,欢迎搜索微信关注CertiK官方微信公众号,点击公众号底部对话框,留言免费获取咨询及报价!?
CertiK在此提示:任何与CertiK审计相关的消息,请仔细甄别。切勿轻信相关不实内容,并请以CertiK官方或权威媒体发布的消息为准。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。