VDB
EN
CRITICAL 9.4

GHSA-p63j-vcc4-9vmv

@vitest/browser: Browser Mode provider commands bypass the file-access permission gate

빠른 조치

GHSA-p63j-vcc4-9vmv — @vitest/browser: 아래 명령으로 수정 버전으로 올리세요.

npm install @vitest/browser@4.1.10

상세

## Summary

Browser Mode exposes a set of built-in "commands" that run on the Node.js side of the test runner and can touch the local filesystem (taking screenshots, managing Playwright traces, uploading files for `<input type="file">`, comparing screenshots).

Several of these commands accept a file path from the browser and act on it without checking the `allowWrite` permission gate and without confining the path to the project directory. A client that can reach the Browser Mode API can therefore read, create, overwrite, or delete files anywhere the Vitest process can access, even when `allowWrite` is `false`.

This matters most when the Browser Mode API is exposed to the network (for example `test.api.host` is set, or the dev server is reachable from another machine or origin). In that configuration `allowWrite` defaults to `false` precisely to block file access, and these commands bypass that protection. On a default localhost-only setup with trusted test code, there is no untrusted party in a position to exploit it. The gap still matters wherever you rely on `allowWrite: false` to contain untrusted test code, because these commands ignore that flag.

## Affected commands and impact

| Command | Operation | Impact | |---|---|---| | `upload` (Playwright + WebdriverIO) | Read | Arbitrary local file read; contents are loaded into the page and readable by test code. Highest-impact case. | | `takeScreenshot` (Playwright + WebdriverIO) | Write | Writes a PNG to an arbitrary path (absolute path used verbatim), creating parent directories. | | `screenshotMatcher` | Write | Writes reference/diff PNGs; directory derived from client path allows partial traversal. | | `stopChunkTrace` | Write | Writes a Playwright trace `.zip` to a path escapable via `../` in the trace name. | | `deleteTracing` | Delete | Deletes arbitrary files by path. | | `annotateTraces` | Read (disclosure) | Records a client-controlled attachment path that the reporter copies into the attachments directory, disclosing file contents. |

The writes do not let an attacker choose the file contents (they produce PNG images or trace archives), so the integrity impact is creating, overwriting, or deleting a file at an arbitrary path rather than writing a chosen payload. The reads (`upload`, `annotateTraces`) are more serious because they expose the full contents of an arbitrary file.

The fix adds, to every file-touching provider command, an `allowWrite` check for write/delete operations and path confinement to the project root (matching the existing `fs` command pattern), so client-supplied absolute paths and `../` traversal are rejected.

이 버전이 영향받나요?

사용 중인 패키지 버전을 입력하면 즉시 평가합니다.

영향 패키지

npm / @vitest/browser
최초 영향 버전: 4.0.0 수정 버전: 4.1.10
수정 npm install @vitest/browser@4.1.10
npm / @vitest/browser
최초 영향 버전: 0 수정 버전: 3.2.7
수정 npm install @vitest/browser@3.2.7
npm / @vitest/browser
최초 영향 버전: 5.0.0-beta.1 수정 버전: 5.0.0-beta.6
수정 npm install @vitest/browser@5.0.0-beta.6

참고