CVE-2026-34603: Tina CMS GraphQL media endpoints path traversal via symlinks

CVE-2026-34603 · Severity: low · CVSS 3.1 · Published 2026-04-01

Tina CMS's media management endpoints can be manipulated to read, write, and delete files outside the intended media directory by exploiting symlinks or junctions. An authenticated attacker can list files, upload files to, or remove files from locations outside the media root—potentially exposing sensitive data or compromising system integrity. This is especially dangerous in development and self-hosted deployments where symlinks in the media directory are common.

Technologies: @tinacms/graphql (npm). Vendors: npm.

Quick answers

Is CVE-2026-34603 exploited in the wild?
No. Junglewise Threat Intelligence has no report of CVE-2026-34603 being exploited in the wild.
How severe is CVE-2026-34603?
Low severity, with a CVSS score of 3.1, published 1 April 2026.
Which products and versions are affected?
@tinacms/graphql (npm) SEMVER:introduced=0,fixed=2.2.2; Tina CMS GraphQL <= 2.2.1.
Is there a fix for CVE-2026-34603?
Yes. @tinacms/graphql (npm): upgrade to 2.2.2 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
How is CVE-2026-34603 attacked?
It is attacked over the network.
Am I affected by CVE-2026-34603?
Check whether you run @tinacms/graphql (npm) or Tina CMS GraphQL at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

How to fix

  • @tinacms/graphql (npm): upgrade to 2.2.2 or later
    npm install @tinacms/graphql@2.2.2

Technical details

The vulnerability is a path traversal flaw in @tinacms/graphql's media endpoints (list, upload, delete). The vulnerable code validates user-controlled file paths using lexical string operations (path.resolve and startsWith checks) without resolving symbolic links or Windows junctions. An attacker can craft a path like `pivot/secret.txt` where `pivot` is a symlink to a directory outside the media root; the validation passes because the path string appears to be inside the media directory, but filesystem operations follow the symlink target and access files outside the boundary. Attack requires authenticated access (PR:L) with moderate complexity (AC:H), allowing unauthorized file read/write/delete operations with high confidentiality and integrity impact. The patch (version 2.2.2) hardens validation by using fs.realpath() to resolve canonical paths and comparing real filesystem locations rather than strings.

Affected products

  • Tina CMS GraphQL <= 2.2.1

Identifiers

  • CVE-2026-34603
  • GHSA-g87c-r2jp-293w

Timeline

  • 2026-04-01: disclosed
  • 2026-04-01: patched: Version 2.2.2

References

This page as Markdown. Free to reuse under CC BY 4.0 with a link back.