<?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>Sat, 10 Oct 2026 20:07:41 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-108261</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-108261</link>
      <description>&lt;p&gt;Tina is a headless content management system. Prior to tinacms 3.14.0 and @tinacms/app 2.5.14, the /~/* admin preview route in packages/tinacms/src/admin/index.tsx can turn an attacker-controlled hash-router splat into an off-origin iframe URL through packages/@tinacms/app/src/preview.tsx, while packages/@tinacms/app/src/lib/preview-origin.ts derives expectedOrigin from that same URL for the GraphQL message channel in packages/@tinacms/app/src/lib/graphql-reducer.ts. An unauthenticated attacker can send a crafted link to a signed-in editor, cause the admin to frame an attacker origin, and have that frame treated as the trusted preview. The attacker-controlled frame can submit GraphQL reads or mutations that the admin executes with the editor credentials, exposing or modifying protected content. This issue is fixed in tinacms 3.14.0 and @tinacms/app 2.5.14.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Tina is a headless content management system. Prior to tinacms 3.14.0 and @tinacms/app 2.5.14, the /~/* admin preview route in packages/tinacms/src/admin/index.tsx can turn an attacker-controlled hash-router splat into an off-origin iframe URL through packages/@tinacms/app/src/preview.tsx, while packages/@tinacms/app/src/lib/preview-origin.ts derives expectedOrigin from that same URL for the GraphQL message channel in packages/@tinacms/app/src/lib/graphql-reducer.ts. An unauthenticated attacker can send a crafted link to a signed-in editor, cause the admin to frame an attacker origin, and have that frame treated as the trusted preview. The attacker-controlled frame can submit GraphQL reads or mutations that the admin executes with the editor credentials, exposing or modifying protected content. This issue is fixed in tinacms 3.14.0 and @tinacms/app 2.5.14.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-108261</guid>
    </item>
    <item>
      <title>GHSA-x34j-47hf-4xg7 — TinaCMS admin preview iframe loads an attacker-controlled origin from the URL fragment</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-x34j-47hf-4xg7</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: tinacms, npm: @tinacms/app&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The TinaCMS admin builds its preview `&amp;lt;iframe src&amp;gt;` from the `/~/*` hash-router splat without checking that the value stays same-origin. A fragment with a doubled slash (`#/~//attacker.example/p`) becomes the protocol-relative URL `//attacker.example/p`, so the admin frames an external site. That same unvalidated string derives `expectedOrigin`, the only trust anchor for the admin↔preview `postMessage` channel, so the attacker&amp;#39;s frame is treated as trusted: it can submit any GraphQL operation, which the admin executes with the signed-in editor&amp;#39;s token and posts back to the attacker&amp;#39;s origin.&lt;/p&gt;
&lt;p&gt;One link, opened by a logged-in editor, gives an unauthenticated remote attacker arbitrary read and write access to the site&amp;#39;s content API as that editor.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Root cause — the router splat becomes the frame source with no same-origin check:&lt;/p&gt;
&lt;p&gt;```
packages/tinacms/src/admin/index.tsx:16     HashRouter as Router,
packages/tinacms/src/admin/index.tsx:329      path=&amp;#39;/~/*&amp;#39;
packages/tinacms/src/admin/index.tsx:173    const [url, setURL] = React.useState(`/${params[&amp;#39;*&amp;#39;]}`);
packages/tinacms/src/admin/index.tsx:176    const paramURL = `/${params[&amp;#39;*&amp;#39;]}`;
packages/@tinacms/app/src/preview.tsx:24        src={props.url}
```&lt;/p&gt;
&lt;p&gt;The leading `/` is meant to force a relative path, but `react-router-dom@6.30.3` returns the splat with its own leading slash for `/~//x`, producing `//x`. The iframe has no `sandbox` attribute and the admin bundle ships no CSP.&lt;/p&gt;
&lt;p&gt;The trust anchor is then c…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: tinacms, npm: @tinacms/app&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The TinaCMS admin builds its preview `&amp;lt;iframe src&amp;gt;` from the `/~/*` hash-router splat without checking that the value stays same-origin. A fragment with a doubled slash (`#/~//attacker.example/p`) becomes the protocol-relative URL `//attacker.example/p`, so the admin frames an external site. That same unvalidated string derives `expectedOrigin`, the only trust anchor for the admin↔preview `postMessage` channel, so the attacker&amp;#39;s frame is treated as trusted: it can submit any GraphQL operation, which the admin executes with the signed-in editor&amp;#39;s token and posts back to the attacker&amp;#39;s origin.&lt;/p&gt;
&lt;p&gt;One link, opened by a logged-in editor, gives an unauthenticated remote attacker arbitrary read and write access to the site&amp;#39;s content API as that editor.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;Root cause — the router splat becomes the frame source with no same-origin check:&lt;/p&gt;
&lt;p&gt;```
packages/tinacms/src/admin/index.tsx:16     HashRouter as Router,
packages/tinacms/src/admin/index.tsx:329      path=&amp;#39;/~/*&amp;#39;
packages/tinacms/src/admin/index.tsx:173    const [url, setURL] = React.useState(`/${params[&amp;#39;*&amp;#39;]}`);
packages/tinacms/src/admin/index.tsx:176    const paramURL = `/${params[&amp;#39;*&amp;#39;]}`;
packages/@tinacms/app/src/preview.tsx:24        src={props.url}
```&lt;/p&gt;
&lt;p&gt;The leading `/` is meant to force a relative path, but `react-router-dom@6.30.3` returns the splat with its own leading slash for `/~//x`, producing `//x`. The iframe has no `sandbox` attribute and the admin bundle ships no CSP.&lt;/p&gt;
&lt;p&gt;The trust anchor is then c…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-x34j-47hf-4xg7</guid>
    </item>
  </channel>
</rss>
