6.3 MEDIUM
- CVSS version (CVSS): 4.0
- Attack Vector (AV): Network (N)
- Attack Complexity (AC): Low (L)
- Attack Requirement (AT): Present (P)
- Privileges Required (PR): None (N)
- User Interaction (UI): None (N)
- Vulnerable System Impact Confidentiality (VC): None (N)
- Vulnerable System Impact Integrity (VI): None (N)
- Vulnerable System Impact Availability (VA): Low (L)
- Subsequent System Impact Confidentiality (SC): None (N)
- Subsequent System Impact Integrity (SI): None (N)
- Subsequent System Impact Availability (SA): None (N)
- Modified Attack Vector (MAV): Network (N)
- Modified Attack Complexity (MAC): Low (L)
- Modified Attack Requirement (MAT): Present (P)
- Modified Privileges Required (MPR): None (N)
- Modified User Interaction (MUI): None (N)
- Modified Vulnerable System Impact Confidentiality (MVC): None (N)
- Modified Vulnerable System Impact Integrity (MVI): None (N)
- Modified Vulnerable System Impact Availability (MVA): Low (L)
- Modified Subsequent System Impact Confidentiality (MSC): Negligible (N)
- Modified Subsequent System Impact Integrity (MSI): Negligible (N)
- Modified Subsequent System Impact Availability (MSA): Negligible (N)
- Safety (S): Not Defined (X)
- Automatable (AU): Not Defined (X)
- Recovery (R): Not Defined (X)
- Value Density (V): Not Defined (X)
- Vulnerability Response Effort (RE): Not Defined (X)
- Provider Urgency (U): Not Defined (X)
- Confidentiality Req. (CR): Not Defined (X)
- Integrity Req. (IR): Not Defined (X)
- Availability Req. (AR): Not Defined (X)
- Exploit Maturity (E): Not Defined (X)
Activity log
- Created suggestion
qs.parse does not enforce arrayLimit on comma groups under bracket-push keys when throwOnLimitExceeded is set (incomplete fix for CVE-2026-2391)
### Summary When `qs.parse` is called with `comma: true` and `throwOnLimitExceeded: true`, a comma-separated value under a bracket-push key (`a[]=1,2,3,4`) is split into an array without being compared against `arrayLimit`, while the same value under a flat key (`a=1,2,3,4`), an indexed key (`a[0]=`), a nested key (`a[b]=`), or a dotted key (`a.b=` with `allowDots`) throws the documented `RangeError`. A single parameter such as `a[]=1,2,2,...` therefore produces an inner array of arbitrary length even though the caller opted into the hard limit. This is the `[]=` key form that the fix for CVE-2026-2391 (qs 6.14.2) did not cover. ### Details In `lib/parse.js`, a comma-separated value under a `[]=` key is split and then wrapped as a single nested element (`val = [val]`, so that each `a[]=x,y` group counts as one element of the outer array). The `arrayLimit` check that 6.14.2 added for comma values runs after that wrap, so for `[]=` parts it only ever saw the wrapper of length 1. 6.15.3 added a pre-split comma count so that an oversized value throws before it is allocated, but gated it on an `isFlatArrayValue` flag that `parseValues` set to `false` for any part containing `[]=`, and did not pass it for object-valued input, so the gap remained. #### PoC ```js var qs = require('qs'); var options = { comma: true, arrayLimit: 3, throwOnLimitExceeded: true }; qs.parse('a=1,2,3,4', options); // RangeError: Array limit exceeded. Only 3 elements allowed in an array. qs.parse('a[]=1,2,3,4', options); // { a: [ [ '1', '2', '3', '4' ] ] } (no throw) qs.parse('a[]=' + '1,'.repeat(1000000) + '1', { comma: true, arrayLimit: 20, throwOnLimitExceeded: true }); // no throw; a 1,000,001-element inner array is allocated ``` #### Fix `lib/parse.js`, applied in 8859c37 on `main` and released as v6.16.0: the `isFlatArrayValue` gate is removed, so every comma-split value is counted against `arrayLimit` before splitting regardless of key form. An in-limit group under `a[]=` still counts as one element of the outer array, and the default (`throwOnLimitExceeded: false`) path is unchanged. ### Affected versions `>=6.14.2 <6.16.0`, fixed in v6.16.0. v6.14.2 introduced `arrayLimit` enforcement for comma values (the fix for CVE-2026-2391) but only for values not under a `[]=` key, and every release from v6.14.2 through v6.15.3 has the same gap. v6.14.0 and v6.14.1, where `throwOnLimitExceeded` exists but does not apply to any comma form, are covered by CVE-2026-2391 rather than this record. Earlier lines (6.7.x through 6.13.x) have `comma` but no `throwOnLimitExceeded`, so there is no hard cap on any comma path to bypass; releases before 6.7.0 have no `comma` option. ### Impact An unauthenticated attacker who can reach an application that parses untrusted query strings or urlencoded bodies with both `comma: true` and `throwOnLimitExceeded: true` (both non-default) can bypass the configured limit with a single `a[]=` parameter and force the parser to allocate an array proportional to the request size. The cost is strictly linear in the attacker-supplied bytes (about 0.1 microseconds and 6 to 7 retained bytes per input byte; the same out-of-memory threshold as the documented default `throwOnLimitExceeded: false` path), so a transport-layer request or body size limit bounds it completely (and node's default maximum HTTP header size of 16 KB already bounds the request line, so multi-megabyte payloads need a body parser). The impact is that an opt-in hard limit fails open on one key spelling, not unbounded allocation from a small input.
References
Affected products
- <6.16.0
Matching in nixpkgs
pkgs.qsv
CSVs sliced, diced & analyzed
pkgs.sqsh
Command line tool for querying Sybase/MSSQL databases
pkgs.tqsl
Software for using the ARRL Logbook of the World
pkgs.qsstv
Qt-based slow-scan TV and fax
pkgs.qsudo
Graphical sudo utility from Project Trident
-
nixos-unstable 2020.03.27
- nixpkgs-unstable 2020.03.27
- nixos-unstable-small 2020.03.27
-
nixos-26.05 2020.03.27
- nixos-26.05-small 2020.03.27
- nixpkgs-26.05-darwin 2020.03.27
pkgs.liboqs
C library for prototyping and experimenting with quantum-resistant cryptography
pkgs.qsynth
Fluidsynth GUI
pkgs.mmseqs2
Ultra fast and sensitive sequence search and clustering suite
pkgs.pdqsort
Novel sorting algorithm that combines the fast average case of randomized quicksort with the fast worst case of heapsort
-
nixos-unstable 0-unstable-2021-03-14
- nixpkgs-unstable 0-unstable-2021-03-14
- nixos-unstable-small 0-unstable-2021-03-14
-
nixos-26.05 0-unstable-2021-03-14
- nixos-26.05-small 0-unstable-2021-03-14
- nixpkgs-26.05-darwin 0-unstable-2021-03-14
pkgs.pipreqs
Generate requirements.txt file for any project based on imports
pkgs.qsvlite
CSVs sliced, diced & analyzed
pkgs.qsampler
LinuxSampler GUI front-end application
pkgs.qspeakers
Loudspeaker enclosure designer
pkgs.qsreplace
Accept URLs on stdin, replace all query string values with a user-supplied value
pkgs.trustedqsl
Software for using the ARRL Logbook of the World
pkgs.noctalia-qs
Flexible QtQuick based desktop shell toolkit
pkgs.qscreenshot
Simple creation and editing of screenshots
-
nixos-unstable 2021-10-18
- nixpkgs-unstable 2021-10-18
- nixos-unstable-small 2021-10-18
-
nixos-26.05 2021-10-18
- nixos-26.05-small 2021-10-18
- nixpkgs-26.05-darwin 2021-10-18
pkgs.qstopmotion
Create stopmotion animation with a (web)camera
pkgs.oqs-provider
Open Quantum Safe provider for OpenSSL (3.x)
pkgs.libsForQt5.qscintilla
Qt port of the Scintilla text editing library
pkgs.indi-3rdparty.indi-qsi
Third party drivers for the INDI astronomical software suite
-
nixos-unstable 3rdparty-indi-qsi-2.2.0
- nixpkgs-unstable 3rdparty-indi-qsi-2.2.0
- nixos-unstable-small 3rdparty-indi-qsi-2.2.4
-
nixos-26.05 3rdparty-indi-qsi-2.2.0
- nixos-26.05-small 3rdparty-indi-qsi-2.2.0
- nixpkgs-26.05-darwin 3rdparty-indi-qsi-2.2.0
pkgs.kdePackages.qscintilla
Qt port of the Scintilla text editing library
pkgs.qt6Packages.qscintilla
Qt port of the Scintilla text editing library
pkgs.python313Packages.aioqsw
Library to fetch data from QNAP QSW switches
pkgs.python314Packages.aioqsw
Library to fetch data from QNAP QSW switches
pkgs.python313Packages.bqscales
Grammar of Graphics scales for bqplot and other Jupyter widgets libraries
pkgs.python314Packages.bqscales
Grammar of Graphics scales for bqplot and other Jupyter widgets libraries
pkgs.python313Packages.qstylizer
Qt stylesheet generation utility for PyQt/PySide
pkgs.python314Packages.qstylizer
Qt stylesheet generation utility for PyQt/PySide
pkgs.gnomeExtensions.tailscale-qs
Add Tailscale to GNOME quick settings. Fork of joaophi/tailscale-gnome-qs with continued maintenance and improvements.
pkgs.haskellPackages.amazonka-sqs
Amazon Simple Queue Service SDK
-
nixos-unstable 2.0-unstable-2025-04-16
- nixpkgs-unstable 2.0-unstable-2025-04-16
- nixos-unstable-small 2.0-unstable-2025-04-16
-
nixos-26.05 2.0-unstable-2025-04-16
- nixos-26.05-small 2.0-unstable-2025-04-16
- nixpkgs-26.05-darwin 2.0-unstable-2025-04-16
pkgs.haskellPackages.bounded-qsem
Bounded quantity semaphores
pkgs.python313Packages.qscintilla
Python binding to QScintilla, Qt based text editing control
pkgs.python314Packages.qscintilla
Python binding to QScintilla, Qt based text editing control
pkgs.gnomeExtensions.tailscale-qs-2
Add Tailscale to GNOME quick settings
pkgs.haskellPackages.linearEqSolver
Use SMT solvers to solve linear systems over integers and rationals
pkgs.perlPackages.PerlPrereqScanner
Tool to scan your Perl code for its prerequisites
pkgs.perl5Packages.PerlPrereqScanner
Tool to scan your Perl code for its prerequisites
pkgs.python313Packages.mypy-boto3-sqs
Type annotations for boto3 sqs
pkgs.python313Packages.qscintilla-qt5
None
pkgs.python313Packages.qscintilla-qt6
None
pkgs.python314Packages.mypy-boto3-sqs
Type annotations for boto3 sqs
pkgs.python314Packages.qscintilla-qt5
None
pkgs.python314Packages.qscintilla-qt6
None
pkgs.python313Packages.pyqt6-qscintilla
Python binding to QScintilla, Qt based text editing control
-
nixos-unstable -
- nixos-unstable-small 2.14.1
pkgs.python314Packages.pyqt6-qscintilla
Python binding to QScintilla, Qt based text editing control
-
nixos-unstable -
- nixos-unstable-small 2.14.1
pkgs.python313Packages.aliyun-python-sdk-iqs
Module of Aliyun Python SDK (iqs)
-
nixos-unstable -
- nixos-unstable-small 1.0.0
pkgs.python313Packages.types-aiobotocore-sqs
Type annotations for aiobotocore sqs
pkgs.python314Packages.aliyun-python-sdk-iqs
Module of Aliyun Python SDK (iqs)
-
nixos-unstable -
- nixos-unstable-small 1.0.0
pkgs.python314Packages.types-aiobotocore-sqs
Type annotations for aiobotocore sqs
-
nixos-unstable -
- nixos-unstable-small 3.9.0
pkgs.perlPackages.PerlPrereqScannerNotQuiteLite
Tool to scan your Perl code for its prerequisites
Package maintainers
-
@honnip Jung seungwoo <me@honnip.page>
-
@returntoreality Linus Karl <linus@lotz.li>
-
@sheepforce Phillip Seeber <phillip.seeber@googlemail.com>
-
@peterhoeg Peter Hoeg <peter@hoeg.com>
-
@Sigmanificient Yohann Boniface <sigmanificient@gmail.com>
-
@natsukium Tomoya Otabi <nixpkgs@natsukium.com>
-
@iynaix Xianyi Lin <iynaix@gmail.com>
-
@Rixxc Aaron Kaiser <a_kaiser+nixpkgs@posteo.de>
-
@jherland Johan Herland <johan@herland.net>
-
@PsyanticY Psyanticy <iuns@outlook.fr>
-
@fabaff Fabian Affolter <mail@fabian-affolter.ch>
-
@bcdarwin Ben Darwin <bcdarwin@gmail.com>
-
@bjornfor Bjørn Forsman <bjorn.forsman@gmail.com>
-
@TomaSajt TomaSajt
-
@averagebit averagebit <averagebit@pm.me>
-
@hax404 Georg Haas <hax404foogit@hax404.de>
-
@romildo José Romildo Malaquias <malaquias@gmail.com>
-
@misuzu misuzu <bakalolka@gmail.com>
-
@detroyejr Jonathan De Troye <detroyejr@outlook.com>