Read the docs
TI-2026-69286 Aliases CVE-2026-107353

Prototype pollution in traverse set() modifies built-in prototypes

Priority LOW 36CWE-1321Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.0028 20th percentileScored 2026-11-07
Fix Fixed traverse (ljharb): 0.3.10, 0.4.7, 0.5.3 +1

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

VendorProductAffected versionsFixed inStatusSource
ljharbtraverse0.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.120.3.10, 0.4.7, 0.5.3, 0.6.12Patch availableCNA
  • 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

Red Hat

Red Hat's page for this CVE →

Not affected: 1 product
  • Red Hat

Timeline

  1. 2026-10-07 Threatist record created from CVE-2026-107353
  2. 2026-10-07 CISA SSVC decision points changed
  3. 2026-10-07 Priority changed: MEDIUM → LOW
  4. 2026-11-06 Affected versions changed · Red Hat
  5. 2026-11-06 CVSS score added · Red Hat

References

  • 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