点击蓝字 关注我们
前言
Bitcoin Core在9月18日发布的最新的版本0.16.3和0.17.0rc4中修复了一个较为严重的安全漏洞CVE-2018-17144,其可导致拒绝服务与严重的通胀。该漏洞最初是9月17日作为拒绝服务漏洞被发现的,接着立即汇报给了Bitcoin Core的几个核心开发者以及ABC、Unlimited等相关支持加密货币项目。但很快安全人员发现该漏洞实际上是一个通胀漏洞,并将其修复!
漏洞分析
存在漏洞代码片段如下:
这段代码位于src/validation.cpp中的CheckBlock()函数,该函数在节点接收到新的区块时被调用
CheckTransaction()函数对于传入的交易消息(CTransaction& tx)进行检测,检查交易是否发生双花。检测方案非常简单,把交易中所涉及到的coin(即代码中的txin.prevout,代表比特币交易中的UTXO)记入std::set中,如果发现记录了俩次,就会返回处理失败的信息(state.DoS),最终消息会通过P2P信道,反馈给该区块的发送者。基于代码段中的备注部分,可以看出,这段检测代码在被CheckBlock()函数的调用过程中被认为是冗余和费时的,并通过将函数的第三个参数设置为False的方式,使其跳过。CheckBlock()执行选择跳过双花检查,是由于其后续会对于整个区块中的交易进行更为复杂而全面的检查。然而,这些检查代码未能像预期的那样对某些异常情况进行检测和处置,导致了漏洞的存在。
修复方案
把
if (!CheckTransaction(*tx, state, false))
改为
if (!CheckTransaction(*tx, state, true))
本文始发于微信公众号(IDLab):Pigeoncoin公链通胀漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论