RSKJ服务器拒绝服务漏洞分析与修复

本文详细分析了Rootstock Labs RSKJ服务器存在的拒绝服务漏洞,包括漏洞复现步骤、根本原因分析以及修复方案。攻击者通过发送特定UDP数据包可导致服务器停止处理网络流量并最终崩溃,项目方已发布修复补丁并奖励安全研究人员5000美元。

RSKJ服务器拒绝服务漏洞分析报告

漏洞概述

RSKJ服务器存在一个拒绝服务(DoS)漏洞,攻击者可通过发送特定构造的UDP数据包导致服务器停止处理网络流量,最终引发应用程序崩溃。

复现步骤

  1. 下载RSKJ发行版:https://github.com/rsksmart/rskj/releases/download/FINGERROOT-5.0.0/rskj-core-5.0.0-FINGERROOT-all.jar
  2. 服务器端运行命令:
1
java -classpath rskj-core-5.0.0-FINGERROOT-all.jar -Drpc.providers.web.cors=* -Drpc.providers.web.ws.enabled=true co.rsk.Start
  1. 服务器将开启UDPv6端口5050
  2. 客户端安装Python3及pysha3库,下载PoC脚本并修改HOST参数后向服务器发送攻击数据包
  3. UDPServer将永久处理单个UDP数据包,无法处理其他节点发送的数据包,数分钟后应用程序崩溃

根本原因分析

漏洞位于RLP.java文件的bytesToLength方法:

  • 第432行:bytesToLength返回-5,导致length变为0
  • 第440行:此行为合法
  • 第403-405行:position位置不可变

影响范围

  • 服务器停止处理UDPv6端口5050的入站流量
  • 最终因内存不足导致应用程序崩溃
  • 由于易受攻击的decode2函数被广泛使用,可能影响服务的其他入口点

修复方案

项目方已发布修复补丁:https://github.com/rsksmart/rskj/commit/6965fa60f743d911ee106b542cec80a1417266b1

安全研究人员建议:

  1. 限制bytesToLength仅返回非负值
  2. 在循环前添加大小检查条件:
1
2
if( size > Integer.BYTES )
    throw new Exception(...);

时间线

  • 2023年8月10日:漏洞报告提交
  • 2023年8月15日:漏洞确认并开始修复
  • 2023年9月7日:修复补丁发布
  • 2023年10月17日:向研究人员支付5000美元奖金
  • 2025年6月13日:报告公开披露

技术细节

  • 严重程度:高危(7-8.9分)
  • 弱点类型:不受控制的资源消耗
  • 赏金金额:5000美元
  • CVE编号:无
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计