Every CVE Search/ Get API key

CVE-2026-110816

qs.stringify with arrayFormat comma throws TypeError on array elements that cannot be coerced to a string

6.3 MediumFix available

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

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

0.37%Up 0.1 points since Oct 15, 2026
90%50%10%1%

What each source reports

CVE List Score used 6.3

qs.stringify with arrayFormat comma throws TypeError on array elements that cannot be coerced to a string

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
CVE-2026-110816
CVSS 4.0
6.3 MediumCVSS: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 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-248, CWE-704
Updated
2026-11-02
EUVDEUVD-2026-101710 6.3

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
EUVD-2026-101710
CVSS 4.0
6.3 MediumCVSS: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-6pq8-jhm2-2vcw 6.3

qs : qs.stringify with arrayFormat 'comma' throws an uncaught TypeError on array elements carrying a non-callable own toString (DoS)

Summary

qs.stringify(obj, { arrayFormat: 'comma' }) throws an uncaught TypeError: Cannot convert object to primitive value when an array in obj contains an element that carries an own, non-callable toString property (for example { a: [ { toString: 'x' } ] }). A remote, unauthenticated attacker who can influence an object that the application later re-serializes with the comma array format triggers the throw. In a service that lacks a synchronous error boundary around the serialization call, the uncaught exception crashes the worker process, producing a denial of service.

Root Cause

When arrayFormat: 'comma' is selected, the comma branch collapses the whole array into a single value via Array.prototype.join, or, under encodeValuesOnly: true, maps each element through the value encoder before joining. Both paths perform an implicit string coercion (ToPrimitive with hint "string") on each element. For an object whose own toString is a non-callable value, coercion skips the shadowed non-callable toString, falls through to Object.prototype.valueOf (which returns the object rather than a primitive), and throws. The comma branch runs this coercion before the per-element null and skip handling in the main loop, so nothing downstream can neutralize the hostile element, and the throw is never caught inside the library.

lib/stringify.js  (comma-array branch)
  line 152-154: obj = utils.maybeMap(obj, function (v) { return v == null ? v : encoder(v); });  // encodeValuesOnly path
  line 156:     objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];   // default comma path
lib/utils.js
  line 292:     string = String(str);   // value encoder coercion reached via the encodeValuesOnly path

Impact

Prerequisites: the application calls qs.stringify with arrayFormat: 'comma' (a documented, supported option) on an object whose shape can be influenced by attacker input. Attacker-controllable sources include qs.parse(input, { allowPrototypes: true }), which retains a toString segment (Express 4's default query parser, Express 5's extended query parser, and body-parser's extended urlencoded parser all set it), qs.parse(input, { plainObjects: true }), whose null-prototype elements throw even without a toString key (eg, a[][b]=c), and JSON.parse of a request body, which needs no qs parse option at all. No authentication or user interaction is required. Demonstrated capability: a single request forces an uncaught synchronous TypeError in the serialization call. In a naive single-process Node service with no synchronous error boundary, this crashes the process and takes the service offline (availability impact). Under a framework such as Express that traps synchronous handler throws, the plausible outcome is a per-request 500 rather than a full outage; that lower-impact case is noted but not the worst credible supported deployment. There is no confidentiality or integrity impact, no memory unsafety, and no prototype pollution.

Proof of Concept

Install qs at the affected version (for example 6.16.0) and run the following script with Node.js. No network setup is required; it demonstrates the throw in isolation.

var qs = require('qs');

// Source A: qs.parse with allowPrototypes retains the hostile toString segment
qs.stringify(qs.parse('a[0][toString]=x', { allowPrototypes: true }), { arrayFormat: 'comma' });

// Source B: a JSON request body, no qs parse option needed
qs.stringify(JSON.parse('{"a":[{"toString":"x"}]}'), { arrayFormat: 'comma' });

// Also affected: the encodeValuesOnly sub-path
qs.stringify(JSON.parse('{"a":[{"toString":"x"}]}'), { arrayFormat: 'comma', encodeValuesOnly: true });
A default-join (allowPrototypes) => THREW: TypeError: Cannot convert object to primitive value
B default-join (JSON.parse) => THREW: TypeError: Cannot convert object to primitive value
C encodeValuesOnly path => THREW: TypeError: Cannot…
Record
GHSA-6pq8-jhm2-2vcw
CVSS 4.0
6.3 MediumCVSS: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 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-248, CWE-704
Updated
2026-11-02
NVD 6.3

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
CVE-2026-110816
CVSS 4.0
6.3 MediumCVSS: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 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-248, CWE-704
Updated
2026-11-02
OSV 6.3

qs.stringify with arrayFormat comma throws TypeError on array elements that cannot be coerced to a string

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
CVE-2026-110816
CVSS 4.0
6.3 MediumCVSS: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-248, CWE-704
Updated
2026-11-02
OSVDEBIAN-CVE-2026-110816 6.3

Summary qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails. ### Details In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected. Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true. #### PoC js var qs = require("qs"); qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" }); qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" }); qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true }); // TypeError: Cannot convert object to primitive value #### Fix Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates. ### Affected versions >=6.7.0 <6.16.1, fixed in v6.16.1. The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected. ### Impact An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
DEBIAN-CVE-2026-110816
CVSS 4.0
6.3 MediumCVSS: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 18 moreShow less
OSVGHSA-6pq8-jhm2-2vcw 6.3

qs : qs.stringify with arrayFormat 'comma' throws an uncaught TypeError on array elements carrying a non-callable own toString (DoS)

Summary

qs.stringify(obj, { arrayFormat: 'comma' }) throws an uncaught TypeError: Cannot convert object to primitive value when an array in obj contains an element that carries an own, non-callable toString property (for example { a: [ { toString: 'x' } ] }). A remote, unauthenticated attacker who can influence an object that the application later re-serializes with the comma array format triggers the throw. In a service that lacks a synchronous error boundary around the serialization call, the uncaught exception crashes the worker process, producing a denial of service.

Root Cause

When arrayFormat: 'comma' is selected, the comma branch collapses the whole array into a single value via Array.prototype.join, or, under encodeValuesOnly: true, maps each element through the value encoder before joining. Both paths perform an implicit string coercion (ToPrimitive with hint "string") on each element. For an object whose own toString is a non-callable value, coercion skips the shadowed non-callable toString, falls through to Object.prototype.valueOf (which returns the object rather than a primitive), and throws. The comma branch runs this coercion before the per-element null and skip handling in the main loop, so nothing downstream can neutralize the hostile element, and the throw is never caught inside the library.

lib/stringify.js  (comma-array branch)
  line 152-154: obj = utils.maybeMap(obj, function (v) { return v == null ? v : encoder(v); });  // encodeValuesOnly path
  line 156:     objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }];   // default comma path
lib/utils.js
  line 292:     string = String(str);   // value encoder coercion reached via the encodeValuesOnly path

Impact

