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-63123

CVE-2026-63123: Cross-Site Request Forgery leading to Cross-Origin Arbitrary File Write in @tinacms/cli

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 19, 2026·4 min read·5 visits

Executive Summary (TL;DR)

A validation failure in the local TinaCMS dev server allowed external websites to perform arbitrary file writes inside the developer's project folder via cross-origin multipart form uploads.

A Cross-Site Request Forgery (CSRF) vulnerability in the local development server of @tinacms/cli allowed malicious cross-origin pages to send state-changing HTTP requests. This issue permitted attackers to write arbitrary files into a developer's project directory or manipulate search and GraphQL indices without authorization.

Vulnerability Overview

The @tinacms/cli package includes a local development server intended to run during project editing phases. This development server typically binds to local ports such as http://localhost:4001 to process API operations. To support development workflows, the server exposes state-changing endpoints like /media/upload for managing asset uploads, as well as GraphQL and search index endpoints.

While the server utilized standard Cross-Origin Resource Sharing (CORS) configurations, it relied on these mechanisms as an access control boundary. This design choice overlooked the functional limits of browser CORS policies, which govern read restrictions rather than write blocks. Consequently, the local server was exposed to cross-origin requests dispatched by external pages opened in the developer's browser, bypassing standard CORS origin protections.

Root Cause Analysis

The fundamental flaw in @tinacms/cli is the conceptual misuse of CORS middleware for server-side request filtering. The server leveraged the npm cors package to evaluate the Origin header. However, CORS standard behaviors indicate that the Access-Control-Allow-Origin headers only restrict the calling web application's ability to read responses; they do not prevent browsers from executing requests.

Under standard browser semantics, a POST request using multipart/form-data is categorized as a "simple request." As a result, the browser skips sending a preflight OPTIONS request and directly transmits the POST payload to the target local server. Although the browser eventually blocks the malicious page from reading the response due to the lack of appropriate CORS headers, the server-side state-changing code—such as the file write routine inside mediaRouter.handlePost—executes to completion. This leaves the developer vulnerable to silent file injection.

Code Analysis

In vulnerable versions, the route plugins for the Vite dev server processed inbound requests regardless of origin validation results. The cors check only appended headers but never aborted processing. The fix introduces a structured isOriginAllowed logic step that performs active server-side gating.

// Server-Side Origin Guarding Implementation
export function isOriginAllowed(
  origin: string | undefined,
  allowedOrigins: (string | RegExp)[] = []
): boolean {
  // Allow requests with no Origin header (curl, same-origin, etc.)
  if (!origin) {
    return true;
  }
  if (LOCALHOST_RE.test(origin)) {
    return true;
  }
  for (const allowed of expandOrigins(allowedOrigins)) {
    if (typeof allowed === 'string') {
      if (allowed === origin) {
        return true;
      }
    } else {
      allowed.lastIndex = 0;
      if (allowed.test(origin)) {
        return true;
      }
    }
  }
  return false;
}

The routes now actively evaluate each transaction using isStateChangingRequest() and reject unauthorized requests immediately:

// Gating inside plugins.ts
const isStateChangingRequest = (req: { url?: string; method?: string }) => {
  const url = req.url || '';
  if (url.startsWith('/media/upload')) return true;
  if (url.startsWith('/media') && req.method === 'DELETE') return true;
  if (url.startsWith('/graphql') && req.method === 'POST') return true;
  if (
    (url.startsWith('/searchIndex') || url.startsWith('/v2/searchIndex')) &&
    (req.method === 'POST' || req.method === 'DELETE')
  ) 
    return true;
  return false;
};
 
// Gating check prior to parsing execution
if (
  isStateChangingRequest(req) &&
  !isOriginAllowed(req.headers.origin, allowedOrigins)
) {
  res.statusCode = 403;
  res.end(JSON.stringify({ error: 'Origin not allowed' }));
  return;
}

Exploitation Analysis

To exploit this vulnerability, an attacker must trick a developer who has an active local tinacms dev instance running into visiting a malicious site. The malicious site hosts JavaScript that initiates a background HTTP POST request targeting http://localhost:4001/media/upload/payload.js.

The payload uses standard web APIs to generate a multipart/form-data payload containing arbitrary code. Because the browser classifies this as a simple request, the browser submits the multipart payload directly to the localhost server. The server, lacking origin checks, executes the write handler and drops the arbitrary file into the local workspace directory.

Impact Assessment

The concrete security impact is high-severity local file manipulation. Since the development server can write arbitrary files to the media root or local folders, an attacker can overwrite crucial configuration parameters, template structures, or executable scripts in modern build configurations.

Depending on the specific file system layout and build pipeline configurations, a malicious file write could achieve local remote code execution (RCE) on the developer's machine when compilation or local server execution cycles read the modified or written configuration files.

Remediation & Mitigation

The primary remediation strategy is upgrading the @tinacms/cli dependencies to a secure version. Upgrade the package to version 2.5.2 or later to ensure the server-side origin validations are active.

As a secondary security measure, developers should ensure that local dev servers are bound strictly to local loopback interfaces (e.g., 127.0.0.1 or [::1]) rather than public or shared network interfaces.

Official Patches

TinaCMSPR to resolve cross-origin state-changing actions

Fix Analysis (1)

Technical Appendix

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

Affected Systems

@tinacms/cli local development environments running prior to version 2.5.2

Affected Versions Detail

Product
Affected Versions
Fixed Version
@tinacms/cli
TinaCMS
< 2.5.22.5.2
AttributeDetail
CWE IDCWE-352 (Cross-Site Request Forgery)
Attack VectorNetwork (Unauthenticated, requiring User Interaction)
CVSS Base Score6.5
ImpactHigh Integrity Impact (Arbitrary File Write)
Exploit StatusProof-of-Concept
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
CWE-352
Cross-Site Request Forgery (CSRF)

The application does not prove or verify that a request was intentionally sent by the user, allowing unauthorized state-changing operations.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory text outlining the conceptual bypass mechanism and how developers are affected.

Vulnerability Timeline

Security patches merged in PR #7111 and fix commit pushed
2026-06-29
TinaCMS released @tinacms/cli version 2.5.2 with fix
2026-06-29
GitHub Advisory GHSA-rgr9-r7mj-mf6x published
2026-08-19

References & Sources

  • [1]GitHub Security Advisory GHSA-rgr9-r7mj-mf6x
  • [2]Fix Pull Request #7111
  • [3]Fix Commit 211997cdb53cbd43638bdee999faa65375cfc260
  • [4]Release Tag @tinacms/cli@2.5.2

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

•36 minutes ago•CVE-2026-59992
5.4

CVE-2026-59992: Broken Access Control and Path Traversal in Tina CMS Production Media Adapters

CVE-2026-59992 is a critical broken access control vulnerability in the first-party production media adapters of Tina CMS, including next-tinacms-s3, next-tinacms-dos, next-tinacms-azure, and next-tinacms-cloudinary. The issue allows authenticated editors to escape the configured mediaRoot directory containment, facilitating unauthorized file uploads, modifications, and deletions across the entire storage bucket or container.

Amit Schendel
Amit Schendel
1 views•6 min read
•about 3 hours ago•CVE-2026-63188
8.7

CVE-2026-63188: Unauthenticated Directory Traversal in @logto/tunnel

A high-severity path traversal vulnerability exists in the @logto/tunnel npm package (part of the Logto repository) prior to version 0.3.9. Remote unauthenticated attackers can exploit this vulnerability to read arbitrary local files by sending crafted HTTP requests with directory traversal sequences when the static file proxy is active.

Alon Barad
Alon Barad
4 views•7 min read
•about 10 hours ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 11 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 12 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 12 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read