PULSE
FEED
ransomn0n reclama a Company #69 · Not Foundransomiah6477 reclama a alera · Professional Servicesransomn0n reclama a Company #68 · US · Not Foundransomn0n reclama a Company #67 · NL · Not Foundransomn0n reclama a Company #66 · Not Foundransomn0n reclama a Interior Technologies · Technologyransomeclipse reclama a Taiwan Otsuka Pharmaceutical · TW · Healthcareransomeclipse reclama a japantimes.co.jp · JP · Otherransomakira reclama a FOODMatch · Agriculture and Food Productionransomakira reclama a Shediac Lobster Shop · CA · Retail & E-Commerceransomakira reclama a Torns Enterprises · Not Foundransomkairos reclama a Oceania Digital Communications · VU · Technologyransomincransom reclama a FINANCIAMENTO LTDA · BR · Financial Servicesransomqilin reclama a MOA Architecture · SG · Professional Servicesransomn0n reclama a Company #69 · Not Foundransomiah6477 reclama a alera · Professional Servicesransomn0n reclama a Company #68 · US · Not Foundransomn0n reclama a Company #67 · NL · Not Foundransomn0n reclama a Company #66 · Not Foundransomn0n reclama a Interior Technologies · Technologyransomeclipse reclama a Taiwan Otsuka Pharmaceutical · TW · Healthcareransomeclipse reclama a japantimes.co.jp · JP · Otherransomakira reclama a FOODMatch · Agriculture and Food Productionransomakira reclama a Shediac Lobster Shop · CA · Retail & E-Commerceransomakira reclama a Torns Enterprises · Not Foundransomkairos reclama a Oceania Digital Communications · VU · Technologyransomincransom reclama a FINANCIAMENTO LTDA · BR · Financial Servicesransomqilin reclama a MOA Architecture · SG · Professional Services
← Todos los CVEs
CVE Watch14 oct 2026

CVE-2026-110816

### Summary `qs.stringify` with `arrayFormat: 'comma'` throws `TypeError: Cannot convert object to primitive value` when an array element

CVSS

5.3

Medio

EPSS

—

KEV

—

Exploit Today

0

0-100

Publicado: 14 oct 2026 · Última mod.: 14 oct 2026 · CWE-248 · CWE-704

EPSS · 30d

Sin historial EPSS suficiente todavía.

Descripción técnica

### 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.

Referencias oficiales
CVEs relacionados
CVECVSSEPSSKEVRExplotTítuloVis.
CVE-2026-1109334.4 MED
—
———Uncaught exception vulnerability in Samsung Open Source Vyond allows Input Data Manipulation. This issue affects Vyond: before fb10a5c8b833df7f152d4a563a61d6090a1790d7.2h
CVE-2026-110854—
—
——0Parse Server before 8.6.97 and 9.0.0 before 9.10.2-alpha.6 does not handle errors raised while sending verification or password reset emails, causing the server process to exit. A client holding only the public application keys can sign up, request a verification email, or request a password reset while the mail provider rejects, rate limits, or is unavailable, crashing the server.10h
CVE-2026-67418—
—
——0RabbitMQ is a messaging and streaming broker. From 3.13.0 until 3.13.19, 4.0.24, 4.1.15, 4.2.10, and 4.3.5, the MQTT 5 parser in deps/rabbitmq_mqtt/src/rabbit_mqtt_packet.erl accepts Request-Problem-Information on PUBLISH packets even though the property is valid only for CONNECT. An authenticated publisher with topic write permission can cause the broker to store and route that inapplicable property to a separately authenticated matching subscriber. When the subscriber path serializes the outbound PUBLISH, serialise_prop/2 has no matching clause, and the uncontained function_clause exception closes the victim MQTT or Web MQTT connection. The publisher connection and broker remain available, and queued replay, retained-message persistence, and broker-wide denial of service were not established. This issue is fixed in versions 3.13.19, 4.0.24, 4.1.15, 4.2.10, and 4.3.5.15h
CVE-2026-67416—
—
——0RabbitMQ is a messaging and streaming broker. From 4.0.0 until 4.0.24, 4.1.15, 4.2.10, and 4.3.4, the optimized AMQP 1.0 server_mode parser in deps/amqp10_common/src/amqp10_binary_parser.erl matches the textual prefixes of symbolic data, sequence, and value body descriptors without verifying their encoded symbol lengths. An authenticated AMQP 1.0 publisher with write permission can submit a well-formed unknown descriptor that begins with a registered body descriptor, and RabbitMQ misclassifies and stores the bytes as a standard body section. Strict AMQP 1.0 consumers can terminate while decoding the stored entry. For bodies misclassified as data, AMQP 0-9-1 or other cross-protocol conversion performs full body decoding and can terminate the consumer protocol process, with acknowledgement-required delivery permitting repeated failures. Sequence and value classifications are normally transported as opaque encoded payloads on that conversion path. The broker remains alive, and the issue does not bypass routing or authorization. This issue is fixed in versions 4.0.24, 4.1.15, 4.2.10, and 4.3.4.17h
CVE-2026-969457.5 ALT
56.7%
——17Uncaught exception in Windows Failover Cluster allows an unauthorized attacker to deny service over a network.2d
CVE-2026-880995.9 MED
56.8%
——17Uncaught exception in Windows Failover Cluster allows an unauthorized attacker to deny service over a network.2d