CVE-2025-69203
JavaScript vulnerability analysis and mitigation

Overview

CVE-2025-69203 is an access request spoofing vulnerability in Signal K Server, a maritime hub application, classified as Authentication Bypass by Spoofing (CWE-290). It affects all versions prior to 2.19.0, including beta releases up to 2.19.0-beta.4. The vulnerability was published on January 1, 2026, and patched in v2.19.0 released the same day. The CNA (GitHub) assigned a CVSS v3.1 score of 6.3 (Medium), while NVD's independent assessment scored it 8.8 (High) (Github Advisory, SignalK Advisory).

Technical details

The vulnerability stems from two compounding weaknesses in src/tokensecurity.js and the admin UI (packages/server-admin-ui/src/views/security/AccessRequests.js). First, the access request handler unconditionally trusts the X-Forwarded-For HTTP header to determine client IP — const ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress — allowing any unauthenticated client to spoof an arbitrary IP address. Second, the admin UI prominently displays the attacker-controlled description field while the permissions field (which determines actual access level) is less visually prominent, enabling an attacker to request admin permissions while the description reads as readonly. When combined with a companion information disclosure vulnerability that allows unauthenticated enumeration of device/source names via /signalk/v1/api/sources, an attacker can impersonate a known legitimate device with a convincing description and a spoofed internal IP to trick an administrator into approving elevated access (Github Advisory, SignalK Advisory).

Impact

Successful exploitation requires an administrator to approve the spoofed access request, after which the attacker gains unauthorized administrative control over the Signal K Server and any connected maritime systems aboard the vessel. This results in full confidentiality, integrity, and availability compromise of the hub and its connected sensors, navigation systems, and other onboard infrastructure. The advisory notes that when combined with a token theft vulnerability, this attack provides a complete authentication bypass requiring only a single administrator click (SignalK Advisory).

Exploitability

A public proof-of-concept (PoC) exploit is included in the GitHub Security Advisory, demonstrating the full attack chain in Python using the requests library. There is no evidence of in-the-wild exploitation at this time. The EPSS score is approximately 0.021% (6th percentile), indicating a low near-term exploitation probability. The vulnerability is not listed in the CISA KEV catalog (Github Advisory).

Exploitation steps

  1. Enumerate devices: Send an unauthenticated GET request to /signalk/v1/api/sources on the target Signal K Server to retrieve a list of known device/source names.
  2. Select a target device name: Choose a legitimate device name from the enumerated list to use as the clientId in the spoofed request, increasing the appearance of legitimacy.
  3. Craft the spoofed access request: Construct a JSON payload with clientId set to the legitimate device name, description set to a misleading string (e.g., "<device_name> - Read Only"), and permissions set to "admin".
  4. Spoof the source IP: Add an X-Forwarded-For header set to a trusted internal IP address (e.g., 192.168.1.100) to make the request appear to originate from within the local network.
  5. Submit the request: POST the crafted payload to /signalk/v1/access/requests. A 202 Accepted response confirms the request is queued for administrator review.
  6. Wait for administrator approval: The admin UI displays the misleading description prominently and the spoofed internal IP, increasing the likelihood the administrator approves the request.
  7. Obtain admin token: Upon approval, retrieve the issued authentication token, granting full administrative access to the Signal K Server and connected maritime systems (SignalK Advisory).

Indicators of compromise

  • Network: Unexpected POST requests to /signalk/v1/access/requests from external IP addresses containing an X-Forwarded-For header set to an internal IP range (e.g., 192.168.x.x, 10.x.x.x); unauthenticated GET requests to /signalk/v1/api/sources from unfamiliar hosts.
  • Logs: Access request entries in server logs where the logged (forwarded) IP differs from the actual TCP connection source IP; access requests with permissions: admin but a description suggesting readonly or limited access.
  • Application State: Pending or recently approved access requests with clientId values matching known device names but originating from unexpected network locations; newly issued admin tokens for device identifiers that do not correspond to known physical devices.

Mitigation and workarounds

Upgrade Signal K Server to version 2.19.0 or later, which includes fixes for trusted proxy handling, prominent display of the requested permissions field in the admin UI, and restriction of access request events to authenticated admin users only (SignalK Release). As interim mitigations, configure the server to only trust X-Forwarded-For headers from known reverse proxy IP addresses using Express.js trust proxy settings, and restrict network access to the Signal K Server's admin interface to trusted internal hosts only. Administrators should be educated to carefully verify both the description and permissions fields of any access request and to confirm device legitimacy through out-of-band communication before approving elevated access (Github Advisory).

Community reactions

The vulnerability was reported by security researcher atsc11 and published by Signal K maintainer tkurki on January 1, 2026, with the patch released the same day. The release notes for v2.19.0 explicitly flag the release as containing important security fixes and recommend immediate updates for internet-facing servers (SignalK Release). No significant broader media coverage or notable community debate has been identified beyond the advisory and standard vulnerability database entries.

Additional resources


SourceThis report was generated using AI

Related JavaScript vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-77415CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-77414CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-77413CRITICAL9.3
  • JavaScript logoJavaScript
  • jsonata
NoYesAug 21, 2026
CVE-2026-63421HIGH7.5
  • JavaScript logoJavaScript
  • @keystone-6/core
NoYesAug 21, 2026
CVE-2026-53509MEDIUM5.7
  • JavaScript logoJavaScript
  • @aborruso/ckan-mcp-server
NoYesAug 21, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management