<?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://cve.radiocsirt.org</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>Thu, 08 Oct 2026 11:31:14 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-53765 — chrome-devtools-mcp: daemon.pid write follows symlinks in /tmp fallback runtime directory</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-53765</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; ChromeDevTools chrome-devtools-mcp&lt;/p&gt;
&lt;p&gt;Chrome DevTools for agents (chrome-devtools-mcp) lets your coding agent control and inspect a live Chrome browser. From 0.20.0 until 1.1.0, The chrome-devtools-mcp daemon writes its PID file with fs.writeFileSync() to a deterministic runtime path. On typical macOS environments, and on Linux sessions where $XDG_RUNTIME_DIR is unset, that runtime path falls back to /tmp/chrome-devtools-mcp-&amp;lt;uid&amp;gt;/daemon.pid. Because the write does not use O_NOFOLLOW, a local low-privilege user on the same POSIX host can pre-create /tmp/chrome-devtools-mcp-&amp;lt;victim_uid&amp;gt;/daemon.pid as a symlink to a file writable by the victim. When the victim later starts daemon mode, fs.writeFileSync() follows the symlink and truncates the target file to the daemon PID string. This vulnerability is fixed in  1.1.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; ChromeDevTools chrome-devtools-mcp&lt;/p&gt;
&lt;p&gt;Chrome DevTools for agents (chrome-devtools-mcp) lets your coding agent control and inspect a live Chrome browser. From 0.20.0 until 1.1.0, The chrome-devtools-mcp daemon writes its PID file with fs.writeFileSync() to a deterministic runtime path. On typical macOS environments, and on Linux sessions where $XDG_RUNTIME_DIR is unset, that runtime path falls back to /tmp/chrome-devtools-mcp-&amp;lt;uid&amp;gt;/daemon.pid. Because the write does not use O_NOFOLLOW, a local low-privilege user on the same POSIX host can pre-create /tmp/chrome-devtools-mcp-&amp;lt;victim_uid&amp;gt;/daemon.pid as a symlink to a file writable by the victim. When the victim later starts daemon mode, fs.writeFileSync() follows the symlink and truncates the target file to the daemon PID string. This vulnerability is fixed in  1.1.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-53765</guid>
    </item>
    <item>
      <title>GHSA-3pvj-jv98-qhjq — Chrome DevTools for agents: daemon.pid write follows symlinks in /tmp fallback runtime directory</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-3pvj-jv98-qhjq</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: chrome-devtools-mcp&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The chrome-devtools-mcp daemon writes its PID file with `fs.writeFileSync()` to a deterministic runtime path. On typical macOS environments, and on Linux sessions where `$XDG_RUNTIME_DIR` is unset, that runtime path falls back to `/tmp/chrome-devtools-mcp-&amp;lt;uid&amp;gt;/daemon.pid`.&lt;/p&gt;
&lt;p&gt;Because the write does not use `O_NOFOLLOW`, a local low-privilege user on the same POSIX host can pre-create `/tmp/chrome-devtools-mcp-&amp;lt;victim_uid&amp;gt;/daemon.pid` as a symlink to a file writable by the victim. When the victim later starts daemon mode, `fs.writeFileSync()` follows the symlink and truncates the target file to the daemon PID string.&lt;/p&gt;
&lt;p&gt;This report is deliberately scoped to POSIX systems where the daemon falls back to `/tmp`: typical macOS environments and Linux sessions without `$XDG_RUNTIME_DIR`. Windows is out of scope because the default temp directory is per-user and symlink creation has additional privilege requirements.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Affected code:&lt;/p&gt;
&lt;p&gt;`src/daemon/daemon.ts:38-42`&lt;/p&gt;
&lt;p&gt;```ts
const pidFilePath = getPidFilePath(sessionId);
fs.mkdirSync(path.dirname(pidFilePath), {
  recursive: true,
});
fs.writeFileSync(pidFilePath, process.pid.toString());
```&lt;/p&gt;
&lt;p&gt;`src/daemon/utils.ts:49-68`&lt;/p&gt;
&lt;p&gt;```ts
export function getRuntimeHome(sessionId: string): string {
  const platform = os.platform();
  const uid = os.userInfo().uid;
  const suffix = sessionId ? `-${sessionId}` : &amp;#39;&amp;#39;;
  const appName = APP_NAME + suffix;&lt;/p&gt;
&lt;p&gt;if (process.env.XDG_RUNTIME_DIR) {
    return path.join(process.env.XDG_RUN…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: chrome-devtools-mcp&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The chrome-devtools-mcp daemon writes its PID file with `fs.writeFileSync()` to a deterministic runtime path. On typical macOS environments, and on Linux sessions where `$XDG_RUNTIME_DIR` is unset, that runtime path falls back to `/tmp/chrome-devtools-mcp-&amp;lt;uid&amp;gt;/daemon.pid`.&lt;/p&gt;
&lt;p&gt;Because the write does not use `O_NOFOLLOW`, a local low-privilege user on the same POSIX host can pre-create `/tmp/chrome-devtools-mcp-&amp;lt;victim_uid&amp;gt;/daemon.pid` as a symlink to a file writable by the victim. When the victim later starts daemon mode, `fs.writeFileSync()` follows the symlink and truncates the target file to the daemon PID string.&lt;/p&gt;
&lt;p&gt;This report is deliberately scoped to POSIX systems where the daemon falls back to `/tmp`: typical macOS environments and Linux sessions without `$XDG_RUNTIME_DIR`. Windows is out of scope because the default temp directory is per-user and symlink creation has additional privilege requirements.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Affected code:&lt;/p&gt;
&lt;p&gt;`src/daemon/daemon.ts:38-42`&lt;/p&gt;
&lt;p&gt;```ts
const pidFilePath = getPidFilePath(sessionId);
fs.mkdirSync(path.dirname(pidFilePath), {
  recursive: true,
});
fs.writeFileSync(pidFilePath, process.pid.toString());
```&lt;/p&gt;
&lt;p&gt;`src/daemon/utils.ts:49-68`&lt;/p&gt;
&lt;p&gt;```ts
export function getRuntimeHome(sessionId: string): string {
  const platform = os.platform();
  const uid = os.userInfo().uid;
  const suffix = sessionId ? `-${sessionId}` : &amp;#39;&amp;#39;;
  const appName = APP_NAME + suffix;&lt;/p&gt;
&lt;p&gt;if (process.env.XDG_RUNTIME_DIR) {
    return path.join(process.env.XDG_RUN…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-3pvj-jv98-qhjq</guid>
    </item>
  </channel>
</rss>
