signalk-server

Ecosystem: npm

Downloads: 29.95 K

Vulnerabilities from the last (months)
  • 4CriticalAffects 4 versions
  • 4HighAffects 4 versions
  • 0MediumAffects 0 versions
  • 7ModerateAffects 7 versions
  • 1LowAffects 1 version
Severity distribution (all time)
16vulnerabilities
  • Critical4 (25.0%)
  • High4 (25.0%)
  • Medium0 (0.0%)
  • Moderate7 (43.8%)
  • Low1 (6.3%)

Monthly breakdown

  • Critical
  • High
  • Medium
  • Moderate
  • Low
  • 2 vulnerabilities
    • Critical: 1
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 1 vulnerabilities
    • Critical: 0
    • High: 1
    • Medium: 0
    • Moderate: 0
    • Low: 0
  • 5 vulnerabilities
    • Critical: 1
    • High: 1
    • Medium: 0
    • Moderate: 2
    • Low: 1
  • 1 vulnerabilities
    • Critical: 0
    • High: 0
    • Medium: 0
    • Moderate: 1
    • Low: 0
  • 6 vulnerabilities
    • Critical: 2
    • High: 2
    • Medium: 0
    • Moderate: 2
    • Low: 0

Vulnerabilities (16)

Known vulnerabilities affecting signalk-server, based on data from OSV.

Vulnerabilities affecting signalk-server
IDSeveritySummaryAffected versionsPublishedSource
GHSA-4xm8-rg9h-jhq2CriticalSignal K resources API path traversal can disclose the JWT signing secret and enable remote code execution### Summary Path traversal in the Signal K resources and applicationData APIs lets an unauthenticated or low-privileged user read, write and delete files outside the storage root. Reading <config>/security.json discloses the JWT signing secret, enabling admin token forgery and remote code execution. ### Details ## Description The v2 REST resources API `GET /signalk/v2/api/resources/:resourceType/:resourceId` passes `resourceId` to `FileStore.getResource()` without validation. `getResource()` builds the file path with `path.join(this.resources[type].path, itemUuid)` followed by `readFile`
  • >= 2.0.0, < 2.34.0
GitHub (opens in a new tab)
GHSA-7wpf-ch8f-5f4xModeratesignalk-server has SSRF via absolute signalk.appIcon URL in the app store icon fetcher### Summary The app store icon code (`dist/appstore/icon-probe.js` around line 200 and `icon-bytes.js` around line 138) resolves a plugin's declared `signalk.appIcon`. Relative paths are pinned to the CDN, but an absolute http(s) URL is used as-is: the server fetches it, follows redirects, and stores any `image/*` response as the plugin's icon, which is then served to the admin UI. Unrelated to GHSA-q59x-jc9f-gfqf. ### Affected signalk-server 2.33.0 (latest). ### Reproduction The real dist modules driven directly, Docker with `--network none`; a local "internal" service on 127.0.0.1 logs
  • >= 2.28.0-beta.2, < 2.34.0
GitHub (opens in a new tab)
GHSA-q59x-jc9f-gfqfModerateSignal K Server: Server-Side Request Forgery via Remote Connection Endpoints### Summary signalk-server versions up to and including 2.27.0 contain a Server-Side Request Forgery (SSRF) vulnerability in three administrative endpoints used for remote Signal K server connection management. The `makeRemoteRequest()` function accepts attacker-controlled `host`, `port`, `useTLS`, and `selfsignedcert` parameters without any validation, allowing an attacker to force the server to make arbitrary HTTP/HTTPS requests to internal network resources, cloud metadata services, and other unintended destinations. When security is not configured (the default state), these endpoints requ
  • < 2.28.0
GitHub (opens in a new tab)
GHSA-vmfm-ch9h-5c7gHighSignal 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). ## D
  • < 2.25.0
GitHub (opens in a new tab)
GHSA-7gcj-phff-2884HighSignal 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
  • < 2.25.0
GitHub (opens in a new tab)
GHSA-cxj8-ggf2-p57cModerateSignal K Server: OAuth Authorization Code Theft via Unvalidated Host Header in OIDC Flow## Summary SignalK Server contains a code-level vulnerability in its OIDC login and logout handlers where the unvalidated HTTP Host header is used to construct the OAuth2 redirect_uri. Because the redirectUri configuration is silently unset by default, an **attacker spoof the Host header** to steal OAuth authorization codes and hijack user sessions in realistic deployments as The OIDC provider will then send the authorization code to whatever domain was injected. _The OIDC specification requires redirect_uri to be pre-registered and not derived from untrusted input. Constructing it from the
  • >= 2.20.0, < 2.24.0
GitHub (opens in a new tab)
GHSA-gfmv-vh34-h2x5ModerateSignal 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*
  • < 2.24.0-beta.1
GitHub (opens in a new tab)
GHSA-qh3j-mrg8-f234LowSignal 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
  • < 2.24.0
GitHub (opens in a new tab)
GHSA-x8hc-fqv3-7gwfCriticalSignal 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. Furthermor
  • < 2.24.0-beta.4