Prerequisites: the application calls qs.stringify with arrayFormat: 'comma' (a documented, supported option) on an object whose shape can be influenced by attacker input. Attacker-controllable sources include qs.parse(input, { allowPrototypes: true }), which retains a toString segment (Express 4's default query parser, Express 5's extended query parser, and body-parser's extended urlencoded parser all set it), qs.parse(input, { plainObjects: true }), whose null-prototype elements throw even without a toString key (eg, a[][b]=c), and JSON.parse of a request body, which needs no qs parse option at all. No authentication or user interaction is required. Demonstrated capability: a single request forces an uncaught synchronous TypeError in the serialization call. In a naive single-process Node service with no synchronous error boundary, this crashes the process and takes the service offline (availability impact). Under a framework such as Express that traps synchronous handler throws, the plausible outcome is a per-request 500 rather than a full outage; that lower-impact case is noted but not the worst credible supported deployment. There is no confidentiality or integrity impact, no memory unsafety, and no prototype pollution.

Proof of Concept

Install qs at the affected version (for example 6.16.0) and run the following script with Node.js. No network setup is required; it demonstrates the throw in isolation.

var qs = require('qs');

// Source A: qs.parse with allowPrototypes retains the hostile toString segment
qs.stringify(qs.parse('a[0][toString]=x', { allowPrototypes: true }), { arrayFormat: 'comma' });

// Source B: a JSON request body, no qs parse option needed
qs.stringify(JSON.parse('{"a":[{"toString":"x"}]}'), { arrayFormat: 'comma' });

// Also affected: the encodeValuesOnly sub-path
qs.stringify(JSON.parse('{"a":[{"toString":"x"}]}'), { arrayFormat: 'comma', encodeValuesOnly: true });
A default-join (allowPrototypes) => THREW: TypeError: Cannot convert object to primitive value
B default-join (JSON.parse) => THREW: TypeError: Cannot convert object to primitive value
C encodeValuesOnly path => THREW: TypeError: Cannot…
Record
GHSA-6pq8-jhm2-2vcw
CVSS 4.0
6.3 MediumCVSS: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 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Weakness
CWE-248, CWE-704
Updated
2026-11-02
OSVRHSA-2026:85266 7.5

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:85266
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-110816 6.3

Summary qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails. ### Details In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected. Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true. #### PoC js var qs = require("qs"); qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" }); qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" }); qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true }); // TypeError: Cannot convert object to primitive value #### Fix Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates. ### Affected versions >=6.7.0 <6.16.1, fixed in v6.16.1. The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected. ### Impact An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
UBUNTU-CVE-2026-110816
CVSS 4.0
6.3 MediumCVSS: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 MediumCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Updated
2026-11-02
OSVAZL-108309 No score

CVE-2026-110816 affecting package js-jquery 3.5.0-4

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
AZL-108309
Updated
2026-11-05
OSVAZL-108477 No score

CVE-2026-110816 affecting package python-tensorboard 2.16.2-6

Summary

qs.stringify with arrayFormat: 'comma' throws TypeError: Cannot convert object to primitive value when an array element cannot be coerced to a string, such as an object with an own non-callable toString ({ "toString": "x" }) or a null-prototype object. The comma format joins array elements with Array.prototype.join and, under encodeValuesOnly, first passes each element through String() in utils.encode; neither guards against an element whose string coercion fails.

Details

In lib/stringify.js, the comma branch collapses the array with obj.join(','). For an element whose own toString is not callable, ToPrimitive skips it, falls through to Object.prototype.valueOf (which returns the object itself), and throws. Under encodeValuesOnly: true, the same element first reaches String(str) in utils.encode (lib/utils.js) and throws there. Nested arrays ({ "a": [[{ "toString": "x" }]] }) throw the same way, through Array.prototype.toString. The indices, brackets, and repeat formats walk into object elements instead of coercing them, and are not affected.

Such elements can come from untrusted input. JSON.parse produces { "a": [{ "toString": "x" }] } with no qs option involved. qs.parse("a[0][toString]=x", { allowPrototypes: true }) keeps the toString key, and qs.parse("a[][b]=c", { plainObjects: true }) produces a null-prototype element; the default parse options drop toString and produce ordinary objects, which do not throw. Express 4's default query parser, Express 5's extended query parser, and body-parser's urlencoded({ extended: true }) all call qs.parse with allowPrototypes: true.

PoC




var qs = require("qs");



qs.stringify(JSON.parse("{\"a\":[{\"toString\":\"x\"}]}"), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[0][toString]=x", { allowPrototypes: true }), { arrayFormat: "comma" });



qs.stringify(qs.parse("a[][b]=c", { plainObjects: true }), { arrayFormat: "comma", encodeValuesOnly: true });



// TypeError: Cannot convert object to primitive value



Fix

Applied in a952e75 on main and released as v6.16.1: an element whose string coercion would fail is coerced to its primitive valueOf, if any, or else to Object.prototype.toString, so it renders as [object Object], the same as any other object element already does under the comma format. Nested arrays are walked the way join walks them. Every input that did not previously throw serializes exactly as before, and a toString or valueOf that itself throws still propagates.

Affected versions

>=6.7.0 <6.16.1, fixed in v6.16.1.

The join path was introduced with the comma format in b84acba and first shipped in v6.7.0; v6.6.x and earlier ignore arrayFormat: 'comma' and are not affected. The encodeValuesOnly String() site was introduced in 4c4b23d (v6.11.1); before that, the same input throws at join. Every release from v6.7.0 through v6.16.0 is affected.

Impact

An unauthenticated request can make any code path that re-serializes attacker-influenced data with qs.stringify and arrayFormat: 'comma' (for example, rebuilding a query string from req.query for a redirect or an upstream request, or serializing a parsed JSON body) throw synchronously. In a typical Node.js HTTP framework the throw is caught by the framework error boundary and the affected request returns a 500; the process survives and other requests are unaffected. Where the call runs outside an error boundary, such as an async Express 4 handler (where the throw becomes an unhandled promise rejection) or a bare http request handler, the process exits, so the impact in that case depends on the application error handling rather than on qs. The default arrayFormat (indices) is not affected.

Record
AZL-108477
Updated
2026-11-02
OSVCLSA-2026-1792139175 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.15.3-tuxcare.3.

Record
CLSA-2026-1792139175
Updated
2026-11-02
OSVCLSA-2026-1793445859 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.14.0-tuxcare.5.

Record
CLSA-2026-1793445859
Updated
2026-11-02
OSVCLSA-2026-1793448315 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.7.0-tuxcare.4.

Record
CLSA-2026-1793448315
Updated
2026-11-02
OSVCLSA-2026-1793448399 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.10.3-tuxcare.5.

Record
CLSA-2026-1793448399
Updated
2026-11-02
OSVCLSA-2026-1793448489 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.10.4-tuxcare.3.

Record
CLSA-2026-1793448489
Updated
2026-11-02
OSVCLSA-2026-1793448581 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.11.2-tuxcare.3.

Record
CLSA-2026-1793448581
Updated
2026-11-02
OSVCLSA-2026-1793448873 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.14.2-tuxcare.2.

Record
CLSA-2026-1793448873
Updated
2026-11-02
OSVCLSA-2026-1793449041 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.13.0-tuxcare.5.

Record
CLSA-2026-1793449041
Updated
2026-11-02
OSVCLSA-2026-1793451308 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.11.0-tuxcare.5.

Record
CLSA-2026-1793451308
Updated
2026-11-02
OSVCLSA-2026-1793451410 No score

TuxCare security update for qs (1 CVE)

TuxCare rebuilt qs to address 1 CVE. Fixed in 6.10.7-tuxcare.6.

Record
CLSA-2026-1793451410
Updated
2026-11-02
OSVCLSA-2026-1794058800 No score

TuxCare security update for qs (2 CVEs)

TuxCare rebuilt qs to address 2 CVEs. Fixed in 6.9.6-tuxcare.1.

Record
CLSA-2026-1794058800
Updated
2026-11-07
OSVCLSA-2026-1794060891 No score

TuxCare security update for qs (2 CVEs)

TuxCare rebuilt qs to address 2 CVEs. Fixed in 6.9.1-tuxcare.1.

Record
CLSA-2026-1794060891
Updated
2026-11-07
OSVopenSUSE-SU-2026:12261-1 No score

git-bug-0.11.0-3.1 on GA media

These are all security issues fixed in the git-bug-0.11.0-3.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:12261-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
qs
npm
6.7.0 to 6.16.0
6.16.1
js-jquery
Azure Linux:3
through 3.5.0-4 None known
python-tensorboard
Azure Linux:3
through 2.16.2-6 None known
qs
TuxCare:npm
6.15.3-tuxcare.0 up to 6.15.3-tuxcare.3, plus listed versions
6.15.36.15.3-tuxcare.16.15.3-tuxcare.2
6.15.3-tuxcare.3
qs
TuxCare:npm
6.14.0-tuxcare.0 up to 6.14.0-tuxcare.5, plus listed versions
6.14.06.14.0-tuxcare.16.14.0-tuxcare.26.14.0-tuxcare.36.14.0-tuxcare.4
6.14.0-tuxcare.5
qs
TuxCare:npm
6.7.0-tuxcare.0 up to 6.7.0-tuxcare.4, plus listed versions
6.7.06.7.0-tuxcare.16.7.0-tuxcare.26.7.0-tuxcare.3
6.7.0-tuxcare.4
qs
TuxCare:npm
6.10.3-tuxcare.0 up to 6.10.3-tuxcare.5, plus listed versions
6.10.36.10.3-tuxcare.16.10.3-tuxcare.26.10.3-tuxcare.36.10.3-tuxcare.4
6.10.3-tuxcare.5
qs
TuxCare:npm
6.10.4-tuxcare.0 up to 6.10.4-tuxcare.3, plus listed versions
6.10.46.10.4-tuxcare.16.10.4-tuxcare.2
6.10.4-tuxcare.3
qs
TuxCare:npm
6.11.2-tuxcare.0 up to 6.11.2-tuxcare.3, plus listed versions
6.11.26.11.2-tuxcare.16.11.2-tuxcare.2
6.11.2-tuxcare.3
qs
TuxCare:npm
6.14.2-tuxcare.0 up to 6.14.2-tuxcare.2, plus listed versions
6.14.26.14.2-tuxcare.1
6.14.2-tuxcare.2
Show 19 moreShow less
Affected packages
PackageAffectedFixed
qs
TuxCare:npm
6.13.0-tuxcare.0 up to 6.13.0-tuxcare.5, plus listed versions
6.13.06.13.0-tuxcare.16.13.0-tuxcare.26.13.0-tuxcare.36.13.0-tuxcare.4
6.13.0-tuxcare.5
qs
TuxCare:npm
6.11.0-tuxcare.0 up to 6.11.0-tuxcare.5, plus listed versions
6.11.06.11.0-tuxcare.16.11.0-tuxcare.26.11.0-tuxcare.36.11.0-tuxcare.4
6.11.0-tuxcare.5
qs
TuxCare:npm
6.10.7-tuxcare.0 up to 6.10.7-tuxcare.6, plus listed versions
6.10.76.10.7-tuxcare.16.10.7-tuxcare.26.10.7-tuxcare.36.10.7-tuxcare.46.10.7-tuxcare.5
6.10.7-tuxcare.6
qs
TuxCare:npm
From an advisory covering 2 CVEs
6.9.6-tuxcare.0 up to 6.9.6-tuxcare.1, plus listed versions
6.9.6
6.9.6-tuxcare.1
qs
TuxCare:npm
From an advisory covering 2 CVEs
6.9.1-tuxcare.0 up to 6.9.1-tuxcare.1, plus listed versions
6.9.1
6.9.1-tuxcare.1
node-qs
Debian: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 less
6.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-qs
Debian: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-qs
Debian:14
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
qs
npm
6.7.0 up to 6.16.1
6.16.1
grafana13.2
Red Hat:hummingbird:1
From an advisory covering 9 CVEs
before 0:13.2.3-0.3.hum1
0:13.2.3-0.3.hum1
node-qs
Ubuntu:Pro:14.04:LTS
All versions, plus listed versions
0.4.2-10.6.5-10.6.5-1ubuntu0.1~esm1
None known
node-qs
Ubuntu:16.04:LTS
All versions, plus listed versions
2.2.4-1
None known
node-qs
Ubuntu:18.04:LTS
All versions, plus listed versions
2.2.4-12.2.4-1ubuntu1
None known
node-qs
Ubuntu: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-qs
Ubuntu: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-qs
Ubuntu: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-qs
Ubuntu: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-qs
Ubuntu: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
git-bug
openSUSE:Tumbleweed
From an advisory covering 13 CVEs
before 0.11.0-3.1
0.11.0-3.1

History

History
RecordedChangedSources
affected, aliasesOSV
affected
factsOSV
affected, aliases, references
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-110816 is a medium vulnerability (CVSS 6.3) in Ljharb Qs, published October 14, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 30th percentile. Fixed in qs 6.16.1.

References

Show 81 moreShow less
This page doesn't list everything

Left out here: the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open