RSKJ服务器拒绝服务漏洞分析报告
漏洞概述
RSKJ服务器存在一个拒绝服务(DoS)漏洞,攻击者可通过发送特定构造的UDP数据包导致服务器停止处理网络流量,最终引发应用程序崩溃。
复现步骤
- 下载RSKJ发行版:https://github.com/rsksmart/rskj/releases/download/FINGERROOT-5.0.0/rskj-core-5.0.0-FINGERROOT-all.jar
- 服务器端运行命令:
|
|
- 服务器将开启UDPv6端口5050
- 客户端安装Python3及pysha3库,下载PoC脚本并修改HOST参数后向服务器发送攻击数据包
- UDPServer将永久处理单个UDP数据包,无法处理其他节点发送的数据包,数分钟后应用程序崩溃
根本原因分析
漏洞位于RLP.java文件的bytesToLength方法:
- 第432行:
bytesToLength返回-5,导致length变为0 - 第440行:此行为合法
- 第403-405行:position位置不可变
影响范围
- 服务器停止处理UDPv6端口5050的入站流量
- 最终因内存不足导致应用程序崩溃
- 由于易受攻击的
decode2函数被广泛使用,可能影响服务的其他入口点
修复方案
项目方已发布修复补丁:https://github.com/rsksmart/rskj/commit/6965fa60f743d911ee106b542cec80a1417266b1
安全研究人员建议:
- 限制
bytesToLength仅返回非负值 - 在循环前添加大小检查条件:
|
|
时间线
- 2023年8月10日:漏洞报告提交
- 2023年8月15日:漏洞确认并开始修复
- 2023年9月7日:修复补丁发布
- 2023年10月17日:向研究人员支付5000美元奖金
- 2025年6月13日:报告公开披露
技术细节
- 严重程度:高危(7-8.9分)
- 弱点类型:不受控制的资源消耗
- 赏金金额:5000美元
- CVE编号:无