V
Сканер-ВС
ГлавнаяКаталогИсточникиCWECAPECATT&CKМеры защитыПродуктыВендорыДокументация
CVE-2026-8723
DEB
Средний

## Резюме `qs.stringify` бросает `TypeError` при вызове с `rrayFormat: 'comma'' и `encodeValuesTOnly: true` на массиве, содержащем `null` и…

CVSS
6.3
Средний
EPSS
0.00
p26
Опубликовано
2026-01-01
Обновлено
2026-01-01
Описание

## Резюме `qs.stringify` бросает `TypeError` при вызове с `rrayFormat: 'comma'' и `encodeValuesTOnly: true` на массиве, содержащем `null` или 'undefined`. Бросок является синхронным и не обрабатывается ни одним из нулевых вариантов qs (`skipNulls`, ``strictNullHandling`). ## Детали В запятой + `encodeValuesOnly' филиал `lib/stringify.js:145` отобрал массив через сырой кодировщик перед присоединением: ```s obj = utils.maybeMap (obj, encoder); `` "utils.encode`"(`lib/utils.js.195`) читает `utils.length` без nulle guard, поэтому ``null` или 'undefined`' элемент "TypeError`". `skipNulls` и ``strictNullHandling` оба проверяются в цикле на душу населения ниже этой линии и никогда не получают шанса запустить. Те же класс ошибок, что и фильтр-чиповый путь, зафиксированный в 0c180a4. Уязвимая форма ветви запятой + `encodeValuesOnly` была введена в 4c4b23d («кодовые значения запятой более последовательно», PR #463, 2023-01-19), впервые выпущенная в v6.11.1. ### # # PoC ```s const qs = потребуются('qs'); qs.stringify({ a: [null, 'b'] }, { arrayFormat: 'comma', encodeValuesТолько: true }); qs.stringify({ a: [неопределенный, 'b'] }, { arrayFormat: 'comma', encodeValuesTOnly: true }); qs.stringify({ a: [null] }, { arrayFormat: 'comma', encodeValuesТолько: true }); // TypeError: Невозможно прочитать свойства нуля (чтение 'длина') // при коде (lib/utils.js:195:13) // на Object.maybeMap (lib/utils.js:32:37) // в строке (lib/stringify.js:145:25) `` ### Фикс `lib/stringify.js:145`, применяется в 21f80b3 на `main` и выпущен в качестве v6.15.2: "Дифф" - obj = utils.maybeMap (obj, кодировщик); + obj = utils.maybeMap(obj, функция (v) { + возврат v == null ? v : кодировщик(v); + }); `` `null` и 'undefined`` теперь проходит через `ymbeMap` неизменный и достигать ``noll',')' шаг как-ист. Для `{ a: [null, 'b'] }` это производит `a=,b`, соответствие пути запятой non-`encodeValuesOnly` (который уже соединяется перед кодированием и производит `a=%2Cb` для того же входа). Одноэлементные `[null]` массивы по-прежнему разрушаются через существующий `obj.join(',') || null` и остаются предметом `skipNulls` / `_strictNullHandling` в основном цикле. ## # Затронутые версии `>>=6.11.1 <6.15.2` — закреплен в v6.15.2. Уязвимая форма кода была введена в 4c4b23d и впервые отгружена в v6.11.1. Более ранние версии — включая все 6.7x, 6.8.x, 6.9.x, 6.10.x и 6.11.0 — реализовали путь запятой + `encodeValuesOnly` по-разному (вступление перед кодированием) и не затрагиваются. Эмпирически проверено в выпущенных версиях. ## Impact Код приложения, который называет `qs.stringify` с как «rrarayFormat: 'comma'`» и `encodeValuesTOnly: true` (оба не по умолчанию) на входе, которые могут содержать `null` или 'undedefined` Элемент массива, будет бросать синхронно вместо того, чтобы создавать строку запроса. В типичном HTTP-кадрате Node.js (Express, Fastify, Koa, hapi) бросок синхронизации задерживается границей ошибки фреймворка, и затронутый запрос возвращает 500; рабочий процесс не выходит, и последующие запросы не затрагиваются. Обрамление «убивает рабочий процесс» применяется только к сайтам вызова за пределами границы ошибок запроса-обработника (фоновые рабочие места, пути запуска, потоковые трубопроводы) или к развертываниям с каркасной обработкой ошибок, явно отключенной. Уязвимый ввод - это нулевая или неопределенная запись внутри массива; это доступно от органов запроса JSON или от массивов кодов приложений, содержащих пользовательский ввод, но не из стандартных HTML-форм (которые производят строки или опущенные поля, а не буквальные `null`).

Теги · CWE
Без аутентификации
CWE-476
Затронутые продукты
Node-qsNode-qsNode-qsNode-qs
Вектор CVSS
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Хронология
2026-01-01
Опубликована
2026-01-01
Обновлена
Разбор CVSS 3.1
Вектор атаки
AV: N
Сеть (N)
Сложность атаки
AC: L
Низкая (L)
Требования к атаке
AT: P
Present
Требуемые привилегии
PR: N
Отсутствуют (N)
Взаимодействие с пользователем
UI: N
Отсутствует (N)
Конфиденциальность уязвимой системы
VC: N
Отсутствует (N)
Целостность уязвимой системы
VI: N
Отсутствует (N)
Доступность уязвимой системы
VA: L
Низкое (L)
Конфиденциальность последующей системы
SC: N
Отсутствует (N)
Целостность последующей системы
SI: N
Отсутствует (N)
Доступность последующей системы
SA: N
Отсутствует (N)
Зрелость эксплойт-кода
E: X
Not Defined
Требование конфиденциальности
CR: X
Not Defined
Требование целостности
IR: X
Not Defined
Требование доступности
AR: X
Not Defined
Модифицированный вектор атаки
MAV: X
Not Defined
Модифицированная сложность атаки
MAC: X
Not Defined
Модифицированные требования к атаке
MAT: X
Not Defined
Модифицированные требуемые привилегии
MPR: X
Not Defined
Модифицированное взаимодействие с пользователем
MUI: X
Not Defined
Модифицированная конфиденциальность уязвимой системы
MVC: X
Not Defined
Модифицированная целостность уязвимой системы
MVI: X
Not Defined
Модифицированная доступность уязвимой системы
MVA: X
Not Defined
Модифицированная конфиденциальность последующей системы
MSC: X
Not Defined
Модифицированная целостность последующей системы
MSI: X
Not Defined
Модифицированная доступность последующей системы
MSA: X
Not Defined
s
S: X
X
au
AU: X
X
r
R: X
X
v
V: X
X
re
RE: X
X
u
U: X
X
Индикаторы эксплуатации
EPSS
0.004 · p26
Известна эксплуатация (KEV)
Нет
Проверки Сканер-ВС
Проверок Сканер-ВС для этой уязвимости в базе пока нет.
Затронутые продукты
ПродуктВендорСтатус
node-qsОтслеживается
node-qsОтслеживается
node-qsОтслеживается
node-qsОтслеживается