
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-23515 is a critical OS command injection vulnerability in the Signal K Server's set-system-time plugin (@signalk/set-system-time) that allows authenticated users with write permissions — or unauthenticated users if server security is disabled — to execute arbitrary shell commands on the host system. It affects all versions of the plugin prior to 1.5.0 and was published on January 31, 2026, with NVD publication on February 2, 2026. The GitHub Advisory Database rates this vulnerability at CVSS v3.1 9.9 (Critical) with a changed scope, while NVD scores it at 8.8 (High) (GitHub Advisory, SignalK Advisory).
The root cause is CWE-78 (Improper Neutralization of Special Elements used in an OS Command), specifically in index.js lines 60–71 of the set-system-time plugin. The navigation.datetime value received via WebSocket delta messages is directly interpolated into a shell command string — date --iso-8601 -u -s "${datetime}" — without any sanitization or format validation, and then executed via child_process.spawn('sh', ['-c', command]), which interprets shell metacharacters. If the server is configured with passwordless sudo for the date binary (as per official installation instructions), the injected command may execute with root privileges; otherwise, it runs with the privileges of the SignalK process user. A proof-of-concept Python script (poc.py) is publicly available that authenticates to the server and sends a crafted WebSocket delta message to create /tmp/signalk-RCE.txt as evidence of code execution (GitHub Advisory, SignalK Advisory).
Successful exploitation grants an attacker arbitrary command execution on the Signal K server host with the privileges of the SignalK process, or root-level access if passwordless sudo is misconfigured — enabling complete system compromise. All three security pillars are affected: confidentiality (access to all data on the host), integrity (ability to modify system files and configurations), and availability (ability to disrupt or destroy services). Because Signal K servers typically run as central hubs on marine vessels or IoT networks, compromise could extend to connected navigation systems and onboard infrastructure (GitHub Advisory, SignalK Advisory).
A public proof-of-concept exploit (poc.py) is available via the GitHub security advisory, requiring only valid read/write credentials and the set-system-time plugin to be enabled; no exploit is needed if server security is disabled entirely. The EPSS score from the GitHub Advisory Database is approximately 10.6% (93rd percentile), indicating elevated exploitation probability, though Feedly's data lists a lower EPSS of ~1.2%, reflecting differing scoring windows. There is no confirmed evidence of in-the-wild exploitation at this time, and the vulnerability is not currently listed in the CISA Known Exploited Vulnerabilities (KEV) catalog (GitHub Advisory, SignalK Advisory).
set-system-time plugin is installed and enabled.readwrite or admin permissions through phishing, credential stuffing, or default credential attempts. If server security is disabled, credentials are not required.navigation.datetime Signal K path with an injected shell payload, e.g.:{"updates": [{"values": [{"path": "navigation.datetime", "value": "2024-01-01T00:00:00Z\"; touch /tmp/signalk-RCE.txt; echo \""}]}]}set-system-time plugin processes the navigation.datetime value and interpolates it unsanitized into the shell command./tmp/signalk-RCE.txt to confirm execution; a real attacker could deploy a reverse shell or exfiltrate data.python3 poc.py --host <signalkserver_IP> -u <username> -p <password>(GitHub Advisory, SignalK Advisory); | & $( )) in the navigation.datetime field./tmp/signalk-RCE.txt or other artifacts in /tmp; new cron jobs, scripts, or binaries created by the SignalK process user or root; web shells placed in the Signal K installation directory.navigation.datetime values that do not conform to ISO-8601 format (e.g., containing semicolons, pipes, or backticks); Node.js child process spawn events for unexpected commands (e.g., bash, curl, wget, python) originating from the SignalK process./bin/sh -c, curl, nc, python3) visible via ps aux or process monitoring tools; unexpected sudo invocations by the SignalK service account.
(GitHub Advisory, SignalK Advisory)The primary remediation is to upgrade the @signalk/set-system-time npm package to version 1.5.0 or later, which adds ISO-8601 format validation before shell interpolation (regex: /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z?$/) and rejects malformed input (Patch Commit). If immediate patching is not possible, disable the set-system-time plugin in the Signal K server configuration, ensure server security (authentication) is enabled to prevent unauthenticated access, and restrict write permissions to trusted users only. Additionally, review and restrict passwordless sudo configuration to limit the blast radius if exploitation occurs (GitHub Advisory, SignalK Advisory).
The vulnerability was reported by security researcher cchheang and published by Signal K maintainer tkurki on January 31, 2026. Coverage appeared on The Hacker Wire, which published both a vulnerability summary and a dedicated technical write-up titled "Signal K Server RCE via WebSocket Command Injection." The vulnerability was also referenced in a CISA weekly vulnerability bulletin (SB26-040) and noted by the security community on Twitter/X and Bluesky. No major vendor statements beyond the official GitHub advisory have been identified (GitHub Advisory).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."