CVE-2026-2391

Aşağı

Təsvir

### Xülasə qs kitabxanasındakı `arrayLimit` seçimi, `comma: true` aktiv olduqda vergüllə ayrılmış dəyərlər üçün limitləri tətbiq etmir və bu, hücumçulara yaddaşın tükənməsi vasitəsilə xidmətdən imtina (DoS) yaratmağa imkan verir. Bu, GHSA-6rw7-vpxm-498p (CVE-2025-15284) ilə həll edilmiş mötərizə notasiyası yan keçməsinə bənzər şəkildə massiv limiti tətbiqinin yan keçməsidir. ### Təfərrüatlar `comma` seçimi `true` olaraq təyin edildikdə (defolt deyil, lakin tətbiqlərdə konfiqurasiya edilə bilər), qs vergüllə ayrılmış sətirlərin massiv kimi parse edilməsinə icazə verir (məsələn, `?param=a,b,c` $\rightarrow$ `['a', 'b', 'c']`). Lakin, `arrayLimit` (defolt: 20) üçün limit yoxlaması və opsional `throwOnLimitExceeded` funksiyası `parseArrayValue`-da vergül emalı məntiqindən sonra baş verir ki, bu da yan keçməyə şərait yaradır. Bu, tək bir parametr vasitəsilə istənilən ölçüdə böyük massivlərin yaradılmasına və nəticədə həddindən artıq yaddaş ayrılmasına səbəb olur. **Zəiflik olan kod** (lib/parse.js: sətirlər ~40-50): ```js if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { return val.split(','); } if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) { throw new RangeError('Array limit exceeded. Only ' + options.arrayLimit + ' element' + (options.arrayLimit === 1 ? '' : 's') + ' allowed in an array.'); } return val; ``` `split(',')` funksiyası massivi dərhal qaytarır və növbəti limit yoxlamasını ötürür. `utils.combine` vasitəsilə aşağı axında birləşdirmə prosesi, seyrək massivlər üçün daşmaları qeyd etsə belə, yaddaş ayrılmasının qarşısını almır. Bu uyğunsuzluq hücumçuların milyonlarla vergülü olan tək bir parametr göndərməsinə (məsələn, `?param=,,,,,,,,...`) və limitləri tetiklemədən yaddaşda nəhəng massivlərin ayrılmasına imkan verir. Bu, indeksli (`a[0]=`) və mötərizə (`a[]=`) notasiyaları üçün düzgün tətbiq edilən (sonuncu v6.14.1 versiyasında GHSA-6rw7-vpxm-498p əsasında düzəldilib) `arrayLimit` məqsədini yan keçir. ### PoC **Test 1 - Əsas yan keçmə:** ``` npm install qs ``` ```js const qs = require('qs'); const payload = 'a=' + ','.repeat(25); // split-dən sonra 26 element (arrayLimit: 5 yan keçilir) const options = { comma: true, arrayLimit: 5, throwOnLimitExceeded: true }; try { const result = qs.parse(payload, options); console.log(result.a.length); // Çıxış: 26 (yan keçmə uğurludur) } catch (e) { console.log('Limit enforced:', e.message); // Atılmır } ``` **Konfiqurasiya:** - `comma: true` - `arrayLimit: 5` - `throwOnLimitExceeded: true` Gözlənilən: "Array limit exceeded" xətası atılır. Faktiki: Uğurla parse edilir və uzunluğu 26 olan massiv yaradılır. ### Təsir Yaddaşın tükənməsi vasitəsilə Xidmətdən İmtina (DoS).

CiddilikAşağı
CVSS3.7
İstismar ehtimalı—
MəhsulQs
Dərc12 fev 2026
İlk görülmə12 fev 2026

Necə düzəltmək olar

Yeniləyin
  • qs_project qs6.14.2 və ya daha yeni versiya
  • qs6.14.2 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
qs_project qs6.7.0 ≤ v < 6.14.26.14.2
qsnpm6.7.0 ≤ v < 6.14.26.14.2

Versiyanızı yoxlayın

Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.

Intelligence 360 paketində

Attack Surface Management

Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.

CVE-2026-2391 · Qs · Dark Radar