Every CVE Search/ Get API key

CVE-2026-107353

traverse: set() can write to built-in prototypes via an untrusted path

6.9 MediumFix available

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

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
None
Integrity
Low
Availability
Low

Exploit likelihood

0.28%Unchanged since Oct 8, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.9

traverse: set() can write to built-in prototypes via an untrusted path

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
CVE-2026-107353
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-1321
Updated
2026-11-02
EUVDEUVD-2026-94579 6.9

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
EUVD-2026-94579
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
Updated
2026-11-02
NVD 6.9

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
CVE-2026-107353
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/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
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
Weakness
CWE-1321
Updated
2026-11-02
OSV 6.9

traverse: set() can write to built-in prototypes via an untrusted path

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
CVE-2026-107353
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
Weakness
CWE-1321
Updated
2026-11-02
OSVDEBIAN-CVE-2026-107353 6.9

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
DEBIAN-CVE-2026-107353
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/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
Updated
2026-11-02
OSVUBUNTU-CVE-2026-107353 6.9

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
UBUNTU-CVE-2026-107353
CVSS 4.0
6.9 MediumCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:L/SC:N/SI:N/SA:N
CVSS 3.1
6.5 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:L
Updated
2026-11-02
Show 5 moreShow less
OSVAZL-107078 No score

CVE-2026-107353 affecting package js-jquery 3.5.0-4

traverse (npm) versions 0.3.6 through 0.3.9, 0.4.0 through 0.4.6, 0.5.0 through 0.5.2, and 0.6.0 through 0.6.11 allow prototype pollution through set(). When the path passed to set() crosses a primitive value, the next path segment is resolved on that primitive's built-in prototype, so an application that passes an untrusted path to set() lets an attacker add or overwrite properties of String.prototype, Number.prototype, or Boolean.prototype using plain JSON data, for example traverse({ name: 'bob' }).set(['name', 'proto', 'polluted'], 'yes'). Object.prototype was reachable only with a non-data path segment, such as an object whose toString returns a different value on each call, or through a Proxy that accepts an assignment without storing it. This is fixed in 0.3.10, 0.4.7, 0.5.3, and 0.6.12.

Record
AZL-107078
Updated
2026-11-05
OSVCLSA-2026-1792757149 No score

TuxCare security update for traverse (1 CVE)

TuxCare rebuilt traverse to address 1 CVE. Fixed in 0.5.2-tuxcare.1.

Record
CLSA-2026-1792757149
Updated
2026-11-02
OSVCLSA-2026-1792757262 No score

TuxCare security update for traverse (1 CVE)

TuxCare rebuilt traverse to address 1 CVE. Fixed in 0.6.8-tuxcare.1.

Record
CLSA-2026-1792757262
Updated
2026-11-02
OSVCLSA-2026-1792759996 No score

TuxCare security update for traverse (1 CVE)

TuxCare rebuilt traverse to address 1 CVE. Fixed in 0.3.9-tuxcare.1.

Record
CLSA-2026-1792759996
Updated
2026-11-02
OSVCLSA-2026-1792760030 No score

TuxCare security update for traverse (1 CVE)

TuxCare rebuilt traverse to address 1 CVE. Fixed in 0.6.11-tuxcare.1.

Record
CLSA-2026-1792760030
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
js-jquery
Azure Linux:3
through 3.5.0-4 None known
traverse
TuxCare:npm
0.5.2-tuxcare.0 up to 0.5.2-tuxcare.1, plus listed versions
0.5.2
0.5.2-tuxcare.1
traverse
TuxCare:npm
0.6.8-tuxcare.0 up to 0.6.8-tuxcare.1, plus listed versions
0.6.8
0.6.8-tuxcare.1
traverse
TuxCare:npm
0.3.9-tuxcare.0 up to 0.3.9-tuxcare.1, plus listed versions
0.3.9
0.3.9-tuxcare.1
traverse
TuxCare:npm
0.6.11-tuxcare.0 up to 0.6.11-tuxcare.1, plus listed versions
0.6.11
0.6.11-tuxcare.1
node-traverse
Debian:12
All versions, plus listed versions
0.6.7+~0.6.32-1
None known
node-traverse
Debian:13
All versions, plus listed versions
0.6.7+~0.6.32-1
None known
node-traverse
Debian:14
All versions, plus listed versions
0.6.7+~0.6.32-1
None known
node-traverse
Ubuntu:16.04:LTS
All versions, plus listed versions
0.6.1-1
None known
node-traverse
Ubuntu:18.04:LTS
All versions, plus listed versions
0.6.1-10.6.6-1
None known
Show 5 moreShow less
Affected packages
PackageAffectedFixed
node-traverse
Ubuntu:20.04:LTS
All versions, plus listed versions
0.6.6-1.10.6.6-2
None known
node-traverse
Ubuntu:22.04:LTS
All versions, plus listed versions
0.6.6-20.6.6+~0.6.32-1
None known
node-traverse
Ubuntu:24.04:LTS
All versions, plus listed versions
0.6.7+~0.6.32-1
None known
node-traverse
Ubuntu:26.10
All versions, plus listed versions
0.6.7+~0.6.32-1
None known
node-traverse
Ubuntu:26.04:LTS
All versions, plus listed versions
0.6.7+~0.6.32-1
None known

History

History
RecordedChangedSources
factsOSV
first indexedCVE List, EUVD, NVD, OSV

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

In short

CVE-2026-107353 is a medium vulnerability (CVSS 6.9) in Ljharb Traverse, published October 7, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.28%, the 20th percentile. Fixed in traverse 0.5.2-tuxcare.1.

References

Show 4 moreShow less
MoveEnter Open