flatted vulnerable to unbounded recursion DoS in parse() revive phase
High severity
GitHub Reviewed
Published
Mar 12, 2026
in
WebReflection/flatted
•
Updated Mar 13, 2026
Description
Published by the National Vulnerability Database
Mar 12, 2026
Published to the GitHub Advisory Database
Mar 13, 2026
Reviewed
Mar 13, 2026
Last updated
Mar 13, 2026
Summary
flatted's
parse()function uses a recursiverevive()phase to resolve circular references in deserialized JSON. When given a crafted payload with deeply nested or self-referential$indices, the recursion depth is unbounded, causing a stack overflow that crashes the Node.js process.Impact
Denial of Service (DoS). Any application that passes untrusted input to
flatted.parse()can be crashed by an unauthenticated attacker with a single request.flatted has ~87M weekly npm downloads and is used as the circular-JSON serialization layer in many caching and logging libraries.
Proof of Concept
Fix
The maintainer has already merged an iterative (non-recursive) implementation in PR #88, converting the recursive
revive()to a stack-based loop.Affected Versions
All versions prior to the PR #88 fix.
References