CVE-2026-8723
qs.stringify crashes on null/undefined entries in comma-format arrays under encodeValuesOnly
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
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
- None
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
6.3
qs.stringify crashes on null/undefined entries in comma-format arrays under encodeValuesOnly
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
CVE-2026-8723- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-476
- Updated
- 2026-11-02
EUVDEUVD-2026-30674
6.3
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
EUVD-2026-30674- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-q8mj-m7cp-5q26
6.3
qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/undefined entries in comma-format arrays when encodeValuesOnly is set
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <=6.15.1
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
GHSA-q8mj-m7cp-5q26- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-476
- Updated
- 2026-11-02
NVD
6.3
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
CVE-2026-8723- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/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
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-476
- Updated
- 2026-11-02
OSV
6.3
qs.stringify crashes on null/undefined entries in comma-format arrays under encodeValuesOnly
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
CVE-2026-8723- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - Weakness
- CWE-476
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-8723
6.3
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:145:25) #### Fix lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2: diff - obj = utils.maybeMap(obj, encoder); + obj = utils.maybeMap(obj, function (v) { + return v == null ? v : encoder(v); + }); null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop. ### Affected versions >=6.11.1 <6.15.2 — fixed in v6.15.2. The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions. ### Impact Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled. The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
DEBIAN-CVE-2026-8723- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/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
Show 13 moreShow less
OSVGHSA-q8mj-m7cp-5q26
6.3
qs has a remotely triggerable DoS: qs.stringify crashes with TypeError on null/undefined entries in comma-format arrays when encodeValuesOnly is set
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <=6.15.1
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
GHSA-q8mj-m7cp-5q26- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Weakness
- CWE-476
- Updated
- 2026-11-02
OSVRHSA-2026:17682
7.5
Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update
- Record
RHSA-2026:17682- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVRHSA-2026:33521
5.3
Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update
- Record
RHSA-2026:33521- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVRHSA-2026:38091
7.3
Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update
- Record
RHSA-2026:38091- CVSS 3.1
- 7.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVRHSA-2026:9455
7.7
Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update
- Record
RHSA-2026:9455- CVSS 3.0
- 7.7 High
CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N - Updated
- 2026-11-02
OSVROOT-APP-NPM-CVE-2026-8723
5.3
CVE-2026-8723 in @rootio/qs - Patched by Root
Root has patched CVE-2026-8723 in the @rootio/qs package for Root:npm. Multiple fixed versions available.
- Record
ROOT-APP-NPM-CVE-2026-8723- CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-8723
6.3
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:145:25) #### Fix lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2: diff - obj = utils.maybeMap(obj, encoder); + obj = utils.maybeMap(obj, function (v) { + return v == null ? v : encoder(v); + }); null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop. ### Affected versions >=6.11.1 <6.15.2 — fixed in v6.15.2. The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions. ### Impact Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled. The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
UBUNTU-CVE-2026-8723- CVSS 4.0
- 6.3 Medium
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N - CVSS 3.1
- 5.3 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L - Updated
- 2026-11-02
OSVAZL-87105 No score
CVE-2026-8723 affecting package js-jquery 3.5.0-4
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
AZL-87105- Updated
- 2026-11-05
OSVAZL-87108 No score
CVE-2026-8723 affecting package nodejs-nodemon 2.0.3-5
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:
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
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:145:25)
Fix
lib/stringify.js:145, applied in 21f80b3 on main and released as v6.15.2:
- obj = utils.maybeMap(obj, encoder);
+ obj = utils.maybeMap(obj, function (v) {
+ return v == null ? v : encoder(v);
+ });
null and undefined now pass through maybeMap unchanged and reach the join(',') step as-is. For { a: [null, 'b'] } this produces a=,b, matching the non-encodeValuesOnly comma path (which already joins before encoding and produces a=%2Cb for the same input). Single-element [null] arrays still collapse via the existing obj.join(',') || null and remain subject to skipNulls / strictNullHandling in the main loop.
Affected versions
>=6.11.1 <6.15.2 — fixed in v6.15.2.
The vulnerable code shape was introduced in 4c4b23d and first shipped in v6.11.1. Earlier versions — including all of 6.7.x, 6.8.x, 6.9.x, 6.10.x, and 6.11.0 — implemented the comma + encodeValuesOnly path differently (joining before encoding) and are not affected. Empirically verified across released versions.
Impact
Application code that calls qs.stringify with both arrayFormat: 'comma' and encodeValuesOnly: true (both non-default) on input that may contain a null or undefined array element will throw synchronously instead of producing a query string. In a typical Node.js HTTP framework (Express, Fastify, Koa, hapi) the sync throw is caught by the framework's error boundary and the affected request returns a 500; the worker process does not exit and subsequent requests are unaffected. The "kills the worker process" framing applies only to call sites outside a request-handler error boundary (background jobs, startup paths, stream pipelines) or to deployments with framework error handling explicitly disabled.
The vulnerable input is a null or undefined entry inside an array; this is reachable from JSON request bodies or from application code constructing arrays from user input, but not from standard HTML form submissions (which produce strings or omitted fields, not literal null).
- Record
AZL-87108- Updated
- 2026-11-05
OSVCLSA-2026-1788262760 No score
TuxCare security update for qs (1 CVE)
TuxCare rebuilt qs to address 1 CVE. Fixed in 6.14.0-tuxcare.3.
- Record
CLSA-2026-1788262760- Updated
- 2026-11-02
OSVCLSA-2026-1790522895 No score
TuxCare security update for qs (1 CVE)
TuxCare rebuilt qs to address 1 CVE. Fixed in 6.13.0-tuxcare.2.
- Record
CLSA-2026-1790522895- Updated
- 2026-11-02
OSVCLSA-2026-1792164286 No score
TuxCare security update for qs (3 CVEs)
TuxCare rebuilt qs to address 3 CVEs. Fixed in 6.11.2-tuxcare.1.
- Record
CLSA-2026-1792164286- Updated
- 2026-11-02
OSVCLSA-2026-1792449761 No score
TuxCare security update for qs (3 CVEs)
TuxCare rebuilt qs to address 3 CVEs. Fixed in 6.14.2-tuxcare.1.
- Record
CLSA-2026-1792449761- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
qsnpm |
6.11.1 to 6.15.1 | 6.15.2 |
js-jqueryAzure Linux:3 |
through 3.5.0-4 | None known |
nodejs-nodemonAzure Linux:3 |
through 2.0.3-5 | None known |
qsTuxCare:npm |
6.14.0-tuxcare.0 up to 6.14.0-tuxcare.3, plus listed versions 6.14.06.14.0-tuxcare.16.14.0-tuxcare.2 |
6.14.0-tuxcare.3 |
qsTuxCare:npm |
6.13.0-tuxcare.0 up to 6.13.0-tuxcare.2, plus listed versions 6.13.06.13.0-tuxcare.1 |
6.13.0-tuxcare.2 |
qsTuxCare:npm From an advisory covering 3 CVEs |
6.11.2-tuxcare.0 up to 6.11.2-tuxcare.1, plus listed versions 6.11.2 |
6.11.2-tuxcare.1 |
qsTuxCare:npm From an advisory covering 3 CVEs |
6.14.2-tuxcare.0 up to 6.14.2-tuxcare.1, plus listed versions 6.14.2 |
6.14.2-tuxcare.1 |
node-qsDebian:12 |
All versions, plus listed versions 6.11.0+ds+~6.9.7-36.11.0+ds+~6.9.7-46.13.0+ds+~6.9.16-16.14.1+ds+~6.14.0-16.15.0+ds+~6.15.0-1 Show 4 moreShow less6.15.0+ds+~6.15.0-26.15.0+ds+~6.15.0-36.15.2+ds+~6.15.1-16.16.0+ds+~6.15.1-1 |
None known |
node-qsDebian:13 |
All versions, plus listed versions 6.13.0+ds+~6.9.16-16.14.1+ds+~6.14.0-16.15.0+ds+~6.15.0-16.15.0+ds+~6.15.0-26.15.0+ds+~6.15.0-36.15.2+ds+~6.15.1-16.16.0+ds+~6.15.1-1 |
None known |
node-qsDebian:14 |
before 6.15.2+ds+~6.15.1-1, plus listed versions 6.13.0+ds+~6.9.16-16.14.1+ds+~6.14.0-16.15.0+ds+~6.15.0-16.15.0+ds+~6.15.0-26.15.0+ds+~6.15.0-3 |
6.15.2+ds+~6.15.1-1 |
Show 49 moreShow less
| Package | Affected | Fixed |
|---|---|---|
qsnpm |
6.11.1 up to 6.15.2 | 6.15.2 |
dotnet8.0Red Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:8.0.127-1.hum1 | 0:8.0.127-1.hum1 |
python3.14Red Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-debugRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-develRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreadingRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-debugRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-develRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-idleRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-libsRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-testRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-freethreading-tkinterRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-idleRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-libsRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-testRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14-tkinterRed Hat:hummingbird:1 |
before 0:3.14.6-1.1.hum1 | 0:3.14.6-1.1.hum1 |
python3.14Red Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-debugRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-develRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreadingRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-debugRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-develRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-idleRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-libsRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-testRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-freethreading-tkinterRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-idleRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-libsRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-testRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
python3.14-tkinterRed Hat:hummingbird:1 From an advisory covering 3 CVEs |
before 0:3.14.6-1.4.hum1 | 0:3.14.6-1.4.hum1 |
nodejs20Red Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-binRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-develRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-docsRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-full-i18nRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-libsRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
nodejs20-npmRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:10.8.2-1.20.20.2.1.hum1 | 0:10.8.2-1.20.20.2.1.hum1 |
nodejs20-npm-binRed Hat:hummingbird:1 From an advisory covering 14 CVEs |
before 0:20.20.2-1.hum1 | 0:20.20.2-1.hum1 |
@rootio/qsRoot:npm |
before 6.15.1-root.io.1 | 6.15.1-root.io.16.13.0-root.io.17816822226.14.2-root.io.16.14.1-root.io.36.15.0-root.io.36.14.0-root.io.4 |
qsRoot:npm |
before 6.15.1-aikido.1 | 6.15.1-aikido.16.13.0-aikido.17816822226.14.2-aikido.16.14.1-aikido.36.15.0-aikido.36.14.0-aikido.4 |
node-qsUbuntu:Pro:14.04:LTS |
All versions, plus listed versions 0.4.2-10.6.5-10.6.5-1ubuntu0.1~esm1 |
None known |
node-qsUbuntu:16.04:LTS |
All versions, plus listed versions 2.2.4-1 |
None known |
node-qsUbuntu:18.04:LTS |
All versions, plus listed versions 2.2.4-12.2.4-1ubuntu1 |
None known |
node-qsUbuntu:Pro:20.04:LTS |
All versions, plus listed versions 6.5.2-16.9.0+ds-16.9.1+ds-16.9.1+ds-1ubuntu0.1~esm1 |
None known |
node-qsUbuntu:22.04:LTS |
All versions, plus listed versions 6.9.4+ds-16.10.1+ds-16.10.2+ds+~6.9.7-16.10.3+ds+~6.9.7-1 |
None known |
node-qsUbuntu:24.04:LTS |
All versions, plus listed versions 6.11.0+ds+~6.9.7-36.11.0+ds+~6.9.7-4 |
None known |
node-qsUbuntu:25.10 |
All versions, plus listed versions 6.13.0+ds+~6.9.16-1 |
None known |
node-qsUbuntu:26.10 |
All versions, plus listed versions 6.14.1+ds+~6.14.0-16.15.2+ds+~6.15.1-1 |
None known |
node-qsUbuntu:26.04:LTS |
All versions, plus listed versions 6.13.0+ds+~6.9.16-16.14.1+ds+~6.14.0-1 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected | ||
| facts | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-8723 is a medium vulnerability (CVSS 6.3) in Ljharb Qs, published May 4, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.40%, the 34th percentile. Fixed in qs 6.15.2.
References
github.com/ljharb/qs/security/advisories/GHSA-q8mj-m7cp-5q26
github.com/ljharb/qs/commit/21f80b33e5c8b3f7eba1034fff0da4a4a37a1d41
nvd.nist.gov/vuln/detail/CVE-2026-8723
github.com/advisories/GHSA-q8mj-m7cp-5q26
npmjs.com/qs
github.com/CVEProject/cvelistV5/tree/main/cves/2026/8xxx/CVE-2026-8723.json
Show 101 moreShow less
github.com/ljharb/qs
security-tracker.debian.org/tracker/CVE-2026-8723
access.redhat.com/errata/RHSA-2026:17682
images.redhat.com
access.redhat.com/security/cve/CVE-2026-42899
access.redhat.com/security/updates/classification
access.redhat.com/security/cve/CVE-2026-45149
access.redhat.com/security/cve/CVE-2026-8723
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_17682.json
bugzilla.redhat.com/show_bug.cgi?id=2478227
cve.org/CVERecord?id=CVE-2026-8723
bugzilla.redhat.com/show_bug.cgi?id=2476605
cve.org/CVERecord?id=CVE-2026-42899
nvd.nist.gov/vuln/detail/CVE-2026-42899
msrc.microsoft.com/update-guide/vulnerability/CVE-2026-42899
bugzilla.redhat.com/show_bug.cgi?id=2483481
cve.org/CVERecord?id=CVE-2026-45149
nvd.nist.gov/vuln/detail/CVE-2026-45149
github.com/juliangruber/brace-expansion/security/advisories/GHSA-jxxr-4gwj-5jf2
access.redhat.com/errata/RHSA-2026:33521
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_33521.json
access.redhat.com/errata/RHSA-2026:38091
access.redhat.com/security/cve/CVE-2025-4330
access.redhat.com/security/cve/CVE-2026-11940
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_38091.json
bugzilla.redhat.com/show_bug.cgi?id=2370014
cve.org/CVERecord?id=CVE-2025-4330
nvd.nist.gov/vuln/detail/CVE-2025-4330
gist.github.com/sethmlarson/52398e33eff261329a0180ac1d54f42f
github.com/python/cpython/commit/3612d8f51741b11f36f8fb0494d79086bac9390a
github.com/python/cpython/commit/9e0ac76d96cf80b49055f6d6b9a6763fb9215c2a
github.com/python/cpython/issues/135034
github.com/python/cpython/pull/135037
mail.python.org/archives/list/[email protected]/thread/MAXIJJCUUMCL7ATZNDVEGGHUMQMUUKLG
bugzilla.redhat.com/show_bug.cgi?id=2491848
cve.org/CVERecord?id=CVE-2026-11940
nvd.nist.gov/vuln/detail/CVE-2026-11940
github.com/python/cpython/issues/151558
github.com/python/cpython/pull/151559
mail.python.org/archives/list/[email protected]/thread/LD6QIISNQFQYOIEPJNEUIPV7S3V76FZH
access.redhat.com/errata/RHSA-2026:9455
access.redhat.com/security/cve/CVE-2026-2950
access.redhat.com/security/cve/CVE-2026-48618
access.redhat.com/security/cve/CVE-2026-48933
access.redhat.com/security/cve/CVE-2026-48615
access.redhat.com/security/cve/CVE-2026-48936
access.redhat.com/security/cve/CVE-2026-48934
access.redhat.com/security/cve/CVE-2026-48928
access.redhat.com/security/cve/CVE-2026-48930
access.redhat.com/security/cve/CVE-2026-48619
access.redhat.com/security/cve/CVE-2026-48935
access.redhat.com/security/cve/CVE-2026-59870
access.redhat.com/security/cve/CVE-2026-59868
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_9455.json
bugzilla.redhat.com/show_bug.cgi?id=2453499
cve.org/CVERecord?id=CVE-2026-2950
nvd.nist.gov/vuln/detail/CVE-2026-2950
github.com/lodash/lodash/security/advisories/GHSA-f23m-r3pf-42rh
bugzilla.redhat.com/show_bug.cgi?id=2493335
cve.org/CVERecord?id=CVE-2026-48615
nvd.nist.gov/vuln/detail/CVE-2026-48615
nodejs.org/en/blog/vulnerability/june-2026-security-releases
bugzilla.redhat.com/show_bug.cgi?id=2493337
cve.org/CVERecord?id=CVE-2026-48618
nvd.nist.gov/vuln/detail/CVE-2026-48618
bugzilla.redhat.com/show_bug.cgi?id=2493325
cve.org/CVERecord?id=CVE-2026-48619
nvd.nist.gov/vuln/detail/CVE-2026-48619
bugzilla.redhat.com/show_bug.cgi?id=2493333
cve.org/CVERecord?id=CVE-2026-48928
nvd.nist.gov/vuln/detail/CVE-2026-48928
bugzilla.redhat.com/show_bug.cgi?id=2493326
cve.org/CVERecord?id=CVE-2026-48930
nvd.nist.gov/vuln/detail/CVE-2026-48930
github.com/nodejs/node/commit/7dafafa2424710ded8b77eb7c878e884c1aef64e
hackerone.com/reports/3656716
bugzilla.redhat.com/show_bug.cgi?id=2493331
cve.org/CVERecord?id=CVE-2026-48933
nvd.nist.gov/vuln/detail/CVE-2026-48933
bugzilla.redhat.com/show_bug.cgi?id=2493332
cve.org/CVERecord?id=CVE-2026-48934
nvd.nist.gov/vuln/detail/CVE-2026-48934
bugzilla.redhat.com/show_bug.cgi?id=2493329
cve.org/CVERecord?id=CVE-2026-48935
nvd.nist.gov/vuln/detail/CVE-2026-48935
bugzilla.redhat.com/show_bug.cgi?id=2493336
cve.org/CVERecord?id=CVE-2026-48936
nvd.nist.gov/vuln/detail/CVE-2026-48936
bugzilla.redhat.com/show_bug.cgi?id=2498114
cve.org/CVERecord?id=CVE-2026-59868
nvd.nist.gov/vuln/detail/CVE-2026-59868
github.com/nodeca/js-yaml/commit/3105455b81dee69e0fd36e09ac0b2ccfdb54adc1
github.com/nodeca/js-yaml/releases/tag/5.2.0
github.com/nodeca/js-yaml/security/advisories/GHSA-g796-fgmg-93mv
bugzilla.redhat.com/show_bug.cgi?id=2498130
cve.org/CVERecord?id=CVE-2026-59870
nvd.nist.gov/vuln/detail/CVE-2026-59870
github.com/nodeca/js-yaml/commit/39f3211a2f01b3c6982710cf21434ab7060acefe
github.com/nodeca/js-yaml/releases/tag/5.2.1
github.com/nodeca/js-yaml/security/advisories/GHSA-724g-mxrg-4qvm
ubuntu.com/security/CVE-2026-8723