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

CVE-2026-54917: Cross-Bucket Path Traversal and Authorization Bypass in SeaweedFS S3 and Iceberg Gateways

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 12, 2026·5 min read·112 visits

Executive Summary (TL;DR)

SeaweedFS gateways disable routing path cleaning, allowing '..' segments to reach the backend. This permits users with access to a single bucket to bypass IAM boundaries and read/write files in any other bucket on the cluster.

CVE-2026-54917 is a critical path traversal and authorization bypass vulnerability affecting the S3 and Iceberg REST catalog gateways in SeaweedFS. By explicitly disabling canonical path cleaning in the gorilla/mux routing system, relative path segments such as '..' are allowed to bypass routing constraints and access control checks. When these paths are collapsed server-side by the backend filer, they resolve to folders outside the authorized bucket boundary, allowing unauthorized cross-bucket access.

Vulnerability Overview

SeaweedFS is a highly scalable distributed storage system designed to support object storage (S3), file systems, and Iceberg tables. Within its architecture, the S3 API gateway and the Iceberg REST catalog gateway serve as translation layers, converting high-level object queries into low-level operations processed by the SeaweedFS distributed filer. These gateways rely on the gorilla/mux library for HTTP routing and parameter parsing.

To preserve raw path structures for specific storage use cases, both gateways historically initialized their routing engines with mux.NewRouter().SkipClean(true). Disabling canonical path cleaning prevents the routing engine from resolving relative directory navigation tokens, such as double dots (..), before matching incoming URIs. This configuration leaves the gateways exposed to path manipulation attacks.

When a request contains a directory traversal sequence, the router matches the catch-all pattern and forwards the unmodified path to the application logic. This behavior violates tenant isolation boundaries, as the relative segments remain intact during the routing and authorization phases. The complete bypass allows any authenticated tenant to access assets across the entire cluster.

Root Cause Analysis

The root cause of CVE-2026-54917 lies in a logic discrepancy between the router's path parameter extraction and the backend's path resolution mechanisms. In a standard configuration, relative path elements are normalized at the edge; however, with SkipClean(true) active, the raw traversal tokens bypass edge validation entirely.

When an attacker issues a crafted request, the router assigns the first segment as the {bucket} variable and the remainder as the {object} variable. Because the IAM authorization check is evaluated solely against the extracted {bucket} variable, the gateway validates and permits the request under the assumption that the caller is accessing their own authorized resource.

Following authorization, the gateway constructs the physical storage path by joining the bucket root with the unsanitized object key. The backend filer relies on Go's path.Join or util.JoinPath (which call filepath.Clean) to finalize the path structure. This execution collapses the relative directory sequences, shifting the target of the operation to an unauthorized destination.

Code-Level Analysis

Prior to version 4.30, the S3 API gateway lacked validation checks to verify whether captured route variables contained relative directory traversal sequences. The system's standard variable sanitization function, NormalizeObjectKey, was designed only to convert backslashes and collapse duplicate slashes.

// Vulnerable path resolution logic
func (s3a *S3ApiServer) toFilerPath(bucket, object string) string {
    object = s3_constants.NormalizeObjectKey(object)
    return fmt.Sprintf("%s/%s", s3a.bucketDir(bucket), object)
}

To resolve this vulnerability, the maintainers implemented path validation middleware to intercept incoming requests before handlers process them. This middleware verifies that neither the bucket name nor the object key contains elements capable of traversing directories.

// Patched object key validation checks
func IsValidObjectKey(object string) bool {
    if object == "" {
        return true
    }
    if strings.ContainsRune(object, '\x00') {
        return false
    }
    object = strings.ReplaceAll(object, "\\", "/")
    for _, seg := range strings.Split(object, "/") {
        if seg == "." || seg == ".." {
            return false
        }
    }
    return true
}

This validation logic ensures that any route variable containing null bytes, directory traversal patterns, or structural separators is rejected immediately. The corresponding middleware throws an HTTP 400 Bad Request error before downstream operations are triggered.

Exploitation Methodology

