TinaCMS admin: Iframe origin trust bypass in admin preview route
Summary
The admin preview route of TinaCMS loads the preview iframe from a path taken from the URL fragment and derives the trusted origin for its message channel from that same URL. A crafted link can make the admin frame an attacker-controlled origin and treat it as the trusted preview. An unauthenticated attacker who gets a signed-in editor to open such a link can then have the frame submit GraphQL reads or mutations, which the admin executes with the editor's credentials.
Affected
- tinacms before 3.14.0
- @tinacms/app before 2.5.14
- The lower bound of the affected range is unknown.
Fixed in
- tinacms 3.14.0
- @tinacms/app 2.5.14
Workaround
- No official vendor workaround. Upgrading is the fix.
- Until upgraded, do not open unexpected links to the TinaCMS admin while signed in.
Exploitation
- Exploitation in the wild: Unknown.
- CISA SSVC: Exploitation 'poc', Automatable 'no', Technical Impact 'total'.
- Public proof of concept: none confirmed.
Our recommendation
- Inventory all TinaCMS projects and check the tinacms and @tinacms/app versions in lockfiles.
- Upgrade to tinacms 3.14.0 and @tinacms/app 2.5.14 or later.
- Warn editors not to click unexpected links to the admin while signed in.
- Check the vendor advisory for updates, as third-party sources disagree on version ranges.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- CVE record and OSV entry osv.dev
- GitHub security advisory GHSA-x34j-47hf-4xg7 github.com
- Fix commit b57dbf4 github.com
- Pull request #7522 github.com
- Release tinacms 3.14.0 github.com
- Release @tinacms/app 2.5.14 github.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 31 Oct 2026, 02:37.
Original description (NVD)
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.
NVD references (6)
- https://github.com/tinacms/tinacms/commit/b57dbf4b56201aef15cd92caa49fd12ab96bbecf
- https://github.com/tinacms/tinacms/pull/7522
- https://github.com/tinacms/tinacms/releases/tag/@tinacms/app@2.5.14
- https://github.com/tinacms/tinacms/releases/tag/tinacms@3.14.0
- https://github.com/tinacms/tinacms/security/advisories/GHSA-x34j-47hf-4xg7
- https://github.com/tinacms/tinacms/security/advisories/GHSA-x34j-47hf-4xg7
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
