CVE-2026-82562: Qs Qs Array-limit Bypass Vulnerability
MODERATECVE-2026-82562 is a MODERATE (CVSS 3.7) qs array-limit bypass vulnerability (CWE-770: Allocation of Resources Without Limits or Throttling) affecting Qs libraries in the npm ecosystem. The issue involves qs array-limit bypass via bracket-key comma parsing. Remediation is available by upgrading affected packages to version 6.16.0.
CVE-2026-82562 at a Glance
Security Impact
CVSS: 3.7
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L).
How to Fix CVE-2026-82562
To remediate this vulnerability, upgrade all affected Qs dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
npm install qs@6.16.0
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
npm ls qs
How to Check if You Are Affected
To determine whether your Node.js application is affected by CVE-2026-82562, inspect your project dependencies using npm:
npm ls qs
Analyze the terminal output to locate any version of Qs in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 6.16.0), your application is affected.
Note: The npm ls qs command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-770: Allocation of Resources Without Limits or Throttling, where the product allocates a reusable resource or group of resources on behalf of an actor without imposing any intended restrictions on the size or number of resources that can be allocated. In Qs, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-82562 Affected Qs Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
qs
|
npm |
≥ 6.14.2
< 6.16.0
|
6.16.0
|
References
Frequently Asked Questions
What is CVE-2026-82562?
Which Qs versions are affected?
What version fixes CVE-2026-82562?
Is qs affected?
What is the CVSS score of CVE-2026-82562?
What CWE is associated with CVE-2026-82562?
How can I check npm dependencies for CVE-2026-82562?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-x5fp-wj9c-mxmx",
"modified" : "2026-09-02T14:46:57Z",
"published" : "2026-09-02T14:46:57Z",
"aliases" : [ "CVE-2026-82562" ],
"summary" : "qs array-limit bypass via bracket-key comma parsing",
"details" : "### Summary\n\n`qs` `v6.15.3` allows bracket-key input to bypass `arrayLimit` and `throwOnLimitExceeded` when `comma: true`. The input `a[]=1,2,3,4` succeeds with `arrayLimit: 3`, while the equivalent plain-key input is rejected.\n\nAffected version tested:\n\n```text\nqs v6.15.3\ncommit 18d085e919dae70c8f1b200ab99323058edab2c2\n```\n\n### Details\n\n`parseArrayValue()` enforces the comma limit only for flat values. The `a[]` form is marked non-flat, so its comma-separated value is wrapped after parsing and the inner array is not checked. A single parameter can therefore materialize arbitrarily large arrays.\n\n### PoC\n\n```js\nconst qs = require('qs')\nconst options = { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }\n\nconst result = qs.parse('a[]=1,2,3,4', options)\nconsole.log(result.a[0].length) // 4; expected RangeError\n\nconst big = qs.parse('a[]=' + '1,'.repeat(1000000) + '1', { comma: true, arrayLimit: 20 })\nconsole.log(big.a[0].length) // 1000001\n```\n\nOn `v6.15.3`, the first input parses successfully and the second creates an array with 1,000,001 elements. The equivalent `a=1,2,3,4` input throws `RangeError` as expected.\n\n### Impact\n\nAn attacker who can supply a query string or form body can bypass configured array limits and force excessive memory allocation, causing denial of service. The limit must be applied after comma splitting and before the resulting array is wrapped.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L"
}, {
"type" : "CVSS_V4",
"score" : "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"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "npm",
"name" : "qs"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "6.14.2"
}, {
"fixed" : "6.16.0"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 6.15.3"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/ljharb/qs/security/advisories/GHSA-w7fw-mjwx-w883"
}, {
"type" : "WEB",
"url" : "https://github.com/ljharb/qs/security/advisories/GHSA-x5fp-wj9c-mxmx"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-82562"
}, {
"type" : "WEB",
"url" : "https://github.com/ljharb/qs/commit/8859c37470e11b42b547b275e4e9bd0bc8cc5464"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/ljharb/qs"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-770" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-09-02T14:46:57Z",
"nvd_published_at" : "2026-08-30T01:20:32Z"
}
}