GitHub (opens in a new tab)
GHSA-vrhw-v2hw-jffxModerateSignalK Server has Path Traversal leading to information disclosure### Summary 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. ### Details **Platform**: Windows (Linux only allows traversal up a single directory) **Authentication Required**: Yes (ability to write depends on user's perm
  • < 2.20.3
GitHub (opens in a new tab)
  • GHSA-4xm8-rg9h-jhq2Critical
    Signal K resources API path traversal can disclose the JWT signing secret and enable remote code execution
    • >= 2.0.0, < 2.34.0

    ### Summary Path traversal in the Signal K resources and applicationData APIs lets an unauthenticated or low-privileged user read, write and delete files outside the storage root. Reading <config>/security.json discloses the JWT signing secret, enabling admin token forgery and remote code execution. ### Details ## Description The v2 REST resources API `GET /signalk/v2/api/resources/:resourceType/:resourceId` passes `resourceId` to `FileStore.getResource()` without validation. `getResource()` builds the file path with `path.join(this.resources[type].path, itemUuid)` followed by `readFile`

  • GHSA-7wpf-ch8f-5f4xModerate
    signalk-server has SSRF via absolute signalk.appIcon URL in the app store icon fetcher
    • >= 2.28.0-beta.2, < 2.34.0

    ### Summary The app store icon code (`dist/appstore/icon-probe.js` around line 200 and `icon-bytes.js` around line 138) resolves a plugin's declared `signalk.appIcon`. Relative paths are pinned to the CDN, but an absolute http(s) URL is used as-is: the server fetches it, follows redirects, and stores any `image/*` response as the plugin's icon, which is then served to the admin UI. Unrelated to GHSA-q59x-jc9f-gfqf. ### Affected signalk-server 2.33.0 (latest). ### Reproduction The real dist modules driven directly, Docker with `--network none`; a local "internal" service on 127.0.0.1 logs

    CVE: CVE-2026-115752

  • GHSA-q59x-jc9f-gfqfModerate
    Signal K Server: Server-Side Request Forgery via Remote Connection Endpoints
    • < 2.28.0

    ### Summary signalk-server versions up to and including 2.27.0 contain a Server-Side Request Forgery (SSRF) vulnerability in three administrative endpoints used for remote Signal K server connection management. The `makeRemoteRequest()` function accepts attacker-controlled `host`, `port`, `useTLS`, and `selfsignedcert` parameters without any validation, allowing an attacker to force the server to make arbitrary HTTP/HTTPS requests to internal network resources, cloud metadata services, and other unintended destinations. When security is not configured (the default state), these endpoints requ

    CVE: CVE-2026-55591

  • GHSA-vmfm-ch9h-5c7gHigh
    Signal K Server's WebSocket Login Endpoint Lacks Rate Limiting (Credential Brute-Force)
    • < 2.25.0

    ## 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). ## D

    CVE: CVE-2026-41893

  • GHSA-7gcj-phff-2884High
    Signal K Server has an Unauthenticated Regular Expression Denial of Service (ReDoS) via WebSocket Subscription Paths
    • < 2.25.0

    ## 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

    CVE: CVE-2026-39320

  • GHSA-cxj8-ggf2-p57cModerate
    Signal K Server: OAuth Authorization Code Theft via Unvalidated Host Header in OIDC Flow
    • >= 2.20.0, < 2.24.0

    ## Summary SignalK Server contains a code-level vulnerability in its OIDC login and logout handlers where the unvalidated HTTP Host header is used to construct the OAuth2 redirect_uri. Because the redirectUri configuration is silently unset by default, an **attacker spoof the Host header** to steal OAuth authorization codes and hijack user sessions in realistic deployments as The OIDC provider will then send the authorization code to whatever domain was injected. _The OIDC specification requires redirect_uri to be pre-registered and not derived from untrusted input. Constructing it from the

    CVE: CVE-2026-34083

  • GHSA-gfmv-vh34-h2x5Moderate
    Signal K Server: Unauthenticated Source Priorities Manipulation
    • < 2.24.0-beta.1

    ## 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*

    CVE: CVE-2026-33951

  • GHSA-qh3j-mrg8-f234Low
    Signal K Server: Arbitrary Prototype Read via `from` Field Bypass
    • < 2.24.0

    ## 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

    CVE: CVE-2026-35038

  • GHSA-x8hc-fqv3-7gwfCritical
    Signal K Server: Privilege Escalation by Admin Role Injection via /enableSecurity
    • < 2.24.0-beta.4

    ## 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. Furthermor

    CVE: CVE-2026-33950

  • GHSA-vrhw-v2hw-jffxModerate
    SignalK Server has Path Traversal leading to information disclosure
    • < 2.20.3

    ### Summary 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. ### Details **Platform**: Windows (Linux only allows traversal up a single directory) **Authentication Required**: Yes (ability to write depends on user's perm

    CVE: CVE-2026-25228

Showing 1-10 of 16 vulnerabilities