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

CVE-2026-55874: Cross-Bucket Path Traversal in SeaweedFS S3 API Gateway

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 29, 2026·7 min read·15 visits

Executive Summary (TL;DR)

SeaweedFS S3 API Gateway allows cross-bucket reads via path traversal in the X-Amz-Copy-Source header prior to version 4.34.

A critical path traversal vulnerability (CVE-2026-55874) in the SeaweedFS S3 API Gateway prior to version 4.34 allows authenticated remote attackers with write access to at least one bucket to bypass isolation. By supplying crafted directory traversal sequences in the X-Amz-Copy-Source header, an attacker can read objects from arbitrary buckets on the same deployment.

Vulnerability Overview

The S3 API Gateway in SeaweedFS is a critical component that exposes an Amazon S3-compatible interface on top of the distributed SeaweedFS Filer backend. This gateway maps S3 operations, such as object uploads, downloads, and copies, to the underlying hierarchical file storage. Because the gateway handles authentication and authorization, it acts as the security boundary enforcing isolation between different S3 buckets and their associated user policies.

The vulnerability, designated as CVE-2026-55874, is an implementation flaw in the way the S3 API Gateway processes server-side copy requests. Specifically, the vulnerability resides within the handlers for the S3 CopyObject and UploadPartCopy operations. These operations allow clients to duplicate existing objects inside the storage cluster without downloading and re-uploading the data, which optimizes network performance.

By failing to perform proper path validation on user-controlled headers during these copy operations, the S3 API Gateway exposes a path traversal interface. An authenticated user who is restricted to a single bucket can read any object across the entire SeaweedFS deployment. The vulnerability represents a serious breakdown of the multi-tenancy model in SeaweedFS environments that rely on S3 bucket-level isolation.

Root Cause Analysis

The root cause of CVE-2026-55874 is the improper limitation of a pathname to a restricted directory (CWE-22) when parsing the X-Amz-Copy-Source header. In a standard S3 copy operation, the destination of the copy is defined by the HTTP request URL, while the source is declared in the X-Amz-Copy-Source request header. The S3 API Gateway performs access control checks against the destination path specified in the URL to ensure the client has writing privileges.

Once authorization is verified for the destination bucket, the gateway parses the X-Amz-Copy-Source header to resolve the location of the source object. Prior to version 4.34, the parser divided the header value into two parts: the bucket name and the object key. However, the gateway only checked whether these extracted strings were non-empty, neglecting to validate or sanitize them for directory traversal sequences.

When these components are handed off to the SeaweedFS Filer backend, they are concatenated into a single path using filesystem path resolution helpers. Because the object key parsed from the header can contain path traversal segments like .. or %2e%2e, the resulting path collapses past the root of the source bucket. This behavior allows the path to resolve to folders belonging to other buckets, making it a classic confused-deputy attack.

Code Analysis

The vulnerability is primarily located in the path validation logic of the S3 API Gateway. In vulnerable versions of SeaweedFS, the validation of copy sources was insufficient, especially in the handler for multipart upload copy operations (CopyObjectPartHandler).

The following code comparison highlights how the vulnerability was introduced and subsequently remediated in the official patch. The fix ensures that both the parsed source bucket and the source object key conform to strict naming and path constraints before any filesystem operation occurs.

// Vulnerable implementation in weed/s3api/s3api_object_handlers_copy.go
// Prior to the patch, the copy part handler used a simple non-empty validation
if srcObject == "" || srcBucket == "" {
    glog.Errorf("CopyObjectPart: Invalid copy source - srcBucket=%q, srcObject=%q", srcBucket, srcObject)
    s3err.WriteErrorResponse(w, r, s3err.ErrInvalidCopySource)
    return
}

The patch introduces the ValidateCopySource helper, which is called by both the standard single-object copy handler and the multipart copy handler. This helper executes the standard bucket and object validation routines against the extracted values to block traversal segments.

// Patched implementation in weed/s3api/s3api_copy_validation.go
func ValidateCopySource(copySource string, srcBucket, srcObject string) error {
    // ... basic parsing logic ...
 
    // Reject '.' and '..' segments to ensure the source object remains constrained
    // within the boundary of the authorized source bucket.
    if !s3_constants.IsValidBucketName(srcBucket) || !s3_constants.IsValidObjectKey(srcObject) {
        return &CopyValidationError{
            Code:    s3err.ErrInvalidCopySource,
            Message: "Copy source contains invalid path segments",
        }
    }
 
    return nil
}

By calling IsValidObjectKey on the parsed srcObject, the application leverages existing path validation logic that flags any key containing path traversal components. This blocks the resolver from executing path-collapsing operations on the backend filer.

Exploitation and Attack Methodology

Exploiting CVE-2026-55874 requires standard authenticated S3 credentials with write permissions to at least one bucket. The attacker must also possess knowledge of, or be able to guess, the names of target buckets and specific object keys on the SeaweedFS deployment. Because S3 bucket naming schemes are often predictable, target identification is highly feasible in real-world scenarios.

To initiate the exploit, the attacker crafts a PUT request targeting their own authorized bucket, setting the destination file to any path. The attacker then injects the directory traversal sequence into the X-Amz-Copy-Source header, pointing back from their bucket and traversing forward into the victim's bucket.

PUT /attacker-bucket/exfiltrated-file.dat HTTP/1.1
Host: target-seaweedfs:8333
Authorization: AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/...
X-Amz-Copy-Source: /attacker-bucket/../victim-private-bucket/sensitive-data.xml

When the S3 API Gateway processes this request, it verifies the attacker's write permissions on /attacker-bucket/exfiltrated-file.dat. It then parses the X-Amz-Copy-Source header, leading the backend filer to fetch the data from the resolved path /buckets/victim-private-bucket/sensitive-data.xml. Once the server-side copy completes, the attacker can retrieve the exfiltrated object directly from their own bucket using a standard GET request.

The attack can also be mounted using various encoding techniques to bypass simplistic edge filters. The gateway's parser is vulnerable to standard URL encoding (%2e%2e), alternative path separators (such as backslashes ), and nested directory segments designed to escape deep structures. The dedicated regression test suite added in the patch confirms that all of these variants were viable vectors before the patch.

Impact Assessment

The security impact of CVE-2026-55874 is classified as High, with a CVSS v3.1 base score of 7.7. The attack vector is Network (AV:N), and the complexity is Low (AC:L), meaning it can be reliably exploited without specialized environment configurations. The vulnerability requires Low privileges (PR:L), as any user with valid S3 credentials can act as the attacker.

Crucially, the Scope metric is Changed (S:C) because the vulnerability allows an attacker to cross security boundaries. By forcing the gateway to read data from a bucket outside their administrative scope, the attacker completely undermines the isolation of the SeaweedFS S3 environment. Confidentiality is impacted at a High level (C:H), as all objects stored in any bucket on the deployment are exposed to unauthorized reading.

Because the vulnerability is limited to read operations via the copy mechanism, there is no direct threat to Integrity (I:N) or Availability (A:N). Attackers cannot overwrite or delete files in target buckets through this traversal exploit. However, the exposure of highly sensitive files, such as database backups, configuration files, and application secrets, can easily serve as a stepping stone for further compromise.

Remediation and Mitigation

The definitive remediation for CVE-2026-55874 is upgrading the SeaweedFS deployment to version 4.34 or later. The update introduces the necessary code changes in the S3 API Gateway component to strictly validate incoming copy requests. Deployments can be updated in-place without data migration, as the fix only affects the stateless gateway layer.

If an immediate upgrade is not feasible, organizations should implement virtual patching using a Web Application Firewall (WAF) or an API Gateway positioned in front of the SeaweedFS S3 interface. The WAF should be configured to inspect the X-Amz-Copy-Source header of all inbound PUT requests. Any request containing traversal sequences should be blocked immediately.

Additionally, security administrators should audit SeaweedFS S3 API logs for suspicious copy operations. Look for requests containing parent directory specifiers or percent-encoded variations in the S3 log metadata. Implementing continuous monitoring for unusual data access patterns from low-privilege accounts will help detect exploitation attempts in legacy deployments.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.7/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
EPSS Probability
0.61%
Top 54% most exploited

Affected Systems

SeaweedFS

Affected Versions Detail

Product
Affected Versions
Fixed Version
SeaweedFS
seaweedfs
< 4.344.34
AttributeDetail
CWE IDCWE-22
Attack VectorNetwork
CVSS Score7.7
EPSS Score0.00606
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

The software uses external input to construct a pathname that is intended to identify a file or directory that is located under a restricted directory, but the software does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location outside of the restricted directory.

Known Exploits & Detection

Official Test SuiteRegression test cases validating the behavior of the S3 copy source path traversal payloads.

Vulnerability Timeline

Vulnerability fixed in development branch commit
2026-06-11
SeaweedFS version 4.34 released
2026-07-08
GitHub Security Advisory GHSA-56wq-x3wv-3ff4 published
2026-07-08
CVE-2026-55874 assigned and published
2026-07-08

References & Sources

  • [1]SeaweedFS Fix Commit
  • [2]SeaweedFS Pull Request #9929
  • [3]SeaweedFS Release 4.34
  • [4]GitHub Security Advisory GHSA-56wq-x3wv-3ff4
  • [5]NVD CVE-2026-55874 Details
  • [6]CVE.org 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

•2 minutes ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
1 views•6 min read
•5 minutes ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
1 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•9 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read
•10 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
18 views•5 min read
•10 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
24 views•6 min read