[ CVE-2026-108261 · Published 9 Oct 2026 ]
TinaCMS admin preview iframe loads an attacker-controlled origin from the URL fragment
[ Why it matters ]Priority signals
- Public proof-of-concept exploit exists (CISA SSVC)
- Critical severity: CVSS 9.3
[ Description ]Official description
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.
[ Fixes ]Fixes and patches
- tinacms 3.14.0Fixed version · GitHub Advisories · npm package tinacms: upgrade to 3.14.0 or later (affected <= 3.13.0)
- @tinacms/app 2.5.14Fixed version · GitHub Advisories · npm package @tinacms/app: upgrade to 2.5.14 or later (affected <= 2.5.13)
[ Packages ]Affected open-source packages
- tinacms npmAffected <= 3.13.0 · fixed in 3.14.0 · GHSA-x34j-47hf-4xg7
- @tinacms/app npmAffected <= 2.5.13 · fixed in 2.5.14 · GHSA-x34j-47hf-4xg7