CVE-2026-107353
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.
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
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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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 Medium
CVSS: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
| Package | Affected | Fixed |
|---|---|---|
js-jqueryAzure Linux:3 |
through 3.5.0-4 | None known |
traverseTuxCare:npm |
0.5.2-tuxcare.0 up to 0.5.2-tuxcare.1, plus listed versions 0.5.2 |
0.5.2-tuxcare.1 |
traverseTuxCare:npm |
0.6.8-tuxcare.0 up to 0.6.8-tuxcare.1, plus listed versions 0.6.8 |
0.6.8-tuxcare.1 |
traverseTuxCare:npm |
0.3.9-tuxcare.0 up to 0.3.9-tuxcare.1, plus listed versions 0.3.9 |
0.3.9-tuxcare.1 |
traverseTuxCare: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-traverseDebian:12 |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
node-traverseDebian:13 |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
node-traverseDebian:14 |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
node-traverseUbuntu:16.04:LTS |
All versions, plus listed versions 0.6.1-1 |
None known |
node-traverseUbuntu:18.04:LTS |
All versions, plus listed versions 0.6.1-10.6.6-1 |
None known |
Show 5 moreShow less
| Package | Affected | Fixed |
|---|---|---|
node-traverseUbuntu:20.04:LTS |
All versions, plus listed versions 0.6.6-1.10.6.6-2 |
None known |
node-traverseUbuntu:22.04:LTS |
All versions, plus listed versions 0.6.6-20.6.6+~0.6.32-1 |
None known |
node-traverseUbuntu:24.04:LTS |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
node-traverseUbuntu:26.10 |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
node-traverseUbuntu:26.04:LTS |
All versions, plus listed versions 0.6.7+~0.6.32-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| facts | OSV | |
| first indexed | CVE 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
github.com/ljharb/js-traverse/security/advisories/GHSA-rj28-8w7x-jmqc
github.com/ljharb/js-traverse/commit/81ccab43e379cf42eb2a5f689630f7f79b3d71b8
github.com/ljharb/js-traverse/commit/37a9ebd103d2a259c824c29cdcc3f0dfe1acffce
nvd.nist.gov/vuln/detail/CVE-2026-107353
npmjs.com
github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107353.json