RSKJ服务器拒绝服务漏洞报告
漏洞摘要
攻击者通过发送特制的UDPv6数据包可导致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脚本攻击服务端
- 服务器将永久处理单个UDP数据包,拒绝其他节点请求,数分钟后应用崩溃
根本原因
bytesToLength
函数返回-5导致length变为0:
|
|
影响
- UDPv6端口5050停止处理入站流量
- 最终导致内存耗尽崩溃
- 由于
decode2
函数的广泛使用,可能影响其他服务入口点
修复方案
- 限制
bytesToLength
仅返回非负值 - 添加长度校验(建议):
|
|
修复提交
https://github.com/rsksmart/rskj/commit/6965fa60f743d911ee106b542cec80a1417266b1
漏洞奖励
$5,000