panic: runtime error: nil pointer in msgbus.BlockInfo.header when recieving attack messages via func OnMessage()
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:
【问题描述】(请对问题进行描述,方便定位问题)
TBFT共识模式下,一个攻击节点发送msgbus.BlockInfo类型的消息时,且roundQC.Qc字段为nil的拜占庭攻击消息包时,其它所有的正常节点收到消息后立马panic崩溃。
【问题定位分析】
在consensus_tbft_impl.go,通过msgbus
的OnMessage入口传入恶意tmsgbus.BlockInfo消息包,其中blockInfo.Block.Header为nil,随后执行514行代码:blockInfo.Block.Header.BlockHeight时没有对关键字段做nil值判断却直接使用,导致invalid memory 访问。
【系统信息】(请填写系统信息,方便定位问题)
chainmaker-go version: v2.3.4 OS & version :Linux version 5.15.0-105-generic, 20.04.1-Ubuntu docker镜像 version:
Client: Docker Engine - Community Version: 27.0.3 API version: 1.46 Go version: go1.21.11
Server: Docker Engine - Community Engine: Version: 27.0.3 API version: 1.46 (minimum version 1.24) Go version: go1.21.11
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information