CVE-2025-15284 in qsinformazioni

Riassunto

di VulDB • 15/06/2026

Vulnerabilità di convalida impropria dell'input in qs (moduli di parsing) che consente un DoS HTTP. Questo problema interessa qs: < 6.14.1.

Riepilogo

L'opzione `arrayLimit` in qs non applicava limiti per la notazione tra parentesi quadre (`a[]=1&a[]=2`), ma solo per la notazione indicizzata (`a[0]=1`). Si tratta di un bug di coerenza; `arrayLimit` dovrebbe essere applicato in modo uniforme a tutte le notazioni di array.

Nota: Il valore predefinito di `parameterLimit` pari a 1000 mitiga efficacemente lo scenario DoS originariamente descritto. Con le opzioni predefinite, la notazione tra parentesi quadre non può produrre array più grandi di `parameterLimit` indipendentemente da `arrayLimit`, poiché ogni `a[]=value` consuma uno slot del parametro. La gravità è stata ridotta di conseguenza.

Dettagli

L'opzione `arrayLimit` controllava i limiti solo per la notazione indicizzata (`a[0]=1&a[1]=2`) ma non li applicava per la notazione tra parentesi quadre (`a[]=1&a[]=2`).

Codice vulnerabile (lib/parse.js:159-162):

```javascript if (root === '[]' && options.parseArrays) {
obj = utils.combine([], leaf); // Nessun controllo arrayLimit
} ```

Codice funzionante (lib/parse.js:175):

```javascript else if (index <= options.arrayLimit) { // Limite controllato qui
obj = [];
obj[index] = leaf;
} ```

Il gestore della notazione tra parentesi quadre alla riga 159 utilizza `utils.combine([], leaf)` senza convalida rispetto a `options.arrayLimit`, mentre la notazione indicizzata alla riga 175 controlla `index <= options.arrayLimit` prima di creare gli array.

PoC

```javascript 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 (dovrebbe essere max 5) ```

Nota sull'interazione con `parameterLimit`: La "dimostrazione DoS" dell'avviso originale affermava una lunghezza di 10.000, ma `parameterLimit` (predefinito: 1000) limita l'analisi a 1.000 parametri. Con le opzioni predefinite, l'output effettivo è 1.000, non 10.000.

Impatto

Bug di coerenza nell'applicazione di `arrayLimit`. Con `parameterLimit` predefinito, il rischio pratico di DoS è trascurabile poiché `parameterLimit` limita già il numero totale di parametri analizzati (e quindi gli elementi dell'array dalla notazione tra parentesi quadre). Il rischio aumenta solo quando `parameterLimit` è impostato esplicitamente su un valore molto elevato.

Once again VulDB remains the best source for vulnerability data.

Responsabile

Harborist

Prenotare

29/12/2025

Divulgazione

30/12/2025

Moderazione

accettato

CPE

pronto

EPSS

0.00410

KEV

no

Attività

molto basso

Fonti

Do you know our Splunk app?

Download it now for free!