<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://vulnerability.circl.lu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Tue, 29 Sep 2026 07:18:18 +0000</lastBuildDate>
    <item>
      <title>CLEANSTART-2026-BX79488 — Vitest is a testing framework powered by Vite</title>
      <link>https://vulnerability.circl.lu/vuln/cleanstart-2026-bx79488</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; CleanStart: qdrant&lt;/p&gt;
&lt;p&gt;Security vulnerability affects the qdrant package. Vitest is a testing framework powered by Vite.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; CleanStart: qdrant&lt;/p&gt;
&lt;p&gt;Security vulnerability affects the qdrant package. Vitest is a testing framework powered by Vite.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cleanstart-2026-bx79488</guid>
    </item>
    <item>
      <title>fkie_cve-2026-84373</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-84373</link>
      <description>&lt;p&gt;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&amp;#39;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&amp;#39;s load hook then returns readFile(mock.redirect, &amp;#39;utf-8&amp;#39;) 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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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&amp;#39;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&amp;#39;s load hook then returns readFile(mock.redirect, &amp;#39;utf-8&amp;#39;) 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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-84373</guid>
    </item>
    <item>
      <title>GHSA-82fw-gwwq-j7x9 — Vitest: Path Traversal / Arbitrary File Read via @vitest/mocker Redirect Mock</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-82fw-gwwq-j7x9</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @vitest/mocker, npm: vitest&lt;/p&gt;
&lt;p&gt;## Summary
`@vitest/mocker` registers a redirect mock&amp;#39;s target path without validating it
against the dev server&amp;#39;s file-serving allowlist. An attacker who can reach the
dev server&amp;#39;s WebSocket can register a redirect mock pointing outside the project
root; when the mocked module is requested, the plugin&amp;#39;s `load` hook returns
`readFile(&amp;lt;attacker path&amp;gt;)` as the module source, disclosing local files.&lt;/p&gt;
&lt;p&gt;This is exploitable **without authentication** only through the public
`mockerPlugin` / standalone `interceptorPlugin` exports (used by third-party dev
servers), which register the handler on Vite&amp;#39;s unauthenticated HMR socket.
Vitest&amp;#39;s own browser mode registers mocks over a **token-authenticated** RPC and
is not remotely reachable by default (see Scope).&lt;/p&gt;
&lt;p&gt;## Affected code
`packages/mocker/src/node/interceptorPlugin.ts`.&lt;/p&gt;
&lt;p&gt;The `load` hook is the file-read sink:&lt;/p&gt;
&lt;p&gt;```ts
if (mock.type === &amp;#39;redirect&amp;#39;) {
  return readFile(mock.redirect, &amp;#39;utf-8&amp;#39;)
}
```&lt;/p&gt;
&lt;p&gt;`mock.redirect` is derived from client input at registration time with no
boundary check:&lt;/p&gt;
&lt;p&gt;```ts
if (event.type === &amp;#39;redirect&amp;#39;) {
  const redirectUrl = new URL(event.redirect)
  event.redirect = join(server.config.root, redirectUrl.pathname)
}
registry.register(event)
```&lt;/p&gt;
&lt;p&gt;There is no `server.fs.allow` / `server.fs.deny` check and no assertion that the
resolved path stays within the project root.&lt;/p&gt;
&lt;p&gt;## Registration paths and trust boundaries
- **Public `mockerPlugin` / `interceptorPlugin` (unauthenticated).** In
  `configureServer`, the plug…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @vitest/mocker, npm: vitest&lt;/p&gt;
&lt;p&gt;## Summary
`@vitest/mocker` registers a redirect mock&amp;#39;s target path without validating it
against the dev server&amp;#39;s file-serving allowlist. An attacker who can reach the
dev server&amp;#39;s WebSocket can register a redirect mock pointing outside the project
root; when the mocked module is requested, the plugin&amp;#39;s `load` hook returns
`readFile(&amp;lt;attacker path&amp;gt;)` as the module source, disclosing local files.&lt;/p&gt;
&lt;p&gt;This is exploitable **without authentication** only through the public
`mockerPlugin` / standalone `interceptorPlugin` exports (used by third-party dev
servers), which register the handler on Vite&amp;#39;s unauthenticated HMR socket.
Vitest&amp;#39;s own browser mode registers mocks over a **token-authenticated** RPC and
is not remotely reachable by default (see Scope).&lt;/p&gt;
&lt;p&gt;## Affected code
`packages/mocker/src/node/interceptorPlugin.ts`.&lt;/p&gt;
&lt;p&gt;The `load` hook is the file-read sink:&lt;/p&gt;
&lt;p&gt;```ts
if (mock.type === &amp;#39;redirect&amp;#39;) {
  return readFile(mock.redirect, &amp;#39;utf-8&amp;#39;)
}
```&lt;/p&gt;
&lt;p&gt;`mock.redirect` is derived from client input at registration time with no
boundary check:&lt;/p&gt;
&lt;p&gt;```ts
if (event.type === &amp;#39;redirect&amp;#39;) {
  const redirectUrl = new URL(event.redirect)
  event.redirect = join(server.config.root, redirectUrl.pathname)
}
registry.register(event)
```&lt;/p&gt;
&lt;p&gt;There is no `server.fs.allow` / `server.fs.deny` check and no assertion that the
resolved path stays within the project root.&lt;/p&gt;
&lt;p&gt;## Registration paths and trust boundaries
- **Public `mockerPlugin` / `interceptorPlugin` (unauthenticated).** In
  `configureServer`, the plug…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-82fw-gwwq-j7x9</guid>
    </item>
  </channel>
</rss>
