今晨,Cosmos团队表示在CosmosSDK发现严重安全漏洞。PeckShield安全人员分析发现,原本Cosmos抵押之后需要等待21天才能赎回,但合约代码里Validator状态变化时存在一种逻辑缺陷,使得用户可以减少21天固定赎回时间,从而提前赎回抵押的数字资产,进而破坏原本的POS共识可更短周期使用资金进行重复抵押赚取利息。
Cosmos是最新上线的基于Tendermint共识的区块链网络,提出IBC通迅协议,用于解决资产跨链的问题,其核心主链被称为CosmosHub,号称『万链之王』。其上的平台代币为Atom,用户通过验证者投票参与服务治理与维护,同时接收系统激励,史称『Staking模式』,为2019年区块链明星项目之一。
CosmosHub是基于Tendermint,它依靠一组验证者来保护网络,等同于Bitcoin、Ethereum等PoW网络中的矿工角色;
Web3解决方案Cosmic Wire获得3000万美元种子轮融资:金色财经报道,Web3和区块链解决方案Cosmic Wire在其种子轮融资中融资3000万美元,该融资由Solana基金会和Polygon领投。Cosmic Wire将利用这笔资金加速开发一个更加分散、透明和安全的数字Web3生态系统。[2023/7/19 11:04:59]
验证者运行一个完整的Cosmos节点,并通过广播包含由其私钥签署的加密投票参与共识,有一定的硬件投入成本;
验证者需要抵押定额的Atom作为保证金,且系统只有股权最高的100个节点会成为验证者;
验证者在区块链中打包交易提交新块并获得系统激励,这是验证者的收入,等同于挖矿收益;
另外,验证者在参与治理方面,他们还必须对网络中的提案进行投票,只有投票通过的提案才能发挥效应,投票权重根据每一位验证者存放的总权益进行加权;
基于Cosmos的Umee推出首个IBC价格预言机:金色财经报道,Umee是一个基于Cosmos的借款和借贷平台,该公司周四宣布,还有几周时间就会推出Cosmos的区块链间通信(IBC)协议的第一个价格预言机服务。称为Orion的价格预言机将由Umee区块链的验证器提供,该验证器运行的软件将自动从一组中心化交易所,加上Osmosis dex中提取定价数据。[2022/7/7 1:58:12]
安全稳定的验证者会产生稳定的收益,有问题的节点导致您损失本金,例如验证者节点掉线会损失0.01%本金。
由此可知,运行一个Validator角色的难度不低于开一个PoW矿池,普通用户要想加入Cosmos主网,并获取收益是个门槛比较高的事情。
由于普通用户持币但又不想参与验证,那么其手中的Atom会面临增发而贬值,但是直接参与Cosmos主网有一定的技术难度,因此出现了委托人Delegator角色。委托人是那些不能或不想自己运行验证节点的Atom持有者,普通用户可以将Atom委托给验证人并获得部分收入,例如星火矿池提供的委托服务。
Cosmos创始人新项目Gno Land将于5月20日进行空投快照:5月18日消息,Cosmos生态智能合约平台Gno Land将于北京时间5月20日23时进行空投快照。Cosmos创始人JaeKwon在社交媒体上发文表示,若希望获得GNOT空投,用户需在Cosmos69号提案投票中投出反对票或弃权票,且不能将ATOM存储在中心化交易平台钱包地址。此前报道,Cosmos创始人JaeKwon于2021年2月宣布从Cosmos网络母公司AIB(AllinBits)及The Interchain Foundation(ICF)离职,全职开发Gno智能合约语言。[2022/5/18 3:24:19]
用户一旦赎回委托订单,Cosmos将在赎回操作21天之后将委托抵押的Atom退回给委托人。
CosmoStation钱包支持OKT质押与节点投票:根据CosmoStation官方消息,作为OKExChain生态合作伙伴,CosmoStation已将OKExChain集成到钱包中,用户可创建和导入OKExChain主网钱包,除此以外,为了支持OKExChain节点发展,用户还可在CosmoStation钱包上进行OKT质押、提现和节点投票。
公开资料显示,Cosmostation是一家位于韩国首尔的企业级验证节点基础运营商和终端用户应用程序开发公司, Cosmostation 钱包是为使用Cosmos SDK构建的网络服务的非托管移动钱包。在OKExChain主网上线后,CosmoStation宣布与OKExChain正式达成生态合作伙伴关系。[2021/1/25 13:27:21]
因此这21天为平台固定的锁仓时间,如果出现一种情况,Cosmos系统存在设计缺陷,导致委托人的赎回周期可变,这对平台上的其它用户来说,是不公平的,也破坏了Cosmos区块链的共识机制。
在了解这个漏洞之前,我们先来看下Cosmos网络之上的验证者状态变化图:
其中,一共有三个状态:
bonded
unbonded
unbonding
状态之间的变化关系如下:
验证者默认属于unbonded状态,当发起bondValidator之后,状态变更为bonded,
变更这一状态之后,验证者开始接收系统收益;
而当验证者发起beginUnbondingValidator以退出bonded状态时,其状态变更为unbonding,
同时系统不再给这一验证者发送任何收益,同时这一验证者的委托人可以发起赎回操作;
若委托人没有发起赎回操作,那么处于unbonding状态的验证者可以重新bondValidator回到bonded状态以接收系统收益;
处于unbonding状态的验证者,当用户赎回时间21天到期之后,将进入到unbonded状态,此时委托者接收到之前抵押的Atom及抵押期间的收益。
上面我们了解到验证者在帮助抵押赎回方面的整体流程,表面上没有什么问题,PeckShield安全人员在分析CosmosSDK代码的时候,发现了这一赎回流程中的致命设计缺陷,可导致委托者利用验证者unbonding状态,突破21天锁仓固定期而提前赎回。
我们先看旧版的赎回代码:
其大体流程如下,获取验证者的unbonding完成时间和区块高度;
将待赎回部分代币根据锁仓到期时间和区块高度生成一个锁币赎回记录;
将这一赎回记录保存到队列之中,等待时间到期之后,退还锁币资金给委托人。
细心的用户发现了这里的问题,一图以盖之:
简而言之,系统在计算锁仓到期时间的时候,误用Validator开始unbond状态时间和Delegator赎回发起时间,使得Delegator可以使用这一时间差赠取差异:
Validator正常发起beginUnbondingValidator操作;
Delegator在Validator发起unbond操作之后7天时发起Undelgate赎回操作,理论上赎回时间为21天,但是这里计算的时候使用的是Validator发起unbond操作的时间,
因此,这一个Deletagor『免费』缩减了7天的赎回时间,再经过14天时间就可以收到锁仓的资金。
此时,我们再来看修复之后的代码:
此时,无论Delegator何时发起Undelgate操作,都会确保从操作发起时开始计算21天,而与验证者无关。
Staking作为2019年新潮的区块链方向,获取了一定的瞩目,无论你是Staking的项目方,还是参与Staking的验证者及普通用户,在资产面前,我们都应该保有敬畏之心。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。