ljharb qs hasta 6.14.1 lib/parse.js denegación de servicio
| CVSS Puntuación meta temporal | Precio actual del exploit (≈) | Puntuación de interés CTI |
|---|---|---|
| 4.9 | $0-$5k | 0.00 |
Resumen
Una vulnerabilidad clasificada como problemática ha sido encontrada en ljharb qs hasta 6.14.1. Está afectada una función desconocida en la librería lib/parse.js. Mediante la manipulación de un input desconocido se causa una vulnerabilidad de clase denegación de servicio. Esta vulnerabilidad está identificada como CVE-2026-2391. El ataque puede realizarse a distancia. Ningún exploit está disponible. Es recomendable actualizar el componente afectado.
Detalles
Una vulnerabilidad ha sido encontrada en ljharb qs hasta 6.14.1 y clasificada como problemática. Una función desconocida en la biblioteca lib/parse.js es afectada por esta vulnerabilidad. A través de la manipulación de un input desconocido se causa una vulnerabilidad de clase denegación de servicio. Esto tiene repercusión sobre la la disponibilidad. CVE resume:
### Resumen
La opción `arrayLimit` en qs no aplica límites para valores separados por comas cuando `comma: true` está habilitado, permitiendo a los atacantes causar denegación de servicio a través del agotamiento de memoria. Esto es un bypass de la aplicación del límite de array, similar al bypass de notación de corchetes abordado en GHSA-6rw7-vpxm-498p (CVE-2025-15284).
### Detalles
Cuando la opción `comma` se establece en `true` (no es el valor predeterminado, pero es configurable en las aplicaciones), qs permite analizar cadenas separadas por comas como arrays (por ejemplo, `?param=a,b,c` se convierte en `['a', 'b', 'c']`). Sin embargo, la verificación de límite para `arrayLimit` (predeterminado: 20) y la opción throwOnLimitExceeded ocurren después de la lógica de manejo de comas en `parseArrayValue`, lo que permite un bypass. Esto permite la creación de arrays arbitrariamente grandes a partir de un solo parámetro, lo que lleva a una asignación excesiva de memoria.
Código vulnerable (lib/parse.js: líneas ~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;
```
El `split(',')` devuelve el array inmediatamente, omitiendo la verificación de límite subsiguiente. La fusión posterior a través de `utils.combine` no evita la asignación, incluso si marca desbordamientos para arrays dispersos. Esta discrepancia permite a los atacantes enviar un solo parámetro con millones de comas (por ejemplo, `?param=,,,,,,,,...`), asignando arrays masivos en memoria sin activar los límites. Bypassea la intención de `arrayLimit`, que se aplica correctamente para las notaciones indexadas (`a[0]=`) y de corchetes (`a[]=`) (esta última corregida en v6.14.1 según GHSA-6rw7-vpxm-498p).
### PoC
Prueba 1 - Bypass básico:
```
npm install qs
```
```js
const qs = require('qs');
const payload = 'a=' + ','.repeat(25); // 26 elements after split (bypasses arrayLimit: 5)
const options = { comma: true, arrayLimit: 5, throwOnLimitExceeded: true };
try {
const result = qs.parse(payload, options);
console.log(result.a.length); // Outputs: 26 (bypass successful)
} catch (e) {
console.log('Limit enforced:', e.message); // Not thrown
}
```
Configuración:
- `comma: true`
- `arrayLimit: 5`
- `throwOnLimitExceeded: true`
Esperado: Lanza el error 'Array limit exceeded'.
Real: Analiza con éxito, creando un array de longitud 26.
### Impacto
Denegación de Servicio (DoS) a través del agotamiento de memoria.El advisory puede ser descargado de github.com. La vulnerabilidad es identificada como CVE-2026-2391. Se considera difícil de explotar. El ataque puede ser realizado a través de la red. La explotación no requiere ninguna forma de autentificación. Hay detalles técnicos conocidos, pero no se dispone de un exploit.
Para el scanner Nessus se dispone de un plugin ID 298899 (Linux Distros Unpatched Vulnerability : CVE-2026-2391), que puede ayudar a determinar la existencia del riesgo analizado.
Una actualización a la versión 6.14.1 elimina esta vulnerabilidad.
La vulnerabilidad también está documentado en las bases de datos CNNVD (CNNVD-202602-2144) y Tenable (298899). If you want to get best quality of vulnerability data, you may have to visit VulDB.
Producto
Proveedor
Nombre
Versión
Sitio web
- Producto: https://github.com/ljharb/qs/
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Confiabilidad: 🔍
CNA CVSS-B Score: 🔒
CNA CVSS-BT Score: 🔒
CNA Vector: 🔒
CVSSv3
VulDB Puntuación meta base: 5.0VulDB Puntuación meta temporal: 4.9
VulDB Puntuación base: 3.7
VulDB Puntuación temporal: 3.6
VulDB Vector: 🔒
VulDB Confiabilidad: 🔍
NVD Puntuación base: 7.5
NVD Vector: 🔒
CNA Puntuación base: 3.7
CNA Vector (harborist): 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vector | Complejidad | Autenticación | Confidencialidad | Integridad | Disponibilidad |
|---|---|---|---|---|---|
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
| Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
VulDB Puntuación base: 🔒
VulDB Puntuación temporal: 🔒
VulDB Confiabilidad: 🔍
Explotación
Clase: Denegación de servicioCWE: CWE-404
CAPEC: 🔒
ATT&CK: 🔒
Físico: No
Local: No
Remoto: Sí
Disponibilidad: 🔒
Estado: No está definido
EPSS Score: 🔒
EPSS Percentile: 🔒
Predicción de precios: 🔍
Estimación del precio actual: 🔒
| 0-Day | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
|---|---|---|---|---|
| Hoy | Desbloquear | Desbloquear | Desbloquear | Desbloquear |
Nessus ID: 298899
Nessus Nombre: Linux Distros Unpatched Vulnerability : CVE-2026-2391
Inteligencia de amenazas
Interés: 🔍Actores activos: 🔍
Grupos APT activos: 🔍
Contramedidas
Recomendación: ActualizaciónEstado: 🔍
Hora de 0 días: 🔒
Actualización: qs 6.14.1
Línea de tiempo
2026-02-12 Aviso publicado2026-02-12 CVE asignado
2026-02-12 Entrada de VulDB creada
2026-02-26 Última actualización de VulDB
Fuentes
Producto: github.comAviso: github.com
Estado: Confirmado
CVE: CVE-2026-2391 (🔒)
GCVE (CVE): GCVE-0-2026-2391
GCVE (VulDB): GCVE-100-345666
CNNVD: CNNVD-202602-2144 - qs 安全漏洞
Artículo
Fecha de creación: 2026-02-12 06:20Actualizado: 2026-02-26 20:21
Cambios: 2026-02-12 06:20 (76), 2026-02-13 15:54 (7), 2026-02-15 03:16 (2), 2026-02-26 20:21 (12)
Completo: 🔍
Cache ID: 216::103
If you want to get best quality of vulnerability data, you may have to visit VulDB.
Sin comentarios aún. Idiomas: es + pt + en.
Por favor, inicie sesión para comentar.