CVE-2025-15284: CWE-20 Improper Input Validation
Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue affects qs: < 6.14.1. Summary The arrayLimit option in qs did not enforce limits for bracket notation (a[]=1&a[]=2), only for indexed notation (a[0]=1). This is a consistency bug; arrayLimit should apply uniformly across all array notations. Note: The default parameterLimit of 1000 effectively mitigates the DoS scenario originally described. With default options, bracket notation cannot produce arrays larger than parameterLimit regardless of arrayLimit, because each a[]=valueconsumes one parameter slot. The severity has been reduced accordingly. Details The arrayLimit option only checked limits for indexed notation (a[0]=1&a[1]=2) but did not enforce it for bracket notation (a[]=1&a[]=2). Vulnerable code (lib/parse.js:159-162): if (root === '[]' && options.parseArrays) { obj = utils.combine([], leaf); // No arrayLimit check } Working code (lib/parse.js:175): else if (index <= options.arrayLimit) { // Limit checked here obj = []; obj[index] = leaf; } The bracket notation handler at line 159 uses utils.combine([], leaf) without validating against options.arrayLimit, while indexed notation at line 175 checks index <= options.arrayLimit before creating arrays. PoC const qs = require('qs'); const result = qs.parse('a[]=1&a[]=2&a[]=3&a[]=4&a[]=5&a[]=6', { arrayLimit: 5 }); console.log(result.a.length); // Output: 6 (should be max 5) Note on parameterLimit interaction: The original advisory's "DoS demonstration" claimed a length of 10,000, but parameterLimit (default: 1000) caps parsing to 1,000 parameters. With default options, the actual output is 1,000, not 10,000. Impact Consistency bug in arrayLimit enforcement. With default parameterLimit, the practical DoS risk is negligible since parameterLimit already caps the total number of parsed parameters (and thus array elements from bracket notation). The risk increases only when parameterLimit is explicitly set to a very high value.
AI Analysis
Technical Summary
CVE-2025-15284 is a vulnerability in the qs Node.js library, which is widely used for parsing URL query strings. The issue arises from inconsistent enforcement of the arrayLimit option, which is intended to restrict the maximum number of elements in parsed arrays. While the arrayLimit correctly limits arrays using indexed notation (e.g., a[0]=1&a[1]=2), it fails to enforce this limit for bracket notation arrays (e.g., a[]=1&a[]=2). This inconsistency allows an attacker to craft HTTP query strings with bracket notation arrays exceeding the configured arrayLimit, potentially causing excessive memory allocation and CPU usage during parsing. The vulnerable code path combines array elements without checking the arrayLimit, whereas the indexed notation path enforces the limit properly. Although the original advisory demonstrated a denial of service scenario with 10,000 elements, the default parameterLimit of 1000 parameters caps the total number of parsed parameters, effectively mitigating large-scale exploitation under default settings. The vulnerability affects qs versions prior to 6.14.1, which fixed the issue by applying arrayLimit checks uniformly. Exploitation requires no authentication or user interaction and can be triggered remotely by sending specially crafted HTTP requests with large bracket notation arrays. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:L) indicates network attack vector, low complexity, partial attack type requiring no privileges or user interaction, with low impact on availability. No known exploits are currently in the wild.
Potential Impact
For European organizations, the primary impact of this vulnerability is the potential for denial of service attacks against web applications or APIs that utilize vulnerable versions of the qs library for query string parsing. If parameterLimit is configured higher than the default or disabled, attackers can send crafted HTTP requests with large bracket notation arrays to exhaust server memory and CPU resources, leading to degraded performance or service outages. This can disrupt business operations, cause downtime, and potentially impact customer trust and regulatory compliance, especially under GDPR requirements for service availability. The vulnerability does not directly expose sensitive data or allow code execution, limiting confidentiality and integrity impacts. However, availability degradation can affect critical services, particularly for sectors relying heavily on web-based interfaces such as finance, healthcare, and government services. Organizations using custom configurations with high parameterLimit values or those unaware of the vulnerability risk increased exposure. The lack of authentication or user interaction requirements makes exploitation feasible by remote attackers scanning for vulnerable endpoints.
Mitigation Recommendations
1. Upgrade the qs library to version 6.14.1 or later, where the arrayLimit enforcement bug is fixed. 2. Review and enforce strict parameterLimit settings, ideally retaining the default value of 1000 or lower, to cap the total number of parameters parsed and limit resource consumption. 3. Implement input validation and rate limiting at the web application firewall (WAF) or API gateway level to detect and block unusually large or malformed query strings with excessive array elements. 4. Monitor application logs for abnormal spikes in query string parameter counts or parsing errors indicative of attempted exploitation. 5. Conduct security testing and code audits to identify other potential input validation weaknesses in query string parsing or related components. 6. Educate development teams on secure configuration of third-party libraries and the risks of overriding default limits without proper safeguards. 7. Deploy resource usage monitoring and automated alerting to detect early signs of denial of service conditions. 8. Consider isolating critical services behind reverse proxies or load balancers that can enforce stricter request size limits and filtering.
Affected Countries
Germany, France, United Kingdom, Netherlands, Italy, Spain, Sweden, Poland, Belgium, Ireland
CVE-2025-15284: CWE-20 Improper Input Validation
Description
Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue affects qs: < 6.14.1. Summary The arrayLimit option in qs did not enforce limits for bracket notation (a[]=1&a[]=2), only for indexed notation (a[0]=1). This is a consistency bug; arrayLimit should apply uniformly across all array notations. Note: The default parameterLimit of 1000 effectively mitigates the DoS scenario originally described. With default options, bracket notation cannot produce arrays larger than parameterLimit regardless of arrayLimit, because each a[]=valueconsumes one parameter slot. The severity has been reduced accordingly. Details The arrayLimit option only checked limits for indexed notation (a[0]=1&a[1]=2) but did not enforce it for bracket notation (a[]=1&a[]=2). Vulnerable code (lib/parse.js:159-162): if (root === '[]' && options.parseArrays) { obj = utils.combine([], leaf); // No arrayLimit check } Working code (lib/parse.js:175): else if (index <= options.arrayLimit) { // Limit checked here obj = []; obj[index] = leaf; } The bracket notation handler at line 159 uses utils.combine([], leaf) without validating against options.arrayLimit, while indexed notation at line 175 checks index <= options.arrayLimit before creating arrays. PoC const qs = require('qs'); const result = qs.parse('a[]=1&a[]=2&a[]=3&a[]=4&a[]=5&a[]=6', { arrayLimit: 5 }); console.log(result.a.length); // Output: 6 (should be max 5) Note on parameterLimit interaction: The original advisory's "DoS demonstration" claimed a length of 10,000, but parameterLimit (default: 1000) caps parsing to 1,000 parameters. With default options, the actual output is 1,000, not 10,000. Impact Consistency bug in arrayLimit enforcement. With default parameterLimit, the practical DoS risk is negligible since parameterLimit already caps the total number of parsed parameters (and thus array elements from bracket notation). The risk increases only when parameterLimit is explicitly set to a very high value.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
CVE-2025-15284 is a vulnerability in the qs Node.js library, which is widely used for parsing URL query strings. The issue arises from inconsistent enforcement of the arrayLimit option, which is intended to restrict the maximum number of elements in parsed arrays. While the arrayLimit correctly limits arrays using indexed notation (e.g., a[0]=1&a[1]=2), it fails to enforce this limit for bracket notation arrays (e.g., a[]=1&a[]=2). This inconsistency allows an attacker to craft HTTP query strings with bracket notation arrays exceeding the configured arrayLimit, potentially causing excessive memory allocation and CPU usage during parsing. The vulnerable code path combines array elements without checking the arrayLimit, whereas the indexed notation path enforces the limit properly. Although the original advisory demonstrated a denial of service scenario with 10,000 elements, the default parameterLimit of 1000 parameters caps the total number of parsed parameters, effectively mitigating large-scale exploitation under default settings. The vulnerability affects qs versions prior to 6.14.1, which fixed the issue by applying arrayLimit checks uniformly. Exploitation requires no authentication or user interaction and can be triggered remotely by sending specially crafted HTTP requests with large bracket notation arrays. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:L) indicates network attack vector, low complexity, partial attack type requiring no privileges or user interaction, with low impact on availability. No known exploits are currently in the wild.
Potential Impact
For European organizations, the primary impact of this vulnerability is the potential for denial of service attacks against web applications or APIs that utilize vulnerable versions of the qs library for query string parsing. If parameterLimit is configured higher than the default or disabled, attackers can send crafted HTTP requests with large bracket notation arrays to exhaust server memory and CPU resources, leading to degraded performance or service outages. This can disrupt business operations, cause downtime, and potentially impact customer trust and regulatory compliance, especially under GDPR requirements for service availability. The vulnerability does not directly expose sensitive data or allow code execution, limiting confidentiality and integrity impacts. However, availability degradation can affect critical services, particularly for sectors relying heavily on web-based interfaces such as finance, healthcare, and government services. Organizations using custom configurations with high parameterLimit values or those unaware of the vulnerability risk increased exposure. The lack of authentication or user interaction requirements makes exploitation feasible by remote attackers scanning for vulnerable endpoints.
Mitigation Recommendations
1. Upgrade the qs library to version 6.14.1 or later, where the arrayLimit enforcement bug is fixed. 2. Review and enforce strict parameterLimit settings, ideally retaining the default value of 1000 or lower, to cap the total number of parameters parsed and limit resource consumption. 3. Implement input validation and rate limiting at the web application firewall (WAF) or API gateway level to detect and block unusually large or malformed query strings with excessive array elements. 4. Monitor application logs for abnormal spikes in query string parameter counts or parsing errors indicative of attempted exploitation. 5. Conduct security testing and code audits to identify other potential input validation weaknesses in query string parsing or related components. 6. Educate development teams on secure configuration of third-party libraries and the risks of overriding default limits without proper safeguards. 7. Deploy resource usage monitoring and automated alerting to detect early signs of denial of service conditions. 8. Consider isolating critical services behind reverse proxies or load balancers that can enforce stricter request size limits and filtering.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- harborist
- Date Reserved
- 2025-12-29T21:36:51.399Z
- Cvss Version
- 4.0
- State
- PUBLISHED
Threat ID: 695450a8db813ff03e2be5f3
Added to database: 12/30/2025, 10:22:32 PM
Last enriched: 2/11/2026, 10:52:28 AM
Last updated: 3/25/2026, 5:35:49 AM
Views: 348
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.