Skip to content

← Public intelligence

npm package

immutable

Open actionable advisories and recorded vendor fixes. This public package view has no inventory attached and cannot establish whether your deployment is affected. A vendor fix never resolves your finding; verify your installed version and the source guidance.

Open advisories

3 actionable advisories, newest first. Withdrawn advisories and news are excluded. Coverage is partial.

  1. High, CVSS 8.7npmAmendedPublished

    Immutable: Hash-collision algorithmic complexity denial of service in Immutable.Map/Set

    CVE-2026-59880 · GHSA-xvcm-6775-5m9r

    Affected
    • npm immutable >= 5.0.0-beta.1, < 5.1.8; >= 4.0.0-beta.1, < 4.3.9; < 3.8.4
    Fixed in
    4.3.93.8.45.1.8· Vendor fix available
    Issue
    Immutable.Map and Immutable.Set keep keys that share the same 32-bit hash in a collision bucket that is scanned linearly. The string hash is public and deterministic, so an attacker who controls the keys inserted into a Map can craft many keys that all collide, degrading insertion and lookup from amortized O(1) to O(n) per operation — and O(n²) to build or read the whole set. A small, attacker-shaped payload can therefore consume disproportionate CPU and, on a single-threaded runtime such as Node.js, stall the event loop and deny service. Details The string hash uses the JVM-style polynomial hashed = (31 hashed + charCode) | 0. Strings such as "Aa" and "BB" hash to the same value (6531+97 == 6631+66 == 2112), and concatenating such blocks yields 2^n distinct strings sharing one hash (40 characters ⇒ 1,000,000 colliding keys). All such keys route to a single HashCollisionNode, whose get/update walk the entire bucket testing is(). There is no per-process salt, so the colliding…

    Recommended action: Upgrade to 5.1.8, 4.3.9 or 3.8.4 by release line, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  2. High, CVSS 8.7npmAmendedPublished

    Immutable.js List 32-bit trie overflow → unrecoverable DoS

    CVE-2026-59879 · GHSA-v56q-mh7h-f735

    Affected
    • npm immutable >= 5.0.0-beta.1, < 5.1.8; >= 4.0.0-rc.1, < 4.3.9; < 3.8.4
    Fixed in
    4.3.93.8.45.1.8· Vendor fix available
    Issue
    List#set, List#setSize, List#setIn, List#updateIn (and the functional set / setIn / updateIn) mishandle an index or size in the range 2 30, 2 31): - On an empty List the operation enters an uncatchable infinite loop (a tight CPU spin; a surrounding try/catch never regains control). Only killing the worker recovers it. - On a populated List (≥ 32 elements — i.e. any array of ≥ 32 items turned into a List by fromJS) the loop allocates without bound → heap exhaustion → the process aborts (SIGABRT, exit 134, or kernel OOM-kill 137). A real crash, not a recoverable error. The index may be a numeric string, so it can come straight from a request body, URL, or key-path. A single small unauthenticated request is enough. There is also a companion silent data-corruption issue in setSize: Impact Availability only. A reachable configuration is any endpoint that routes untrusted input into a List index or a setIn/updateIn key-path — which the extremely common state = fromJS(body);…

    Recommended action: Upgrade to 5.1.8, 4.3.9 or 3.8.4 by release line, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →
  3. High, CVSS 8.7npmAmendedPublished

    Immutable is vulnerable to Prototype Pollution

    CVE-2026-29063 · GHSA-wf6x-7x77-mvgw

    Affected
    • npm immutable >= 5.0.0, < 5.1.5; >= 4.0.0-rc.1, < 4.3.8; < 3.8.3
    Fixed in
    5.1.54.3.83.8.3· Vendor fix available
    Issue
    Impact What kind of vulnerability is it? Who is impacted? A Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. Affected APIs | API | Notes | | --------------------------------------- | ----------------------------------------------------------- | | mergeDeep(target, source) | Iterates source keys via ObjectSeq, assigns merged[key] | | mergeDeepWith(merger, target, source) | Same code path | | merge(target, source) | Shallow variant, same assignment logic | | Map.toJS() | object[k] = v in toObject() with no proto guard | | Map.toObject() | Same toObject() implementation | | Map.mergeDeep(source) | When source is converted to plain object | Patches Has the problem been patched? What versions should users upgrade to? | major version | patched version | | --- | --- | | 3.x | 3.8.3 | | 4.x | 4.3.7 | | 5.x | 5.1.5 | Workarounds Is there a way for users to fix or remediate the vulnerability without upgrading? -…

    Recommended action: Upgrade to 5.1.5, 4.3.8 or 3.8.3 by release line, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.

    Sources:osv.dev (1)github.com (2)Source checked Evidence →