Ad

CVE-2026-84373

MEDIUM CVSS 3.1: 5,9 EPSS 0.38%
Обновлено 10 сентября 2026
Vitest
Параметр Значение
CVSS 5,9 (MEDIUM)
Тип уязвимости CWE-22 (Обход пути)
Поставщик Vitest
Публичный эксплойт Нет

Vitest — это платформа тестирования на базе Vite. С версий 2.1.0 до 4.1.11 и 5.0.0-rc.2 общедоступный плагин mockerPlugin и автономный плагин interceptorPlugin, экспортируемые в packages/mocker/src/node/interceptorPlugin.ts, регистрируют обработчик vitest:interceptor:register на неаутентифицированном HMR WebSocket Vite без проверки целей перенаправления по списку разрешений файловой службы. Реализация обрабатывает event.redirect без принудительного применения server.fs.allow и server.fs.deny через isFileLoadingAllowed.

Удаленный клиент, который может связаться с открытым сервером разработки, может отправить непрозрачную схему URL-адресов, сохраняющую сегменты .., в результате чего соединение join(server.config.root, redirectUrl.pathname) будет разрешаться за пределами корня проекта. Затем крючок загрузки плагина возвращает readFile(mock.redirect, 'utf-8') в качестве источника модуля, раскрывая локальные файлы, доступные для чтения процессом dev-сервера. В режиме браузера Vitest используется RPC с аутентификацией по токену и по умолчанию не выполняется удаленная аутентификация, хотя на этом пути отсутствовала та же проверка границ.

Эта проблема исправлена ​​в версиях 4.1.11 и 5.0.0-rc.2.

Показать оригинальное описание (EN)

Vitest is a testing framework powered by Vite. From 2.1.0 until 4.1.11 and 5.0.0-rc.2, the public mockerPlugin and standalone interceptorPlugin exports in packages/mocker/src/node/interceptorPlugin.ts register the vitest:interceptor:register handler on Vite's unauthenticated HMR WebSocket without validating redirect targets against the file-serving allowlist. The implementation processes event.redirect without enforcing server.fs.allow and server.fs.deny through isFileLoadingAllowed. A remote client that can reach an exposed development server can submit an opaque URL scheme preserving .. segments, causing join(server.config.root, redirectUrl.pathname) to resolve outside the project root. The plugin's load hook then returns readFile(mock.redirect, 'utf-8') as module source, disclosing local files readable by the dev-server process. Vitest browser mode uses a token-authenticated RPC and is not remotely unauthenticated by default, although the same boundary check was missing on that path. This issue is fixed in versions 4.1.11 and 5.0.0-rc.2.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Высокая
Сложно эксплуатировать
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Нет
Нет модификации данных
Доступность
Нет
Нет нарушения работы

Строка CVSS v3.1

Тип уязвимости (CWE)