High severity · published Apr 1, 2026
CVE-2026-34603
@tinacms/graphql's Media Endpoints Can Escape the Media Root via Symlinks or Junctions
8.3
CVSS
0.4%
EPSS
No
On KEV
Description
Tina is a headless content management system. Prior to version 2.2.2, @tinacms/cli recently added lexical path-traversal checks to the dev media routes, but the implementation still validates only the path string and does not resolve symlink or junction targets. If a link already exists under the media root, Tina accepts a path like pivot/written-from-media.txt as "inside" the media directory and then performs real filesystem operations through that link target. This allows out-of-root media listing and write access, and the same root cause also affects delete. This issue has been patched in version 2.2.2.
CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L
Attack vector
Network
Complexity
Low
Privileges
Low
User interaction
None
Confidentiality
High
Integrity
High
Availability
Low
Scope
Unchanged
Exploitation
Is it being used?
Exploit prediction (EPSS)0.4% · higher than 35% of CVEs
Exploited in the wildNo evidence yet
CISA KEVNot listed
Ransomware campaign useNot known
Affected products
Which versions
TI
tinacms · tinacms
< 2.2.2 · source: vendor
TI
Tinacms/cli · Ssw
through 2.2.1 · source: NVD
References
NVD
https://nvd.nist.gov/vuln/detail/CVE-2026-34603
CVE.org
https://www.cve.org/CVERecord?id=CVE-2026-34603
Patch
https://github.com/tinacms/tinacms/commit/f124eabaca10dac9a4d765c9e4135813c4830955
Vendor Advisory
https://github.com/tinacms/tinacms/security/advisories/GHSA-g87c-r2jp-293w
More from tinacms
9.3
CVE-2026-108261
TinaCMS admin preview iframe loads an attacker-controlled origin from the URL fragment
8.8
CVE-2026-63506
Tina: [Broken Access Control] letting any TinaCloud user authorize against any self-hosted site
8.8
CVE-2026-34604
@tinacms/graphql's `FilesystemBridge` Path Validation Can Be Bypassed via Symlinks or Junctions
8.8
CVE-2025-68278
tinacms vulnerable to arbitrary code execution
8.2
CVE-2026-108259
Tina: Code injection via unescaped Git branch name in generated client source
