前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pigeoncoin公链安全-双花攻击&拒绝服务

Pigeoncoin公链安全-双花攻击&拒绝服务

作者头像
字节脉搏实验室
发布2020-11-16 14:47:14
1K0
发布2020-11-16 14:47:14
举报

文章源自【字节脉搏社区】-字节脉搏实验室

作者-毕竟话少

存在漏洞代码片段如下:

在validation.cpp文件中没检查重复输入,可导致产生拒绝访问漏洞以及矿工可控制的双重支出漏洞。

具体可参考https://bitcoincore.org/en/2018/09/20/notice/

该漏洞是由于项目引用了bitcoin core存在漏洞的代码,导致也存在CVE-2018-17144漏洞,该漏洞的危害在上方链接中有详细说明。

细节

这段代码位于src/validation.cpp中的CheckBlock()函数,该函数在节点接收到新的区块时被调用

CheckTransaction()函数对于传入的交易消息(CTransaction& tx)进行检测,其中包括了检测一笔交易是否发生双花。检测方案非常简单,将这比交易中使用的所有Coin(即代码中的txin.prevout,代表比特币交易中的UTXO,本文后续均采用Coin一词进行表述,以便与代码持一致)记入std::set中,如果发现某项记录被重复记录了两次,就会返回处理失败的信息(state.DoS),这一消息最终会通过P2P通道,反馈给该区块的发送者。基于代码段中的备注部分,可以看出,这段检测代码在被CheckBlock()函数的调用过程中被认为是冗余和费时的,并通过将函数的第三个参数设置为False的方式,使其跳过。

CheckBlock()执行选择跳过双花检查,是由于其后续会对于整个区块中的交易进行更为复杂而全面的检查。然而,这些检查代码未能像预期的那样对某些异常情况进行检测和处置,导致了漏洞的存在。

Pigeoncoin也同样存在该漏洞(CVE-2018-17144),并已经被黑客攻击造成了实际危害。

https://bcsec.org/index/detail/tag/1/id/302

关于双花攻击和拒绝服务攻击的PoC在这里可以看:https://bcsec.org/index/detail/tag/2/id/379

修复方案:

if (!CheckTransaction(*tx, state, false))

改为

if (!CheckTransaction(*tx, state, true))

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档