Практическая защитная инструкция для Vitest Browser и ghsa-g8mr-85jm-7xhm: как сопоставить runtime с официальной границей версий, провести один ограниченный обратимый тест и передать владельцу проверяемый результат без опасного payload.
Граница применимости Vitest Browser
Начинать нужно не с воспроизведения дефекта, а с применимости. Reviewed advisory ghsa-g8mr-85jm-7xhm описывает отдельный механизм: открытый Browser Mode API мог проксировать CDP или позволять изменение конфигурационных файлов. Зафиксированные package ranges: @vitest/browser: >= 5.0.0-beta.0, <= 5.0.0-beta.3; first patched 5.0.0-beta.4; @vitest/browser: >= 4.0.0, <= 4.1.7; first patched 4.1.8; @vitest/browser: >= 3.0.0, <= 3.2.4; first patched 3.2.5; vite-plus: <= 0.1.23; first patched 0.1.24. Package manager, SBOM и lockfile показывают заявленную зависимость, но решение принимают по реально загруженному artifact: сохраняют версию, checksum или digest и команду получения этого значения. Если компонента нет, статус not-applicable. Если он найден, но путь не активен, ставят affected-unverified. Новая запись в lockfile при старом процессе означает patched-unverified. Backport признают только после сопоставления upstream change и сборочного происхождения. Дата обновления 2026-08-13 объясняет, почему карточка проверяется сейчас; она ничего не сообщает о конкретном сервере читателя.
Baseline и доказательства до изменения Vitest Browser
До обновления составляют короткий снимок: версию @vitest/browser, bind address, firewall namespace, Browser Mode flags, test config checksum, CDP endpoint и дерево процессов runner. Каждое поле получает значение fact, not-applicable или unknown; пустое поле не трактуется как безопасность. Отдельно сохраняют health, владельца остановки, допустимый resource budget, checksum конфигурации и обратимый план. Смешанные версии разбивают по процессам, контейнерам или узлам, потому что средняя версия скрывает старый runtime. В отчёт не переносят tokens, cookies, credentials, реальные адреса, содержимое пользовательских данных, приватные логи и домашние пути. Для этой темы baseline нужен, чтобы отличить механизм ghsa-g8mr-85jm-7xhm от прежней ошибки настройки, proxy, cache или dependency drift. Если health уже красный, сначала закрывают прежний инцидент и не приписывают его текущему update.
Один ограниченный опыт для Vitest Browser
После обновления выполняют только заранее ограниченный опыт: запустить пустой test project в сетевом namespace и сделать один неавторизованный запрос из соседнего локального процесса без команд и file payload. Проверка проходит в disposable VM, контейнере, tempfs, копии базы или отдельном namespace в зависимости от продукта; общий production объект в неё не входит. Схема A/B/A2 обязательна: обычное действие A, один безопасный граничный случай B, затем повтор обычного действия A2. Между шагами не меняют одновременно dependency, права, network и storage. Ввод содержит только canary и не включает рабочий exploit, приватные сведения или чужой сервис. Ожидаемый исход записан до запуска: API недоступен или отклоняет запрос, CDP не проксируется, checksum config прежний, штатный test run завершается. Timeout, crash, необъяснимый 500, новый побочный объект или потеря health — не подтверждение исправления, а failed-safe-check.
Матрица решения по ghsa-g8mr-85jm-7xhm
Результат оценивают по наблюдаемой границе, а не по отсутствию exception. Для Vitest Browser passed-bounded-check допустим только когда API недоступен или отклоняет запрос, CDP не проксируется, checksum config прежний, штатный test run завершается. В строке решения должны совпасть artifact digest, активность функции, A/B/A2, health после cleanup и версия из официальной границы. Контролируемый отказ должен соответствовать механизму advisory: validation, authorization, bounds, resource limit или protocol policy. Пустой ответ, ручная правка после B, старый процесс при новом файле или различие между узлами оставляют unknown. Статусы ограничены набором not-applicable, update-required, patched-unverified, passed-bounded-check, failed-safe-check и unknown. Даже passed относится только к указанной конфигурации и времени; он не является общей оценкой безопасности Vitest Browser и не заменяет дальнейший мониторинг.
Стоп-линия, возврат и пакет владельцу Vitest Browser
Проверку прекращают сразу, если runner слушает внешний интерфейс, нужен публичный порт, требуется отправка команды CDP или общий CI workspace. После стопа не повышают нагрузку, права, глубину входа или длительность. Запланированный возврат: удалить namespace и test project, закрыть listener, вернуть config из version control и повторить обычный test run. Cleanup считается завершённым после повторного baseline, нулевого diff вне тестового объекта и закрытия временных sessions, listeners, handles, processes или credentials. Владельцу передают только минимизированный пакет: версия Vitest, bind address category, listener table, status неавторизованного запроса, checksums до/после, process tree и cleanup marker. Добавляют время, ожидаемый и фактический исход, две прямые ссылки ниже и ответственного за cleanup. Полные дампы, секреты, реальные payload и сведения о чужой инфраструктуре исключают. Материал описывает безопасный путь проверки; он не утверждает, что тест уже выполнен на системе читателя, и не обещает отсутствие других дефектов, индексацию страницы или поисковые позиции.
Материал подготовлен редакцией VOne с помощью ИИ по открытым официальным и первичным источникам; факты, даты, версии и ссылки перепроверены. Реальные пользовательские данные, активные опасные payload и вымышленные результаты тестов не использовались.
Источники и проверка
- GitHub Advisory Database GHSA-g8mr-85jm-7xhm по Vitest Browser проверено 2026-08-30
- Прямая upstream-страница Vitest Browser проверено 2026-08-30
Информация актуальна на дату публикации. Правила сервисов, приложений и сетей могут меняться.