<?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>Mon, 05 Oct 2026 15:09:06 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-278516</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-278516</link>
      <description>EUVD-2026-278516</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-278516</guid>
    </item>
    <item>
      <title>fkie_cve-2026-34604</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-34604</link>
      <description>&lt;p&gt;Tina is a headless content management system. Prior to version 2.2.2, @tinacms/graphql uses string-based path containment checks in FilesystemBridge. That blocks plain ../ traversal, but it does not resolve symlink or junction targets. If a symlink/junction already exists under the allowed content root, a path like content/posts/pivot/owned.md is still considered &amp;#34;inside&amp;#34; the base even though the real filesystem target can be outside it. As a result, FilesystemBridge.get(), put(), delete(), and glob() can operate on files outside the intended root. This issue has been patched in version 2.2.2.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Tina is a headless content management system. Prior to version 2.2.2, @tinacms/graphql uses string-based path containment checks in FilesystemBridge. That blocks plain ../ traversal, but it does not resolve symlink or junction targets. If a symlink/junction already exists under the allowed content root, a path like content/posts/pivot/owned.md is still considered &amp;#34;inside&amp;#34; the base even though the real filesystem target can be outside it. As a result, FilesystemBridge.get(), put(), delete(), and glob() can operate on files outside the intended root. This issue has been patched in version 2.2.2.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-34604</guid>
    </item>
    <item>
      <title>GHSA-g9c2-gf25-3x67 — @tinacms/graphql's `FilesystemBridge` Path Validation Can Be Bypassed via Symlinks or Junctions</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-g9c2-gf25-3x67</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @tinacms/graphql&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`@tinacms/graphql` uses string-based path containment checks in `FilesystemBridge`:&lt;/p&gt;
&lt;p&gt;- `path.resolve(path.join(baseDir, filepath))`
- `startsWith(resolvedBase + path.sep)`&lt;/p&gt;
&lt;p&gt;That blocks plain `../` traversal, but it does not resolve symlink or junction targets. If a symlink/junction already exists under the allowed content root, a path like `content/posts/pivot/owned.md` is still considered &amp;#34;inside&amp;#34; the base even though the real filesystem target can be outside it.&lt;/p&gt;
&lt;p&gt;As a result, `FilesystemBridge.get()`, `put()`, `delete()`, and `glob()` can operate on files outside the intended root.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The current bridge validation is:&lt;/p&gt;
&lt;p&gt;```ts
function assertWithinBase(filepath: string, baseDir: string): string {
  const resolvedBase = path.resolve(baseDir);
  const resolved = path.resolve(path.join(baseDir, filepath));
  if (
    resolved !== resolvedBase &amp;amp;&amp;amp;
    !resolved.startsWith(resolvedBase + path.sep)
  ) {
    throw new Error(
      `Path traversal detected: &amp;#34;${filepath}&amp;#34; escapes the base directory`
    );
  }
  return resolved;
}
```&lt;/p&gt;
&lt;p&gt;But the bridge then performs real filesystem I/O on the resulting path:&lt;/p&gt;
&lt;p&gt;```ts
public async get(filepath: string) {
  const resolved = assertWithinBase(filepath, this.outputPath);
  return (await fs.readFile(resolved)).toString();
}&lt;/p&gt;
&lt;p&gt;public async put(filepath: string, data: string, basePathOverride?: string) {
  const basePath = basePathOverride || this.outputPath;
  const resolved = assertWithinBase(filepath, basePath);
  await f…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: @tinacms/graphql&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`@tinacms/graphql` uses string-based path containment checks in `FilesystemBridge`:&lt;/p&gt;
&lt;p&gt;- `path.resolve(path.join(baseDir, filepath))`
- `startsWith(resolvedBase + path.sep)`&lt;/p&gt;
&lt;p&gt;That blocks plain `../` traversal, but it does not resolve symlink or junction targets. If a symlink/junction already exists under the allowed content root, a path like `content/posts/pivot/owned.md` is still considered &amp;#34;inside&amp;#34; the base even though the real filesystem target can be outside it.&lt;/p&gt;
&lt;p&gt;As a result, `FilesystemBridge.get()`, `put()`, `delete()`, and `glob()` can operate on files outside the intended root.&lt;/p&gt;
&lt;p&gt;## Details&lt;/p&gt;
&lt;p&gt;The current bridge validation is:&lt;/p&gt;
&lt;p&gt;```ts
function assertWithinBase(filepath: string, baseDir: string): string {
  const resolvedBase = path.resolve(baseDir);
  const resolved = path.resolve(path.join(baseDir, filepath));
  if (
    resolved !== resolvedBase &amp;amp;&amp;amp;
    !resolved.startsWith(resolvedBase + path.sep)
  ) {
    throw new Error(
      `Path traversal detected: &amp;#34;${filepath}&amp;#34; escapes the base directory`
    );
  }
  return resolved;
}
```&lt;/p&gt;
&lt;p&gt;But the bridge then performs real filesystem I/O on the resulting path:&lt;/p&gt;
&lt;p&gt;```ts
public async get(filepath: string) {
  const resolved = assertWithinBase(filepath, this.outputPath);
  return (await fs.readFile(resolved)).toString();
}&lt;/p&gt;
&lt;p&gt;public async put(filepath: string, data: string, basePathOverride?: string) {
  const basePath = basePathOverride || this.outputPath;
  const resolved = assertWithinBase(filepath, basePath);
  await f…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-g9c2-gf25-3x67</guid>
    </item>
  </channel>
</rss>
