Cosmos的解绑定漏洞分析

今天早上,Cosmos发布v0.34.6补丁,紧急修复了可能导致严重后果的漏洞。现在来分析一下问题所在和可能导致的后果。

导致漏洞的原因

和其他DPOS共识的链一样,Cosmos中参与共识出块的节点有限,只有股权排名前100的验证人节点才是有效验证人。持币用户可以将atom(CosmosHub主网代币)委托给验证人节点,称作委托人。验证人或委托人都可以将委托的币取回,不过这需要一个21天的周期,也就是说我的抵押股权变为可流通代币需要经过一定的锁定期。DPOS区块链通常都会这样设计,这是为了维系网络的稳定性,避免抵押代币在外部市场价格剧烈波动时,网络的总抵押量也随之短期内大幅波动,毕竟DPOS区块链的价值是需要用作共识依据的抵押代币来背书的。但由于Cosmos的三处看似合理的设计,组合在一块却产生了严重的漏洞。

1. 不一致的解绑锁定期

Cosmos中,一个验证人如果因为掉线,双签或者取回过多的自抵押代币(数量低于设定的min_self_bond),便会从活跃的Bonded状态,经过一段时间的UnBonding状态,最后变为UnBonded状态。非Bonded状态的验证人,无论抵押池还有多少token,都不再参与共识。当委托人从一个验证人解绑委托的token时,会进行判断:

  1. 如果验证人此时是Bonded状态,解绑需要经历21天的时间。
  2. 如果验证人处于UnBonding状态,委托人从该验证人解绑定需要的锁定期等于该验证人的锁定期(小于或等于21天)。
  3. 如果验证人处于UnBonded状态,则不需要锁定期,委托人抵押的股权可立即变回代币。
    这样设计的本意的是,当验证人节点因作恶或意外被Jail(关小黑屋)后,委托人可以尽快取回抵押的股权,避免造成损失。

2. 立即生效的转委托

委托人在将代币抵押给一个验证人后,如果想要抵押给另一个验证人,可使用转委托功能,不必先从源验证人上解绑,然后再委托给目标验证人。这样的设定是为了方便委托人可随时在不同验证人之间做选择,如发现某个验证人佣金更低,或是当前验证人频繁掉线,可以尽快转移股权,避免损失。

3. 转委托不限制目标验证人状态

转委托操作不限制目标验证人节点的状态,也就是说,你不光可以转委托给一个Bonded状态的验证人,也能转委托给UnBonding和UnBonded状态的委托人。这样的设计是让验证人节点在出现异常时,还能接受到委托人的抵押。

如何利用漏洞

一个将股权委托给Bonded状态的委托人,可以找到Cosmos网络中的状态为UnBonded的验证人(这样的节点并不少),将股权转委托给它,然后再解绑,即可立即完成解绑。操作很简单,只用多耗费一点手续费便能让21天的锁定期形同虚设。

漏洞造成的影响

利用该漏洞本身不会造成资金的数量,但该漏洞的存在会让网络变得不稳定,更容易被攻击,最极端的情况的是共识失败,不再出块。Cosmos使用的BFT共识算法,最多能容忍三分之一的股权作恶。Cosmos期望atom总量的67%长期处于抵押状态,假设现在atom总量是1000,全网抵押的atom一共是670,作恶节点只拥有67,只占到10%,是不可能导致共识失败的。然后,作恶节点在交易所引起剧烈的价格波动,因为该漏洞的存在,委托人可以立刻解绑atom,转移至交易所交易。只要全网抵押的atom降到201以下,作恶节点的67个便超过了三分之一,最坏的可能便是宕机,由于Tendermint的最终一致性设计,只要作恶节点不上线,网络将不再出块,且目前没有很好的修复方法。先不论攻击者会不会有这样的企图(攻击成本和攻击收益),没有解绑锁定期,外部市场的价格波动必然会引起短期网络的稳定性,所以任何情况下都要确保解绑锁定期的有效。

漏洞修复

漏洞修复很简单,解绑时不再判断验证人节点的状态,无论怎样都要经过21天的解绑锁定期。

Cosmos热升级过程

Comos在漏洞造成严重影响前立即发布了修复后新版本,迅速联系各个验证人更新,上午大多数节点已经切换至新版本,出块也正常。由于Tendemrint的最终一致性,Cosmos Hub的新老版本在不兼容(某一个块高度后,新老版本的状态机数据不同)的情况下,部分验证人节点已经切换至新版本,部分仍使用老版本。如果热升级没有沟通好,在出现导致状态不一致的交易后,如果抵押股权中的三分之二的验证人已经升级到新版本,则共识以新版本的块为准,运行老版本的节点则会因为共识不一致停止出块。但如果三分之二的验证人仍使用老版本,共识以老版本为准,反而是新版本的节点停止共识。还有种情况则是两边都未达到三分之二,则都停止共识。这样热升级时,必须要协调大多数节点到位。

Polkadot因为有runtime机制的存在,将更新的代码写入区块,节点同步后实时更新运行逻辑,这样优雅的热更新机制,避免了共识失败的情况,节约了升级过程中协调验证人节点产生的成本。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345