Exploiting CVE-2026-54917 requires that the attacker possess valid S3 API credentials for at least one bucket on the targeted SeaweedFS deployment. Because standard client libraries automatically normalize directory traversal sequences before transmission, attackers must manually construct the raw HTTP requests.

To execute the exploit, a script manually computes and appends the S3 AWS Signature Version 4 (SigV4) headers. The raw HTTP request line is written directly to the socket to prevent the client runtime from removing the traversal characters. The request includes the traversal sequence inside the path parameter, targeting an unauthorized bucket.

# Signature generation logic requires signing the unnormalized canonical URI
wire, canon = build_paths(bucket, target_bucket, key, variant)
payload_sha = hashlib.sha256(body).hexdigest()
headers = sign_v4(method, host, port, wire, canon, ak, sk, region, payload_sha)

When the S3 gateway receives this request, it decodes the URI and authenticates the user for the legitimate bucket. After authorization, the backend resolves the path traversal to perform read or write operations against the target bucket, completely bypassing tenant isolation boundaries.

Impact Assessment

The impact of this vulnerability is critical, as it allows complete horizontal privilege escalation across tenant boundaries. Any user with read or write credentials for a single bucket can access, modify, or delete files across all other buckets on the system.

This bypass undermines the data confidentiality and integrity guarantees of multi-tenant SeaweedFS deployments. Attackers can exfiltrate raw database backups, sensitive system files, or proprietary data objects, or overwrite existing objects with malicious payloads.

This flaw has been assigned a CVSS v3.1 base score of 10.0, reflecting its low complexity, network-based attack vector, and the lack of high-level privileges required to compromise tenant isolation. Because the flaw affects multiple protocol gateways, it represents a systemic vulnerability in the access control layer.

Fix Analysis (1)

Technical Appendix

CVSS Score
10.0/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N
EPSS Probability
0.38%
Top 69% most exploited

Affected Systems

SeaweedFS S3 API GatewaySeaweedFS Iceberg REST Catalog Gateway

Affected Versions Detail

Product
Affected Versions
Fixed Version
SeaweedFS
SeaweedFS
< 4.304.30
AttributeDetail
CWE IDCWE-22
Attack VectorNetwork
CVSS Score10.0
Exploit StatusProof-of-Concept Available
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1005Data from Local System
Collection
CWE-22
Path Traversal

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

Known Exploits & Detection

GitHubhttps://github.com/BiiTts/CVE-2026-54917-SeaweedFS-Cross-Bucket-Traversal

References & Sources

  • [1]https://nvd.nist.gov/vuln/detail/CVE-2026-54917
  • [2]https://github.com/seaweedfs/seaweedfs/security/advisories/GHSA-w62w-66v9-vvgv
  • [3]https://github.com/seaweedfs/seaweedfs/pull/9687
  • [4]https://github.com/seaweedfs/seaweedfs/commit/dd1b4287899eed3dfd73c2f3b1de001996fda229

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

•39 minutes ago•GHSA-78G4-XQWV-Q3G8
7.5

GHSA-78G4-XQWV-Q3G8: Heap-Based Buffer Overflow in Pillow (libopenjp2)

A heap-based buffer overflow vulnerability in Pillow PyPI binary wheels (versions 11.1.0 to 12.x) allows remote code execution or application crash via crafted JPEG 2000 files processed by the bundled libopenjp2 library.

Alon Barad
Alon Barad
4 views•4 min read
•about 2 hours ago•CVE-2026-109618
9.8

CVE-2026-109618: Remote Code Execution in PHP Core via Out-of-Memory longjmp() Uninitialized Memory Access

CVE-2026-109618 (dubbed PHP2Shell) is a critical vulnerability in the PHP engine core resulting from improper out-of-memory exception handling via longjmp(). When request allocation fails mid-processing, non-local control flow bypasses cleanup procedures, leaving memory structures uninitialized or in a use-after-free state during request shutdown.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 2 hours 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
10 views•6 min read
•about 2 hours 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
3 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
•10 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