Prototype pollution in traverse set() modifies built-in prototypes
Key facts
- Attack vector
- Network
- Privileges required
- None
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- None
- Impact type
- —
- Confidentiality · integrity · availability
- None · Low · Low
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA.
Summary
traverse on npm from 0.3.6 before 0.3.10, from 0.4.0 before 0.4.7, from 0.5.0 before 0.5.3, and from 0.6.0 before 0.6.12 allows prototype pollution through set(). When a path crosses a primitive value, set() resolves the next segment on that primitive's built-in prototype (CWE-1321). 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.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
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.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- Yes
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| ljharb | traverse | 0.3.6 to before 0.3.10; 0.4.0 to before 0.4.7; 0.5.0 to before 0.5.3; 0.6.0 to before 0.6.12 | 0.3.10, 0.4.7, 0.5.3, 0.6.12 | Patch available | CNA |
- traverse Vendorljharb Affected 0.3.6 to before 0.3.10; 0.4.0 to before 0.4.7; 0.5.0 to before 0.5.3; 0.6.0 to before 0.6.12 Fixed in 0.3.10, 0.4.7, 0.5.3, 0.6.12 Patch available CNA
Remediation
Upgrade traverse to version 0.3.10, 0.4.7, 0.5.3, or 0.6.12, depending on the release line in use.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
- Fix · CNA traverse (ljharb) Fixed in 0.3.10, 0.4.7, 0.5.3, 0.6.12
Vendor assessments
Timeline
- 2026-10-07 Threatist record created from CVE-2026-107353
- 2026-10-07 CISA SSVC decision points changed
- 2026-10-07 Priority changed: MEDIUM → LOW
- 2026-11-06 Affected versions changed · Red Hat
- 2026-11-06 CVSS score added · Red Hat
References
More ljharb vulnerabilities
- TI-2026-74516 qs stringify throws TypeError on uncoercible array elements in comma format CVSS 4.0MEDIUM 6.3
- TI-2026-56824 qs.stringify throws TypeError on objects with a non-callable constructor.isBuffer property CVSS 4.0MEDIUM 6.3
- TI-2026-07665 qs.stringify crashes on null/undefined entries in comma-format arrays under encodeValuesOnly CVSS 4.0MEDIUM 6.3
- TI-2026-56916 Resource allocation without limits in ljharb qs CVSS 4.0MEDIUM 6.3
- TI-2026-81027 Unencoded keys in qs.stringify allow query parameter injection CVSS 4.0MEDIUM 6.3
Sources
- CVE-2026-107353 · CVE Program
- CVE-2026-107353 · NVD
- FIRST EPSS
- CVE-2026-107353 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences