CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-34603

CVE-2026-34603: Path Traversal and Link Following in TinaCMS

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 1, 2026·6 min read·34 visits

Executive Summary (TL;DR)

A path traversal flaw in TinaCMS < 2.2.2 allows attackers to read or write arbitrary files by creating symbolic links within allowed directories, bypassing lexical path validation.

TinaCMS versions prior to 2.2.2 suffer from a path traversal vulnerability due to improper handling of symbolic links. Attackers with restricted filesystem access can bypass directory boundaries to read, write, or delete arbitrary files on the host system.

Vulnerability Overview

TinaCMS is a headless content management system that relies on a local development server and API for managing file assets and content operations. Prior to version 2.2.2, the @tinacms/cli and @tinacms/graphql packages contained a critical security flaw in their path validation logic. This flaw affects the dev media routes and the FilesystemBridge component, which are responsible for handling filesystem operations initiated by the application.

The vulnerability is classified under both CWE-22 (Improper Limitation of a Pathname to a Restricted Directory) and CWE-59 (Improper Link Resolution Before File Access). The core issue involves the application performing security validation on the lexical representation of file paths rather than their canonical locations on the disk. This allows the use of symbolic links or Windows junctions to circumvent directory restrictions.

An attacker who possesses the ability to create files within the authorized media root can place a symbolic link pointing to an arbitrary location on the filesystem. Subsequent operations utilizing this link pass the application's internal security checks but interact with the target directory out of bounds. This results in unauthorized file disclosure, modification, and deletion capabilities.

Root Cause Analysis

The vulnerability originates from an over-reliance on lexical path validation within the Node.js environment. The vulnerable implementation utilized the path.resolve function combined with a string prefix comparison to ensure that requested files resided within the intended base directory. The path.resolve function performs pure string manipulation to compute an absolute path, ignoring the actual filesystem structure and any symbolic links present.

When an attacker supplies a path containing a symbolic link, path.resolve evaluates the path textually. For example, a request for /app/public/uploads/symlink/secret.txt will be lexically resolved to exactly that string. The application then checks if this string starts with the allowed base path, such as /app/public/uploads/. Since the string prefix matches, the application authorizes the operation.

However, when the application passes this authorized path to filesystem APIs like fs.readFile or fs.writeFile, the underlying operating system resolves the symbolic link. If the symlink directory points to /etc/, the operating system transparently redirects the I/O operation to /etc/secret.txt. The application's failure to enforce containment on the canonical, fully-resolved path creates the bypass.

Code Analysis

The flawed logic relied on string manipulation to verify file containment. The code computed the absolute path of the requested asset and compared it against the allowed directory root. Because this approach did not interact with the filesystem, it remained blind to symbolic links redirecting the path out of the intended sandbox.

// Vulnerable logic pattern
const resolvedBase = path.resolve(baseDir);
const resolvedPath = path.resolve(path.join(baseDir, userSuppliedPath));
 
if (resolvedPath.startsWith(resolvedBase + path.sep)) {
    // Authorization granted based purely on string prefix
    return fs.readFile(resolvedPath);
}

The patch introduced in commit f124eabaca10dac9a4d765c9e4135813c4830955 mitigates this issue by implementing canonical path validation. The developers introduced a new utility function named resolveRealPath that utilizes fs.realpathSync. This function interacts with the filesystem to resolve all symbolic links, returning the true absolute path of the target.

// Patched logic pattern
export function assertSymlinkWithinBase(resolved, resolvedBase, userPath) {
    const canonicalBase = fs.realpathSync(resolvedBase);
    const canonicalPath = resolveRealPath(resolved);
    
    if (!canonicalPath.startsWith(canonicalBase + path.sep)) {
        throw new Error('Path traversal detected');
    }
}

By comparing the canonical paths, the system ensures that the final destination of the I/O operation securely resides within the authorized base directory. The resolveRealPath function also handles edge cases where the target file does not yet exist, traversing upwards to validate the nearest existing ancestor directory.

Exploitation

Exploitation of CVE-2026-34603 requires the attacker to possess the capability to write files or create symbolic links within the restricted media directory. This privilege is typically held by authorized users or developers interacting with the TinaCMS interface. The attack proceeds in two distinct phases: link creation and operation triggering.

First, the attacker creates a symbolic link within the designated upload or content directory. This link targets a sensitive location on the host filesystem. For example, executing ln -s /etc /path/to/tina/public/uploads/escape establishes a conduit to the system's configuration directory.

Next, the attacker issues standard HTTP requests to the TinaCMS media endpoints or FilesystemBridge, referencing the newly created symbolic link. Requesting a directory listing for escape/ returns the contents of /etc/. Issuing a read request for escape/passwd retrieves the system password file. Write and delete operations follow the same trajectory, applying destructive actions to the targeted out-of-bounds files.

Impact Assessment

The successful exploitation of this vulnerability fundamentally compromises the confidentiality and integrity of the host system. The impact is strictly bounded by the filesystem permissions granted to the operating system user executing the TinaCMS process. If the application runs with elevated privileges, the attacker gains complete administrative control over the host.

Confidentiality is severely impacted. Attackers can read sensitive files across the filesystem, including application source code, environment variables containing database credentials, and system configuration files. This data exfiltration provides the necessary material for further lateral movement within the network.

Integrity is equally compromised. The ability to write files outside the intended root allows attackers to overwrite critical application logic, implant backdoors, or modify system binaries. The CVSS base score of 7.1 reflects this high impact on confidentiality and integrity, while acknowledging the elevated attack complexity required to stage the initial symbolic link.

Remediation

The primary remediation for CVE-2026-34603 is upgrading the @tinacms/cli and @tinacms/graphql packages to version 2.2.2 or later. This release implements strict canonical path validation, neutralizing the symbolic link bypass mechanism entirely. Organizations utilizing TinaCMS must prioritize this update across all development and production environments.

In addition to the software update, administrators must enforce strict network binding policies. The TinaCMS development server lacks built-in authentication mechanisms and is designed exclusively for local access. Ensure the server binds only to the local loopback interface (127.0.0.1 or ::1) and is never exposed to public or untrusted networks.

Finally, implement the principle of least privilege at the operating system level. Execute the TinaCMS process under a dedicated service account with the minimum necessary filesystem permissions. This defense-in-depth strategy prevents an attacker from reading or writing sensitive host files even if a path traversal vulnerability is successfully exploited.

Official Patches

TinaCMSOfficial patch commit implementing realpath resolution

Fix Analysis (1)

Technical Appendix

CVSS Score
7.1/ 10
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:L

Affected Systems

TinaCMS @tinacms/cliTinaCMS @tinacms/graphql

Affected Versions Detail

Product
Affected Versions
Fixed Version
TinaCMS (@tinacms/cli, @tinacms/graphql)
TinaCMS
< 2.2.22.2.2
AttributeDetail
CWE IDCWE-22, CWE-59
Attack VectorNetwork
CVSS Score7.1
ImpactHigh Confidentiality, High Integrity
Exploit StatusProof of Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-59
Improper Link Resolution Before File Access ('Link Following')

Improper Link Resolution Before File Access ('Link Following')

Vulnerability Timeline

Security patch committed by Matt Wicks (TinaCMS)
2026-03-26
Technical advisories (GHSA-g87c-r2jp-293w, GHSA-g9c2-gf25-3x67) drafted
2026-03-26
CVE-2026-34603 officially published to the CVE Registry
2026-04-01

References & Sources

  • [1]Fix Commit f124eabaca10dac9a4d765c9e4135813c4830955
  • [2]GitHub Advisory (Media)
  • [3]GitHub Advisory (FilesystemBridge)
  • [4]CVE-2026-34603 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•41 minutes ago•GHSA-8RW6-P7M8-63JP
6.5

GHSA-8RW6-P7M8-63JP: Array Element-Level SELECT Permissions Leak in SurrealDB

SurrealDB versions supporting element-level SELECT permissions on arrays are vulnerable to a logical authorization bypass. Due to an index-shifting error during array filtration, restricted elements can skip permission checks and leak to unauthorized record users.

Alon Barad
Alon Barad
1 views•6 min read
•about 23 hours ago•CVE-2026-12243
7.5

CVE-2026-12243: Incomplete Path Traversal Validation and Percent-Encoding Bypass in NLTK

CVE-2026-12243 is a path traversal vulnerability in the Natural Language Toolkit (NLTK) version 3.9.4. The flaw exists because the input validation routine fails to account for percent-encoded directory traversal sequences like '..%2f' before passing them to urllib.request.url2pathname(), which decodes them into active traversal sequences.

Amit Schendel
Amit Schendel
5 views•8 min read
•about 24 hours ago•CVE-2026-73654
8.5

CVE-2026-73654: Prototype Pollution in Trigger.dev leading to Cascading Denial of Service

CVE-2026-73654 is a high-severity prototype pollution vulnerability in Trigger.dev. The flaw occurs during the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata endpoint. Because user-supplied keys are parsed directly by the @jsonhero/path library without sanitization, an authenticated attacker with low privileges can pollute the global Object.prototype. This causes database queries via Prisma ORM to fail validation and induces unhandled exceptions in the Prometheus metrics client, resulting in a process-wide denial of service.

Alon Barad
Alon Barad
11 views•6 min read
•1 day ago•CVE-2026-73559
6.5

CVE-2026-73559: Uncontrolled Resource Consumption in vLLM API completions

CVE-2026-73559 is an uncontrolled resource consumption vulnerability in the vLLM engine, specifically within the /v1/completions API endpoint, allowing authenticated attackers to cause application-level denial of service via unbounded prompt arrays.

Amit Schendel
Amit Schendel
10 views•5 min read
•1 day ago•CVE-2026-54526
9.9

CVE-2026-54526: Strict Template Referencing Bypass and Privilege Escalation in Argo Workflows

A critical security bypass vulnerability in Argo Workflows allows authenticated attackers with workflow submission privileges to bypass 'Strict' or 'Secure' template referencing restrictions. By injecting unvalidated fields into the nested ArtifactGC configuration, attackers can execute arbitrary pod patches, leading to host namespace escape and cluster-wide privilege escalation.

Alon Barad
Alon Barad
15 views•6 min read
•1 day ago•CVE-2026-54249
6.8

CVE-2026-54249: Server-Side Request Forgery via Confused Deputy in Pydantic AI UI Adapters

A Server-Side Request Forgery (SSRF) / Confused Deputy vulnerability has been identified in Pydantic AI UI Adapters (such as VercelAIAdapter). Under certain conditions, a malicious client can supply manipulated message history with provider metadata that forces the server to resolve files within privileged cloud environments (AWS S3, Google Cloud Storage) or model providers. This occurs because the adapters deserialize client-provided metadata structures directly into UploadedFile instances without validation, which are subsequently fetched using high-privilege server credentials.

Alon Barad
Alon Barad
7 views•7 min read