@stablelib/cbor: Stack uitputting Denial of Service via diep geneste CBOR arrays, maps, of tags
Platform
nodejs
Component
@stablelib/cbor
Opgelost in
2.0.3
### Samenvatting `@stablelib/cbor` decodeert geneste CBOR structuren recursief en handhaaft geen maximale nestdiepte. Een voldoende diepe, door een aanvaller gecontroleerde CBOR payload kan daarom de decodering laten crashen met `RangeError: Maximum call stack size exceeded`. ### Details De decoder verwerkt arrays, maps en tagged values via recursieve aanroepen. Elke geneste container veroorzaakt een verdere afdaling in `_decodeValue()` totdat een bladwaarde is bereikt. Er is geen dieptelimiet, geen iteratieve fallback, en geen bescherming tegen pathologische nesting. Een aanvaller kan daarom een payload leveren bestaande uit duizenden geneste arrays, maps of tags en de decoder dwingen om te recurseren totdat de JavaScript call stack is uitgeput. ### PoC ```js import { decode } from "@stablelib/cbor"; const depth = 12000; const payload = new Uint8Array(depth + 1); // Bouw [[[...[null]...]]] payload.fill(0x81, 0, depth); // array(1) payload[depth] = 0xf6; // null decode(payload); // RangeError: Maximum call stack size exceeded ``` ### Impact Elke applicatie die door een aanvaller gecontroleerde CBOR decodeert, kan in een betrouwbare denial of service worden gedwongen met een enkele, op maat gemaakte payload. Het directe resultaat is een exception
Hoe te verhelpen
Geen officiële patch beschikbaar. Zoek naar tijdelijke oplossingen of monitor updates.
Bewaak uw afhankelijkheden automatisch
Ontvang meldingen wanneer nieuwe kwetsbaarheden uw projecten beïnvloeden.
Gratis beginnen