Skip to main content

TinaCMS EUVDEUVD-2026-81019

| CVE-2026-63506 HIGH
Authorization Bypass Through User-Controlled Key (CWE-639)
2026-09-16 GitHub_M GHSA-g74q-6g2f-874x
8.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Register any TinaCloud account
  2. Delivery
    Obtain valid token for attacker's own app
  3. Exploit
    Send request to victim endpoint with attacker clientID
  4. Execution
    Cross-tenant auth acceptance via IDOR
  5. Impact
    Read/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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.5% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

auth < 1.1.4
next-tinacms-azure < 15.0.1
tinacms < 1.1.4

Affected Packages

npm @tinacms/auth fix: 1.1.4
npm next-tinacms-azure fix: 15.0.1
euvd auth fix: 1.1.4
euvd tinacms fix: 1.1.4

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

Vendor (GitHub_M) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Sep 16, 2026 - 21:18 EUVD
CVE Published
Sep 16, 2026 - 20:27 cve.org
HIGH 8.8

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.5%
Top 59% exploitable
Prevalence
Medium
popular open-source Git-backed headless CMS, self-hosted but niche vs WordPress
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy