Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as CMS editor
-
DeliveryCraft request with arbitrary storage key
-
ExploitSubmit DELETE or presigned-PUT request to media handler
-
ExecutionHandler issues SDK call with attacker-chosen key
-
ImpactWrite or delete object outside mediaRoot boundary
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 | Exploitation requires an active, authenticated CMS editor account (CVSS PR:L confirmed) within the TinaCMS deployment - anonymous or unauthenticated access is insufficient. The vulnerable code path is reached via standard media upload (GET with ?key=) and delete (DELETE with ?media=) HTTP requests to the Next.js API route that mounts createMediaHandler, which must be publicly reachable or reachable from the editor's network. The deployment must use at least one of the four affected adapter packages in a version prior to the fixed releases. Exploitation is limited to keys the deployment's storage credential can actually reach: if the IAM/service-principal policy is already scoped tightly to the mediaRoot prefix, the practical impact is contained even without patching. There is no requirement for a specific non-default configuration - any default TinaCMS deployment using these adapters with a broad storage credential is vulnerable. |
| Impact | The NVD-assigned CVSS 5.4 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L) understates the practical impact: the I:L and A:L ratings assume limited scope, but the description explicitly states that an editor can reach 'other tenants' or non-media objects' throughout the entire bucket, which aligns more closely with I:H/A:H. The attack complexity is genuinely low once an editor account exists - no special tooling is required beyond crafting a query string. No EPSS data was provided and the vulnerability is not in CISA KEV, indicating no confirmed mass or active exploitation. No public proof-of-concept has been identified. The real-world risk is therefore moderate-to-high for any multi-tenant TinaCloud deployment or self-hosted deployment where the storage credential has broad bucket permissions, because a single compromised or malicious editor account can overwrite or purge arbitrary objects. Single-tenant deployments with tightly scoped IAM policies (bucket limited strictly to the media prefix) face substantially reduced blast radius. The scope change (S:U) in the provided vector is reasonable since impact stays within the same storage system, but organizations should treat this as high-priority given the potential for data destruction across an entire storage bucket. |
| Exploit ScenarioDerived | A malicious authenticated CMS editor on a multi-tenant TinaCloud deployment crafts a DELETE request to the media handler with req.query.media set to an arbitrary S3 key such as 'other-tenant/config/production-settings.json' - a key that falls outside the editor's mediaRoot but within the deployment IAM credential's reach. The handler issues a DeleteObjectCommand for that exact key without validation, permanently removing the object. No public exploit code has been identified, but the attack requires nothing beyond a valid editor session and knowledge of target key names, making it trivially reproducible by any motivated editor. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Broken access control across all four first-party TinaCMS production media adapters (next-tinacms-s3, next-tinacms-dos, next-tinacms-azure, next-tinacms-cloudinary) allows any authenticated CMS editor to write or delete storage objects outside the operator-configured mediaRoot boundary. The handlers pass attacker-controlled query parameters (req.query.key for presigned S3 PUTs, req.query.media for DELETEs) directly to storage SDK operations without validating that the resulting key falls within the permitted path prefix, giving editors write and delete authority over the entire storage bucket or container reachable by the deployment's IAM or service credential. Vendor-released patches exist in all four packages; no public exploit or CISA KEV listing has been identified at time of analysis.
RemediationAI
Vendor-released patches are available: upgrade next-tinacms-s3 to 23.0.4, next-tinacms-dos to 23.0.4, next-tinacms-azure to 14.0.4, and next-tinacms-cloudinary to 26.0.4. The fix introduces a shared resolveKey and resolveDirectory validation layer (packages/*/src/media-key.ts) that normalises attacker-supplied keys, rejects empty keys, absolute paths, NUL bytes, percent-encoded traversal sequences, and any key that resolves outside the configured mediaRoot before the storage SDK call is made. The commit is d44558e9b4502d4f4fc2c970d22985339fe2b6ce and the release tag is https://github.com/tinacms/tinacms/releases/tag/next-tinacms-s3@23.0.4. If immediate patching is not possible, the most effective compensating control is to restrict the storage credential used by the deployment to the exact key prefix corresponding to mediaRoot (e.g., an S3 IAM policy with s3:PutObject and s3:DeleteObject scoped to arn:aws:s3:::bucket-name/media-root-prefix/*); this limits the blast radius to the intended directory even if the handler remains unpatched, though it does not fix the boundary bypass itself. Trade-off: overly restrictive IAM policies may break legitimate media operations if the prefix is misconfigured. Additionally, auditing recent storage operations for keys outside the expected mediaRoot prefix can identify whether the flaw was already exploited.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 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, Git-backed content management system that exposes Next.js API route handlers for media operations. The affected packages - next-tinacms-s3, next-tinacms-dos (DigitalOcean Spaces), next-tinacms-azure (Azure Blob Storage), and next-tinacms-cloudinary - each implement a createMediaHandler that issues presigned upload URLs or direct SDK calls on behalf of authenticated CMS editors. The root cause is CWE-639 (Authorization Bypass Through User-Controlled Key): the handlers expose a mediaRoot configuration option intended to scope editors to a subdirectory, but they never validate that the caller-supplied key resolves within that root before constructing the presigned URL or issuing the SDK command. In the S3 adapter (handlers.ts:67-90), req.query.key becomes the Key field of a PutObjectCommand presigned URL verbatim; in the DELETE branch (handlers.ts:199-223), the second element of req.query.media becomes the DeleteObjectCommand key. Adjacent weaknesses CWE-284 (Improper Access Control) and CWE-862 (Missing Authorization) also apply. CPE strings confirm the vulnerability spans tinacms:next-tinacms-s3, tinacms:next-tinacms-dos, tinacms:next-tinacms-azure, and tinacms:next-tinacms-cloudinary across all versions prior to the fixed releases.
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:N/I:L/A:L
Editor auth required (PR:L); no confidentiality impact; but write/delete spans entire bucket (I:H, A:H), not just limited data.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Tina is a headless content management system. Prior to next-tinacms-s3 23.0.4, next-tinacms-dos 23.0.4, next-tinacms-azure 14.0.4, and next-tinacms-cloudinary 26.0.4, the first-party production media adapters pass attacker-controlled object keys to storage SDK upload and delete operations without enforcing the operator's configured mediaRoot. In packages/next-tinacms-s3/src/handlers.ts, createMediaHandler accepts req.query.key for a signed PutObject URL and the DELETE path uses req.query.media as the DeleteObjectCommand key. The same missing key-boundary check exists in packages/next-tinacms-dos/src/handlers.ts, packages/next-tinacms-azure/src/handlers.ts, and packages/next-tinacms-cloudinary/src/handlers.ts. An authenticated CMS editor can therefore create or delete objects anywhere the deployment's storage credential can reach, including other tenants' or non-media objects. These issues are fixed in next-tinacms-s3 23.0.4, next-tinacms-dos 23.0.4, next-tinacms-azure 14.0.4, and next-tinacms-cloudinary 26.0.4.
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.
Cross-tenant authorization bypass in TinaCMS self-hosted deployments allows any holder of a legitimate TinaCloud account
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
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-63102
GHSA-8mq9-5fw2-5rm4
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB