Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister any TinaCloud account
-
DeliveryObtain valid token for attacker's own app
-
ExploitSend request to victim endpoint with attacker clientID
-
ExecutionCross-tenant auth acceptance via IDOR
-
ImpactRead/upload/delete media and CRUD victim GraphQL content
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Requires a valid TinaCloud account (the attacker's own - any account suffices, PR:L) and a self-hosted Tina site that uses the vulnerable isAuthorized flow via TinaCloudBackendAuthProvider or the next-tinacms-azure media 'authorized' callback on versions @tinacms/auth < 1.1.4 or next-tinacms-azure < 15.0.1. The endpoint must be network-reachable and honor a request-supplied clientID. No victim account and no victim/user interaction are needed. Limiting factors: the attacker must hold a legitimate TinaCloud-verifiable token, and post-patch deployments fail closed if the site's own clientID (NEXT_PUBLIC_TINA_CLIENT_ID or an explicitly passed value) cannot be resolved at runtime, returning 401. |
| Impact | Multiple signals point to a genuine, elevated-priority authorization flaw rather than an inflated high-CVSS score. The vendor CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8) is internally consistent with the description: network-reachable API, low complexity, and only a low-privilege TinaCloud account (the attacker's own) required with no victim interaction. The root cause is a classic CWE-639 IDOR - isAuthorized trusts a request-controlled clientID and validates the bearer token against the attacker-selected TinaCloud app rather than the site's own configured app, so the attacker's legitimately verified status is accepted across the tenant boundary. Impact is broad (media list/read/upload/delete plus full GraphQL read/create/update/delete on victim content). Tempering the urgency: there is no CISA KEV listing, no public exploit code referenced, and no EPSS score provided, so this is 'no public exploit identified at time of analysis' - exploitation is plausible and technically simple but not yet observed or automated in the wild. The C:H/I:H/A:H impact is well-supported; A:H rests on the delete capability, which is defensible though A:L could be argued since it destroys content data rather than crashing the service. Net: prioritize patching for any self-hosted Tina deployment exposed to untrusted TinaCloud accounts, but treat active exploitation as unconfirmed. |
| Exploit ScenarioDerived | An attacker registers any ordinary TinaCloud account and obtains a valid bearer token for their own app. They send an authenticated request to a victim self-hosted Tina endpoint while supplying their own clientID (e.g. via the request query), causing isAuthorized/TinaCloudBackendAuthProvider or the next-tinacms-azure media callback to validate the token against the attacker's app and accept it for the victim tenant. No public exploit code is referenced, but the attack is low-complexity and requires no victim account or interaction. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 16, 2026
Cross-tenant authorization bypass in TinaCMS self-hosted deployments allows any holder of a legitimate TinaCloud account and its valid bearer token to read, create, update, delete, and manage media on a victim site without any victim account or interaction. The flaw affects @tinacms/auth before 1.1.4 and the next-tinacms-azure adapter before 15.0.1, where the server-side isAuthorized helper trusts a request-supplied clientID and therefore validates the attacker's token against the attacker's own TinaCloud app rather than the site's configured app (CWE-639, CVSS 8.8, PR:L). Exploitation is authenticated from the attacker's perspective - the attacker must already control a TinaCloud-verifiable token, so any TinaCloud account suffices - while no public exploit code was identified at time of analysis and the vendor has released patched versions.
RemediationAI
Apply the vendor-released patch by upgrading to @tinacms/auth 1.1.4 and/or next-tinacms-azure 15.0.1 (or a later release) per advisory GHSA-g74q-6g2f-874x; the fix is upstream PR tinacms/tinacms#7168, commit 0a927a4f8d228dd05ee7ca4be32899bc190e73af, and tags @tinacms/auth@1.1.4 and next-tinacms-azure@15.0.1. After upgrading, the authorization path fails closed and returns 401 unless the site's own clientID can be resolved at runtime, so self-hosted sites must ensure NEXT_PUBLIC_TINA_CLIENT_ID is present in the server runtime environment (not merely inlined at build time) or explicitly pass it, for example isAuthorized(req, process.env.NEXT_PUBLIC_TINA_CLIENT_ID) and TinaCloudBackendAuthProvider('your-site-client-id'), including the media-store authorized callbacks; the trade-off is that a misconfigured or build-time-only environment variable will break legitimate backend and media requests with 401s. Until patched, the practical compensating control is to stop trusting the caller-supplied clientID and hard-strip/ignore clientID query parameters at the authorization boundary, or to front the affected GraphQL and media endpoints with a proxy or gateway that terminates authentication against the site's own configured app ID; if that is not feasible, disabling TinaCloudBackendAuthProvider-backed GraphQL access and the affected media upload/delete route removes the exposure at the cost of disabling CMS editorial features. Note that authorization now being enforced against the site's own clientID means the attacker's cross-tenant token will be rejected regardless of the clientID they supply, so no residual workaround should re-introduce request-derived app selection.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 4 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
TinaCMS is a headless CMS whose self-hosted Next.js backends delegate authentication to TinaCloud: the @tinacms/auth package exposes isAuthorized(req), which extracts a bearer token plus a clientID from the request and asks TinaCloud whether that user is authorized for the named app. The vulnerable logic in packages/@tinacms/auth/src/index.ts and packages/next-tinacms-azure/src/auth.ts read the clientID from a request-controlled source (such as req.query.clientID) instead of the site's own configured identifier, which is the classic CWE-639 'Authorization Bypass Through User-Controlled Key' failure: the tenant key used for the authorization decision can be chosen by the caller. Because TinaCloud legitimately verifies the attacker's token against the attacker's own app, the response is a truthful 'authorized' that is then applied across the tenant boundary by TinaCloudBackendAuthProvider (GraphQL read/create/update/delete) and by the next-tinacms-azure media 'authorized' callback (media listing, reading, upload, deletion). The upstream fix introduces an optional expectedClientID parameter to isAuthorized - falling back to NEXT_PUBLIC_TINA_CLIENT_ID - passes the site's clientID through TinaCloudBackendAuthProvider, the Azure adapter, and the tinacms init template, and fails closed with a 401 when no site clientID can be resolved, as confirmed by the new tests asserting that req.query.clientID is ignored and that a blank/unresolvable clientID short-circuits before any fetch to TinaCloud occurs.
Know when Tinacms gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Network API, low complexity, attacker needs only their own low-privilege TinaCloud account (PR:L), no UI; grants full read (C:H), create/update (I:H) and delete (A:H) of victim content and media.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Tina is a headless content management system. Prior to @tinacms/auth 1.1.4 and next-tinacms-azure 15.0.1, isAuthorized accepts a request-controlled clientID and asks isUserAuthorized to validate the bearer token against that selected TinaCloud app instead of the self-hosted site's configured app. An attacker with any TinaCloud account can submit the attacker's own app ID and valid token to a victim endpoint, causing TinaCloudBackendAuthProvider or an affected media authorized callback to accept the attacker's verified status across the tenant boundary. The vulnerable logic is present in packages/@tinacms/auth/src/index.ts and packages/next-tinacms-azure/src/auth.ts. Successful exploitation permits media listing, reading, upload, or deletion and, when TinaCloudBackendAuthProvider is used, GraphQL read, create, update, and delete operations on the victim's content without a victim account or victim interaction. This vulnerability is fixed in @tinacms/auth 1.1.4 and next-tinacms-azure 15.0.1.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
A cross-tenant authorization flaw in self-hosted TinaCMS deployments allows anyone holding an ordinary TinaCloud account and its valid bearer token to read, create, update, and delete content and media on other organizations' sites without any credential or interaction from the victim. Affected content repositories and the published sites and assets they serve are therefore exposed to tampering or disclosure, and because the attacker's activity looks like normal authenticated CMS traffic it may go unnoticed for some time. No public exploit identified at time of analysis, but the low barrier to abuse and broad impact on content integrity make this a priority remediation item wherever editorial governance, regulatory content, or customer-facing pages depend on the CMS.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Remote code execution in TinaCMS affects versions prior to 3.1.1, @tinacms/cli before 2.0.4, and @tinacms/graphql before
Cross-site request forgery in the TinaCMS CLI dev server allows an attacker-controlled web page to write arbitrary files
Broken access control across all four first-party TinaCMS production media adapters (next-tinacms-s3, next-tinacms-dos,
Off-origin preview framing in TinaCMS (tinacms <= 3.13.0 and @tinacms/app <= 2.5.13) lets an unauthenticated attacker wh
Code injection in @tinacms/cli versions up to and including 2.7.0 lets a crafted Git branch name break out of the string
Stored cross-site scripting in TinaCMS's @tinacms/web-components package (all versions up to and including 0.2.0) lets a
EUVD-2026-81019
GHSA-g74q-6g2f-874x
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB