CVE-2026-2391

Düşük

Açıklama

### Özet qs içerisindeki `arrayLimit` seçeneği, `comma: true` etkinleştirildiğinde virgülle ayrılmış değerler için sınırları uygulamamaktadır ve bu durum saldırganların bellek tüketimi yoluyla hizmet reddine (denial-of-service) neden olmasına olanak tanır. Bu durum, GHSA-6rw7-vpxm-498p (CVE-2025-15284) kapsamında ele alınan köşeli parantez notasyonu atlatmasına benzer şekilde, dizi sınırı uygulamasının atlatılmasıdır. ### Detaylar `comma` seçeneği `true` olarak ayarlandığında (varsayılan değildir ancak uygulamalarda yapılandırılabilir), qs virgülle ayrılmış dizelerin dizi olarak ayrıştırılmasına izin verir (örneğin, `?param=a,b,c` ifadesi `['a', 'b', 'c']` olur). Ancak, `arrayLimit` (varsayılan: 20) için sınır kontrolü ve isteğe bağlı `throwOnLimitExceeded` işlemi, `parseArrayValue` içindeki virgül işleme mantığından sonra gerçekleştiğinden bir atlatmaya imkan tanır. Bu durum, tek bir parametreden keyfi büyüklükte diziler oluşturulmasına izin vererek aşırı bellek tahsisine yol açar. **Hatalı kod** (lib/parse.js: satırlar ~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(',')` fonksiyonu diziyi hemen döndürerek sonraki sınır kontrolünü atlar. `utils.combine` aracılığıyla yapılan alt akış birleştirmeleri, seyrek diziler için taşmaları işaretlese bile tahsisi engellemez. Bu tutarsızlık, saldırganların milyonlarca virgül içeren tek bir parametre göndermesine (örneğin, `?param=,,,,,,,,...`) ve sınırları tetiklemeden bellekte devasa diziler tahsis etmesine olanak tanır. Bu durum, indeksli (`a[0]=`) ve köşeli parantez (`a[]=`) notasyonları için doğru şekilde uygulanan (ikincisi GHSA-6rw7-vpxm-498p uyarınca v6.14.1 sürümünde düzeltilmiştir) `arrayLimit` amacını devre dışı bırakır. ### PoC **Test 1 - Temel atlatma:** ``` npm install qs ``` ```js const qs = require('qs'); const payload = 'a=' + ','.repeat(25); // split sonrası 26 öğe (arrayLimit: 5'i atlatır) const options = { comma: true, arrayLimit: 5, throwOnLimitExceeded: true }; try { const result = qs.parse(payload, options); console.log(result.a.length); // Çıktı: 26 (atlatma başarılı) } catch (e) { console.log('Limit enforced:', e.message); // Fırlatılmaz } ``` **Yapılandırma:** - `comma: true` - `arrayLimit: 5` - `throwOnLimitExceeded: true` Beklenen: "Array limit exceeded" hatası fırlatılması. Gerçekleşen: Başarıyla ayrıştırılır ve 26 uzunluğunda bir dizi oluşturulur. ### Etki Bellek tüketimi yoluyla Hizmet Reddi (DoS).

ÖnemDüşük
CVSS3.7
İstismar olasılığı—
ÜrünQs
Yayın12 Şub 2026
İlk görülme12 Şub 2026

Nasıl düzeltilir

Güncelleyin
  • qs_project qs6.14.2 ya da sonraki bir sürüm
  • qs6.14.2 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
qs_project qs6.7.0 ≤ v < 6.14.26.14.2
qsnpm6.7.0 ≤ v < 6.14.26.14.2

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.