chore(deps): update dependency qs to v6.14.1 [security] - autoclosed#630
chore(deps): update dependency qs to v6.14.1 [security] - autoclosed#630renovate[bot] wants to merge 1 commit into
Conversation
|
Important Review skippedBot user detected. To trigger a single review, invoke the You can disable this status message by setting the Comment |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
commit: |
CodSpeed Performance ReportMerging #630 will improve performance by 55.33%Comparing Summary
Benchmarks breakdown
|
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #630 +/- ##
=======================================
Coverage 94.57% 94.57%
=======================================
Files 14 14
Lines 1474 1474
Branches 321 321
=======================================
Hits 1394 1394
Misses 76 76
Partials 4 4 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This PR contains the following updates:
6.14.0→6.14.1GitHub Vulnerability Alerts
CVE-2025-15284
Summary
The
arrayLimitoption in qs does not enforce limits for bracket notation (a[]=1&a[]=2), allowing attackers to cause denial-of-service via memory exhaustion. Applications usingarrayLimitfor DoS protection are vulnerable.Details
The
arrayLimitoption only checks limits for indexed notation (a[0]=1&a[1]=2) but completely bypasses it for bracket notation (a[]=1&a[]=2).Vulnerable code (
lib/parse.js:159-162):Working code (
lib/parse.js:175):The bracket notation handler at line 159 uses
utils.combine([], leaf)without validating againstoptions.arrayLimit, while indexed notation at line 175 checksindex <= options.arrayLimitbefore creating arrays.PoC
Test 1 - Basic bypass:
Test 2 - DoS demonstration:
Configuration:
arrayLimit: 5(test 1) orarrayLimit: 100(test 2)a[]=value(not indexeda[0]=value)Impact
Denial of Service via memory exhaustion. Affects applications using
qs.parse()with user-controlled input andarrayLimitfor protection.Attack scenario:
GET /api/search?filters[]=x&filters[]=x&...&filters[]=x(100,000+ times)qs.parse(query, { arrayLimit: 100 })Real-world impact:
Suggested Fix
Add
arrayLimitvalidation to the bracket notation handler. The code already calculatescurrentArrayLengthat line 147-151, but it's not used in the bracket notation handler at line 159.Current code (
lib/parse.js:159-162):Fixed code:
This makes bracket notation behaviour consistent with indexed notation, enforcing
arrayLimitand converting to object when limit is exceeded (per README documentation).Release Notes
ljharb/qs (qs)
v6.14.1Compare Source
[]notation as wellparse: when a custom decoder returnsnullfor a key, ignore that keyparse: extract key segment splitting helperstringify: increase coverageeslint,@ljharb/eslint-config,npmignore,es-value-fixtures,for-each,object-inspectConfiguration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.