VulnerabilityGLOBAL

CVE-2026-8723: ### Summary `qs.stringify` throws `TypeError` when called with `arrayFormat: 'comma'` and `encodeValuesOnly: true` on…

### Summary `qs.stringify` throws `TypeError` when called with `arrayFormat: 'comma'` and `encodeValuesOnly: true` on an array containing `null` or `undefined`. The throw is synchronous and not handled by any of qs's null-related options (`skipNulls`, `strictNullHandling`). ### Details In the comma + `encodeValuesOnly` branch, `lib/stringify.js:145` mapped the array through the raw encoder before joining: ```js obj = utils.maybeMap(obj, encoder); ``` `utils.encode` (`lib/utils.js:195`) reads `str.length` with no null guard, so a `null` or `undefined` element throws `TypeError`. `skipNulls` and `strictNullHandling` are both checked in the per-element loop below this line and never get a chance to run. Same class of bug as the filter-array path fixed in 0c180a4. The vulnerable shape of the comma + `encodeValuesOnly` branch was introduced in 4c4b23d ("encode comma values more consistently", PR #463, 2023-01-19), first released in v6.11.1. #### PoC ```js const qs = require('qs'); qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); qs.stringify({ a: [undefined, 'b'] }, { arrayFormat: 'comma', encodeValuesOnly: true }); qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesOnly: true }); // TypeError: Cannot read properties of null (reading 'length') // at encode (lib/utils.js:195:13) // at Object.maybeMap (lib/utils.js:322:37) // at stringify (lib/stringify.js

Published by source
2026-05-17
First seen by Reality Radar
2026-10-24
Last verified
2026-10-24

What the official notice says

Risk: CVSS 6.3

Is this affecting you?

Add what you own or use and Reality Radar will tell you when official changes match it — with evidence and next steps.

Track it free

Sources

Evidence ledger

Every piece of evidence we store is appended to a public hash chain, so later edits are detectable. Anyone can re-verify it.

EntryKindObservedEvidence hashEntry hash
#1501new2026-10-2400617ebe7f95…6719295d62ebcdb13b…a6af40

Chain head: #1565 7d9afd922511…68b9c7

Raw ledger entries (JSON) · Verify chain

Share this signal