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

Vitess Path Traversal via Backup Manifest Manipulation

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 27, 2026·5 min read·45 visits

Executive Summary (TL;DR)

Improper path sanitization in the Vitess backup restore process allows attackers with backup storage access to write arbitrary files to the host OS via manipulated manifests.

A critical path traversal vulnerability exists in the Vitess `builtinbackupengine` component, specifically within the backup restoration workflow. The flaw arises from improper validation of file paths defined in the backup `MANIFEST` file. An attacker with write access to the backup storage location (e.g., S3, GCS, or NFS) can craft a malicious backup manifest containing directory traversal sequences. When a Vitess `vttablet` attempts to restore from this compromised backup, the system processes these sequences, allowing arbitrary file writes to the underlying host filesystem. This vulnerability permits attackers to break out of the intended data directory, potentially overwriting system binaries, configuration files, or authorized keys to achieve remote code execution.

Vulnerability Overview

Vitess is a database clustering system for horizontal scaling of MySQL. A core component of its reliability strategy is the backup and restore functionality managed by the builtinbackupengine. This engine handles the serialization of database states into storage backends (like AWS S3, Google Cloud Storage, or local mounts) and their subsequent restoration to vttablet instances.

The vulnerability, identified as CVE-2026-27969, resides in the logic responsible for interpreting the MANIFEST file during a restore operation. The MANIFEST is a metadata file that lists the objects contained within a backup and specifies where they should be placed on the local disk relative to the database root.

Due to a failure to sanitize the Name field within this manifest, the restoration process accepts relative path components (e.g., ../). This allows the restore routine to traverse outside the designated data directory. Consequently, the trust boundary is violated: the backup storage, which should only contain passive data, becomes a vector for active attacks against the database infrastructure.

Root Cause Analysis

The root cause of this vulnerability is the insecure usage of the path.Join function in Go when handling untrusted input from the backup manifest. The specific flaw is located in the fullPath method of the FileEntry structure within go/vt/mysqlctl/builtinbackupengine.go.

When Vitess performs a restore, it unmarshals the MANIFEST JSON file into FileEntry objects. Each entry contains a Name field representing the filename. The vulnerable code attempted to construct the absolute destination path by concatenating the base restore directory with this Name field using path.Join. While path.Join cleans paths by removing redundant separators, it does not prevent directory traversal if the resulting path is lexically valid.

Specifically, path.Join("/vt/data", "../../etc/passwd") resolves to /etc/passwd. The application failed to verify that the final resolved path remained rooted within the intended destination directory (e.g., /vt/data). This omission allows an attacker who controls the manifest to direct the file write operation to any location writable by the vttablet process.

Code Analysis

The vulnerability exists in the fullPath method, which calculates where a file from the backup should be written. Below is the comparison between the vulnerable and patched implementations.

Vulnerable Implementation

In the original code, the Name field (derived directly from the JSON manifest) is passed to path.Join without prior validation. If fe.Name contains ../, it alters the directory hierarchy of the result.

// go/vt/mysqlctl/builtinbackupengine.go
 
func (fe *FileEntry) fullPath(cnf *Mycnf) (string, error) {
    // ... [root calculation logic] ...
    
    // VULNERABLE: path.Join resolves "../" but does not sandbox the path.
    // If fe.Name is "../../bin/malicious", the output escapes the root.
    return path.Join(fe.ParentPath, root, fe.Name), nil
}

Patched Implementation

The fix, introduced in commit c565cab615bc962bda061dcd645aa7506c59ca4a, replaces the standard path.Join with a proprietary fileutil.SafePathJoin. This utility function conceptually performs the join and then checks if the resulting path is a subdirectory of the intended base.

// go/vt/mysqlctl/builtinbackupengine.go
 
func (fe *FileEntry) fullPath(cnf *Mycnf) (string, error) {
    // ... [root calculation logic] ...
 
    // FIXED: SafePathJoin ensures the result is contained within the parent.
    // Returns an error if the path attempts to traverse upwards.
    return fileutil.SafePathJoin(path.Join(fe.ParentPath, root), fe.Name)
}

The patch effectively enforces a jail on the file extraction process. Any attempt to supply a path containing traversal sequences that resolve outside the root will now trigger a fileutil.ErrInvalidJoinedPath error, aborting the write operation.

Exploitation Methodology

Exploitation of CVE-2026-27969 requires a specific position in the network topology: write access to the backup storage. This is classified as PR:H (Privileges Required: High) in CVSS 4.0, as backup locations are typically restricted. However, in compromised cloud environments or environments with overly permissive S3 bucket policies, this becomes a viable attack vector.

Attack Workflow:

  1. Reconnaissance: The attacker identifies the storage bucket or volume used by the target Vitess cluster for backups.
  2. Manifest Retrieval: The attacker downloads a valid backup MANIFEST file from the storage.
  3. Payload Injection: The attacker creates a malicious file (e.g., a reverse shell script or a modified authorized_keys file) and uploads it to the backup storage.
  4. Manifest Tampering: The attacker modifies the MANIFEST JSON. They add a FileEntry where the Name attribute is set to a traversal path, such as ../../../../../../usr/local/bin/malicious_script, mapping it to the uploaded payload.
  5. Trigger Restore: The attacker waits for an automated restore event or forces one (e.g., by crashing a tablet or triggering a new shard deployment).
  6. Execution: As the vttablet initializes, it processes the manifest. The builtinbackupengine writes the payload to /usr/local/bin/malicious_script. The attacker then waits for the system or an administrator to execute the file, or overwrites a frequently executed cron job to gain immediate execution.

> [!NOTE] > This attack is particularly dangerous in containerized environments (Kubernetes), where overwriting shared binaries or volume mounts can allow lateral movement to the host node.

Impact Assessment

The impact of this vulnerability is critical, principally affecting the Integrity and Confidentiality of the host system running the vttablet process. While the CVSS score is 9.3, the actual operational risk depends on the privileges of the Vitess process.

Direct Consequences:

  • Arbitrary File Write: Attackers can overwrite any file writable by the Vitess user. This often includes application configuration files, scripts, and potentially system binaries if the process runs as root (uncommon but possible in misconfigured containers).
  • Remote Code Execution (RCE): By overwriting startup scripts, .ssh/authorized_keys, or cron jobs, an attacker can elevate the arbitrary file write into full code execution.
  • Data Corruption: An attacker could overwrite valid database files or transaction logs with garbage data, causing persistent denial of service or data loss.

CVSS 4.0 Analysis:

The vector CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:P/VC:H/VI:H/VA:L/SC:L/SI:H/SA:H highlights that while high privileges (access to backups) are required, the subsequent impact on the vulnerable system (Confidentiality and Integrity) is High. The attack complexity is Low once access is obtained.

Official Patches

VitessPull Request #19470 containing the fix

Fix Analysis (1)

Technical Appendix

CVSS Score
9.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:P/VC:H/VI:H/VA:L/SC:L/SI:H/SA:H
EPSS Probability
0.04%
Top 88% most exploited

Affected Systems

Vitess 22.x < 22.0.4Vitess 23.x < 23.0.3

Affected Versions Detail

Product
Affected Versions
Fixed Version
Vitess
vitessio
< 22.0.422.0.4
Vitess
vitessio
>= 23.0.0, < 23.0.323.0.3
AttributeDetail
CWECWE-22 (Path Traversal)
CVSS v4.09.3 (Critical)
Attack VectorNetwork (Backup Storage)
Exploit MaturityNone (No public PoC)
EPSS Score0.04%
Affected Componentbuiltinbackupengine

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1485Data Destruction
Impact
CWE-22
Path Traversal

Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Vulnerability Timeline

Fix commit merged
2026-02-25
Advisory GHSA-r492-hjgh-c9gw published
2026-02-26
CVE-2026-27969 assigned
2026-02-26

References & Sources

  • [1]GHSA-r492-hjgh-c9gw Advisory
  • [2]NVD CVE-2026-27969

More Reports

•about 8 hours ago•GHSA-PW6J-QG29-8W7F
5.9

GHSA-pw6j-qg29-8w7f: State Persistence and Sensitive Credential Leakage in Tornado CurlAsyncHTTPClient

A state persistence vulnerability exists in Tornado's CurlAsyncHTTPClient component where pooled pycurl.Curl handles are reused across asynchronous requests without a complete state reset. Consequently, sensitive per-request configurations, such as client TLS certificates or proxy basic authentication credentials, persist on the shared handle. This behavior leads to subsequent requests leaking these credentials to unauthorized remote servers.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 9 hours ago•CVE-2026-48748
7.5

CVE-2026-48748: Netty HTTP/3 QPACK Blocked Streams Memory Exhaustion

CVE-2026-48748 is a denial-of-service vulnerability in Netty's HTTP/3 codec (netty-codec-http3) occurring when QPACK dynamic tables are enabled but the blocked streams limit is not explicitly configured. A bug in limit checking and a memory leak in stream tracking allow unauthenticated remote attackers to exhaust the JVM heap memory and crash the server.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 9 hours ago•CVE-2026-50009
4.8

CVE-2026-50009: Stateless Reset Token Exposure in Netty QUIC

CVE-2026-50009 is a cryptographic design vulnerability in the Netty network application framework. Prior to version 4.2.15.Final, the framework's QUIC protocol implementation fails to cryptographically segregate the generated Connection IDs and the associated Stateless Reset Tokens. An on-path network attacker who sniffs traffic during a Connection ID rotation can extract secret token material from cleartext headers, enabling them to inject spoofed reset packets and terminate active connections.

Alon Barad
Alon Barad
6 views•6 min read
•about 10 hours ago•CVE-2026-50010
7.5

CVE-2026-50010: Hostname Verification Bypass in Netty TLS Client

A critical hostname verification bypass vulnerability exists in the Netty network application framework when configured as a TLS client. When a developer registers a custom plain X509TrustManager, Netty wraps it inside an X509TrustManagerWrapper to adapt it to the X509ExtendedTrustManager API. However, this wrapper discards the SSLEngine context, bypassing critical hostname checks. Because the wrapper is identified as an X509ExtendedTrustManager, standard cryptographic engines and Netty's OpenSSL wrappers do not re-wrap it, failing to execute any hostname validation. Consequently, clients silently accept certificates for any host, enabling unauthenticated Man-in-the-Middle (MitM) attacks.

Amit Schendel
Amit Schendel
7 views•8 min read
•about 10 hours ago•CVE-2026-50011
7.5

CVE-2026-50011: Unbounded Resource Pre-Allocation in Netty Redis Codec

An uncontrolled resource pre-allocation flaw in the Netty Redis codec module allows remote unauthenticated attackers to cause a denial of service (OutOfMemoryError) by sending a crafted Redis Serialization Protocol (RESP) array header.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 11 hours ago•CVE-2026-50020
5.3

CVE-2026-50020: HTTP Request Smuggling in Netty HttpObjectDecoder via Arbitrary Leading Control Bytes

CVE-2026-50020 is a medium-severity HTTP Request Smuggling/Response Smuggling vulnerability (CWE-444) within the Netty asynchronous network application framework. The flaw resides in Netty's HTTP codec implementation, specifically the HttpObjectDecoder class, which silently consumes arbitrary ISO control bytes preceding the first request line.

Alon Barad
Alon Barad
4 views•7 min read