CVE-2026-110816
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.
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 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 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-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 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-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 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-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 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-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 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-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 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 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 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-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 High
CVSS: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 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-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
| Package | Affected | Fixed |
|---|---|---|
qsnpm |
6.7.0 to 6.16.0 | 6.16.1 |
js-jqueryAzure Linux:3 |
through 3.5.0-4 | None known |
python-tensorboardAzure Linux:3 |
through 2.16.2-6 | None known |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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
| Package | Affected | Fixed |
|---|---|---|
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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 |
qsTuxCare: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-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 |
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 |
qsnpm |
6.7.0 up to 6.16.1 | 6.16.1 |
grafana13.2Red 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-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: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 |
git-bugopenSUSE:Tumbleweed From an advisory covering 13 CVEs |
before 0.11.0-3.1 | 0.11.0-3.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases | OSV | |
| affected | ||
| facts | OSV | |
| affected, aliases, references | ||
| 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-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
github.com/ljharb/qs/security/advisories/GHSA-6pq8-jhm2-2vcw
github.com/ljharb/qs/commit/a952e7519338ef0cfb25694a2988848f93333727
nvd.nist.gov/vuln/detail/CVE-2026-110816
github.com/ljharb/qs/releases/tag/v6.16.1
github.com/advisories/GHSA-6pq8-jhm2-2vcw
npmjs.com/qs
Show 81 moreShow less
github.com/CVEProject/cvelistV5/tree/main/cves/2026/110xxx/CVE-2026-110816.json
github.com/ljharb/qs
security-tracker.debian.org/tracker/CVE-2026-110816
access.redhat.com/errata/RHSA-2026:85266
access.redhat.com/security/cve/CVE-2026-100347
access.redhat.com/security/cve/CVE-2026-100348
access.redhat.com/security/cve/CVE-2026-100349
access.redhat.com/security/cve/CVE-2026-100351
access.redhat.com/security/cve/CVE-2026-100352
access.redhat.com/security/cve/CVE-2026-100353
access.redhat.com/security/cve/CVE-2026-100354
access.redhat.com/security/cve/CVE-2026-110816
access.redhat.com/security/cve/CVE-2026-93450
access.redhat.com/security/updates/classification
images.redhat.com
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_85266.json
bugzilla.redhat.com/show_bug.cgi?id=2538979
cve.org/CVERecord?id=CVE-2026-93450
nvd.nist.gov/vuln/detail/CVE-2026-93450
github.com/go-openapi/swag
github.com/go-openapi/swag/blob/v0.27.0/jsonutils/adapters/stdlib/json/adapter.go
github.com/go-openapi/swag/blob/v0.27.0/jsonutils/adapters/stdlib/json/ordered_map.go
github.com/go-openapi/swag/commit/0c24346ced59a25811e8694a915e7131d25ccb0e
github.com/go-openapi/swag/security/advisories/GHSA-xh24-9qpg-8w28
vulncheck.com/advisories/go-openapi-swag-jsonutils-before-0.27.1-uncontrolled-recursion-in-ordered-json-marshal-and-unmarshal
bugzilla.redhat.com/show_bug.cgi?id=2553580
cve.org/CVERecord?id=CVE-2026-100347
nvd.nist.gov/vuln/detail/CVE-2026-100347
github.com/getkin/kin-openapi/commit/f1a5b523b82868d2d9be2e116b4e942892be72c3
github.com/getkin/kin-openapi/releases/tag/v0.145.0
github.com/getkin/kin-openapi/security/advisories/GHSA-fh4f-47mf-f2gj
bugzilla.redhat.com/show_bug.cgi?id=2553571
cve.org/CVERecord?id=CVE-2026-100348
nvd.nist.gov/vuln/detail/CVE-2026-100348
github.com/getkin/kin-openapi/commit/88aa64c7cbd03ecadbb419c473bdcaa8b0124c6b
github.com/getkin/kin-openapi/security/advisories/GHSA-mh7x-f8wq-4jhx
bugzilla.redhat.com/show_bug.cgi?id=2553589
cve.org/CVERecord?id=CVE-2026-100349
nvd.nist.gov/vuln/detail/CVE-2026-100349
github.com/getkin/kin-openapi/commit/f5441d67f855ed34d975b3b85665764644ab1459
github.com/getkin/kin-openapi/releases/tag/v0.146.0
github.com/getkin/kin-openapi/security/advisories/GHSA-74vm-87hj-r66f
bugzilla.redhat.com/show_bug.cgi?id=2553587
cve.org/CVERecord?id=CVE-2026-100351
nvd.nist.gov/vuln/detail/CVE-2026-100351
github.com/getkin/kin-openapi/commit/eda80e2676e9f577ceed2dd80e64f16083edb041
github.com/getkin/kin-openapi/releases/tag/v0.147.0
github.com/getkin/kin-openapi/security/advisories/GHSA-23vg-4cjm-66q5
bugzilla.redhat.com/show_bug.cgi?id=2553588
cve.org/CVERecord?id=CVE-2026-100352
nvd.nist.gov/vuln/detail/CVE-2026-100352
github.com/getkin/kin-openapi/commit/4487f198ab8be0c37d6ca72c54f5dca4dc25270e
github.com/getkin/kin-openapi/releases/tag/v0.148.0
github.com/getkin/kin-openapi/security/advisories/GHSA-rj39-cv6w-8wv7
bugzilla.redhat.com/show_bug.cgi?id=2553592
cve.org/CVERecord?id=CVE-2026-100353
nvd.nist.gov/vuln/detail/CVE-2026-100353
github.com/getkin/kin-openapi/commit/9814d1f2b212f3508bf52296aa9e248b2122a5a9
github.com/getkin/kin-openapi/releases/tag/v0.149.0
github.com/getkin/kin-openapi/security/advisories/GHSA-vrcc-3ch7-hppw
bugzilla.redhat.com/show_bug.cgi?id=2553590
cve.org/CVERecord?id=CVE-2026-100354
nvd.nist.gov/vuln/detail/CVE-2026-100354
github.com/getkin/kin-openapi/commit/9245cef66c840e27a08409a8a5cd0ee930c5bcff
github.com/getkin/kin-openapi/security/advisories/GHSA-g8cf-rcjf-c8cf
bugzilla.redhat.com/show_bug.cgi?id=2552954
cve.org/CVERecord?id=CVE-2026-110816
ubuntu.com/security/CVE-2026-110816
suse.com/security/cve/CVE-2026-110095
suse.com/security/cve/CVE-2026-110180
suse.com/security/cve/CVE-2026-110306
suse.com/security/cve/CVE-2026-110725
suse.com/security/cve/CVE-2026-110816
suse.com/security/cve/CVE-2026-111756
suse.com/security/cve/CVE-2026-112085
suse.com/security/cve/CVE-2026-112366
suse.com/security/cve/CVE-2026-78659
suse.com/security/cve/CVE-2026-78660
suse.com/security/cve/CVE-2026-78663
suse.com/security/cve/CVE-2026-78669
suse.com/security/cve/CVE-2026-97032
Left out here: the rest of 2 source descriptions. The JSON record has them.