CVE-2025-68273

CVE-2025-68273 is a medium-severity security vulnerability in signalk-server (npm), affecting versions < 2.19.0. It is fixed in 2.19.0.

Does this CVE actually affect you?

Kodem shows which CVEs are reachable and running in your applications, so you fix what's exploitable, not just what's listed.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Runtime intelligence, not another scanner.

Summary

Signal K Server Vulnerable to Unauthenticated Information Disclosure via Exposed Endpoints

[Note] This is a separate issue from the RCE vulnerability (State Pollution) currently being patched. While related to tokensecurity.js, it involves different endpoints and risks.

An unauthenticated information disclosure vulnerability allows any user to retrieve sensitive system information, including the full SignalK data schema, connected serial devices, and installed analyzer tools. This exposure facilitates reconnaissance for further attacks.

Details

The vulnerability stems from the fact that several sensitive API endpoints are not included in the authentication middleware's protection list in src/tokensecurity.js.

Vulnerable Code Analysis:

  1. Missing Protection: The tokensecurity.js file defines an array of paths that require authentication. However, the following paths defined in src/serverroutes.ts are missing from this list:

    • /skServer/serialports
    • /skServer/availablePaths
    • /skServer/hasAnalyzer
  2. Unrestricted Access: Because they are missing from the protection list, the http_authorize middleware allows access to these paths even when enableSecurity is set to true.

Exploit Scenario:

  1. Reconnaissance: An attacker scans the server for these endpoints.
  2. Data Extraction:
    • Querying /skServer/availablePaths returns the full JSON schema of the vessel's data (e.g., environment.sun.sunrise, navigation.position), allowing the attacker to know exactly what data points are available for targeting.
    • Querying /skServer/serialports reveals connected hardware (e.g., /dev/ttyUSB0), aiding in physical device targeting.

PoC

The following Python script demonstrates the vulnerability by querying the exposed endpoints without any authentication headers.

import urllib.request
import json

BASE_URL = "http://localhost:3000"

def check_endpoint(name, path):
    url = f"{BASE_URL}{path}"
    print(f"[*] Checking {name} at {url}...")
    try:
        req = urllib.request.Request(url)
        with urllib.request.urlopen(req) as response:
            if response.getcode() == 200:
                print(f"[!] VULNERABLE: {name} is accessible without authentication!")
                content = response.read().decode('utf-8')
                print(f"    Snippet: {content[:100]}...")
            else:
                print(f"[-] Secure: {response.getcode()}")
    except urllib.error.HTTPError as e:
        print(f"[-] Secure: {e.code}")
    except Exception as e:
        print(f"[-] Error: {e}")

if __name__ == "__main__":
    print("--- SignalK Information Disclosure PoC ---")
    check_endpoint("Serial Ports", "/skServer/serialports")
    check_endpoint("Available Paths", "/skServer/availablePaths")
    check_endpoint("Analyzer Check", "/skServer/hasAnalyzer")

Expected Result:
The script will output [!] VULNERABLE for all three endpoints, showing snippets of the leaked JSON data.

Impact

Verified Information Disclosure:
During our verification, we successfully retrieved the following sensitive information without any authentication:

  1. Full Data Schema: The /skServer/availablePaths endpoint returned the complete JSON schema of the vessel's data.
    • Example: environment.sun.sunrise, navigation.position
    • Leakage of Internal State: We also observed entries like notifications.security.accessRequest.readwrite.attacker-device-32, which revealed the presence and IDs of pending access requests (traces of our DoS attack), showing that internal server state is exposed.
  2. Hardware Configuration: The /skServer/serialports endpoint exposed the list of connected serial devices.
  3. System Capabilities: The /skServer/hasAnalyzer endpoint revealed whether traffic analysis tools were installed.

This information allows an attacker to map the system's internal state and capabilities, significantly facilitating further targeted attacks (Reconnaissance).

CVE-2025-68273 has a CVSS score of 5.3 (Medium). The vector is network-reachable, no privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (2.19.0); upgrading removes the vulnerable code path.

Affected versions

signalk-server (< 2.19.0)

Security releases

signalk-server → 2.19.0 (npm)

Kodem intelligence

Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.

Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.

Already deployed Kodem?

See it in your environmentNew to Kodem? Get a demo →

Remediation advice

Update src/tokensecurity.js
Add the missing paths to the list of protected routes in src/tokensecurity.js.

// src/tokensecurity.js

// ... existing protected paths ...
;[
  '/apps',
  '/appstore',
  '/plugins',
  '/restart',
  '/runDiscovery',
  '/security',
  '/vessel',
  '/providers',
  '/settings',
  '/webapps',
  '/skServer/inputTest',
  // ADD THESE LINES:
  '/skServer/serialports',
  '/skServer/availablePaths',
  '/skServer/hasAnalyzer'
].forEach((p) =>
  app.use(`${SERVERROUTESPREFIX}${p}`, http_authorize(false))
)

Frequently Asked Questions

  1. What is CVE-2025-68273? CVE-2025-68273 is a medium-severity security vulnerability in signalk-server (npm), affecting versions < 2.19.0. It is fixed in 2.19.0.
  2. How severe is CVE-2025-68273? CVE-2025-68273 has a CVSS score of 5.3 (Medium). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
  3. Which versions of signalk-server are affected by CVE-2025-68273? signalk-server (npm) versions < 2.19.0 is affected.
  4. Is there a fix for CVE-2025-68273? Yes. CVE-2025-68273 is fixed in 2.19.0. Upgrade to this version or later.
  5. Is CVE-2025-68273 exploitable, and should I be worried? Whether CVE-2025-68273 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
  6. What actually determines whether CVE-2025-68273 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
  7. How do I fix CVE-2025-68273? Upgrade signalk-server to 2.19.0 or later.

Other vulnerabilities in signalk-server

Stop the waste.
Protect your environment with Kodem.