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

CVE-2026-72921: Incorrect Authorization in SeaweedFS Filer JWT Prefix Match

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 3, 2026·6 min read·6 visits

Executive Summary (TL;DR)

SeaweedFS Filer prior to 4.24 uses raw prefix matching on raw path strings during JWT validation, allowing scoped tokens to authorize unauthorized access to sibling directories (e.g., /tenant1 matching /tenant1234).

SeaweedFS is a distributed storage system. Prior to version 4.24, the Filer JWT validation mechanism used a raw prefix match, allowing scoped tokens to access sibling directories sharing similar name prefixes.

Vulnerability Overview

SeaweedFS is a high-performance distributed storage system designed to store billions of files efficiently. Within its architecture, the Filer component provides a filesystem abstraction layer over the volume servers, supporting metadata storage and access control. To secure multi-tenant environments, the Filer uses JSON Web Tokens (JWT) to enforce directory-level access restrictions.

Prior to version 4.24, the SeaweedFS Filer implemented a path authorization mechanism that contained a significant logic flaw. When validating scoped tokens containing the allowed_prefixes claim, the server used a simple prefix comparison. This check relied on a raw string-matching function rather than a component-aware path evaluation.

This vulnerability, tracked as CVE-2026-72921, allows an attacker with a valid scoped JWT to access unauthorized directories sharing a common string prefix. For instance, a token authorized only for /tenant1 would also grant access to /tenant1234 or /tenant1backup. The issue has been assigned a Common Vulnerability Scoring System (CVSS) v3.1 base score of 8.1.

Root Cause Analysis

The underlying flaw resides within the Filer handler authorization logic inside weed/server/filer_server_handlers.go. When a request is received, the server extracts the JWT claims and iterates over the prefixes specified in claims.AllowedPrefixes. For each configured prefix, the server determines authorization by executing strings.HasPrefix(r.URL.Path, prefix).

The function strings.HasPrefix performs a literal byte-by-byte comparison from the start of the target string. Because this function has no awareness of path delimiters, it treats the path as an arbitrary sequence of characters. It fails to distinguish between a matching directory path component and a sibling path that merely shares a prefix sequence.

Consequently, any folder namespace that begins with the exact characters of an authorized prefix evaluates to true. If a system contains tenants named /tenant1 and /tenant10, the token for the former permits full access to the latter. Furthermore, the lack of path sanitization on input parameters increases the likelihood of inconsistent path resolution down the stack.

Code Analysis

The vulnerable implementation of the authorization check is shown below. This logic evaluates the HTTP request path against the scoped prefixes using raw string manipulation:

// Vulnerable implementation in weed/server/filer_server_handlers.go
if len(claims.AllowedPrefixes) > 0 {
    hasPrefix := false
    for _, prefix := range claims.AllowedPrefixes {
        // Raw string matching without boundary checks
        if strings.HasPrefix(r.URL.Path, prefix) {
            hasPrefix = true
            break
        }
    }
    // ...
}

The patch introduced in SeaweedFS version 4.24 resolves the issue by replacing the literal string check with a structured path segment analysis. The system now utilizes a dedicated helper function called pathHasComponentPrefix. This helper ensures that matches occur exclusively on complete path segment boundaries.

// Patched implementation utilizing path normalization and component checks
func pathHasComponentPrefix(reqPath, prefix string) bool {
    if prefix == "" {
        return false
    }
    // Normalise paths to resolve directory traversal and empty elements
    cleanedPath := path.Clean(reqPath)
    if cleanedPath == "." {
        cleanedPath = "/"
    }
    cleanedPrefix := path.Clean(prefix)
    if cleanedPrefix == "." {
        cleanedPrefix = "/"
    }
    if cleanedPrefix == "/" {
        return true
    }
    if cleanedPath == cleanedPrefix {
        return true
    }
    // Enforce segment boundaries by requiring a trailing slash
    return strings.HasPrefix(cleanedPath, cleanedPrefix+"/")
}

The helper function first normalizes both the request path and the prefix using Go's path.Clean library. This step removes redundant slashes and resolves relative segments like . and ... By appending a trailing slash / to the prefix during the comparison, the function restricts matches to exact folders or their immediate subdirectories.

Exploitation Methodology

An attacker requires a valid JWT with an active allowed_prefixes scope to execute this exploit. The attack vector is entirely network-based and demands low privileges, making it accessible to compromised or malicious tenants. No user interaction or administrative intervention is required to complete the authorization bypass.

The exploitation sequence begins with the attacker identifying sibling directory names that share the suffix boundary of their own authorized folder. In multi-tenant systems, names such as /tenant1_backup or /tenant1-development are highly predictable. The attacker crafts an HTTP request targeting the target sibling directory, embedding their legitimate scoped JWT within the Authorization header.

When the Filer receives the request, the authorization middleware validates the token signature successfully. It then evaluates the target path /tenant1_backup/file.json against the claim /tenant1. The vulnerable strings.HasPrefix check evaluates to true, granting the request read or write access depending on the HTTP method utilized.

Below is a sequence diagram illustrating the vulnerability mechanism:

Impact Assessment

The impact of CVE-2026-72921 is significant within multi-tenant distributed environments. This vulnerability compromises the fundamental isolation boundary between tenants. An attacker can perform unauthorized read and write operations across any folder that matches their assigned prefix sequence.

Unauthorized read access allows for the exfiltration of proprietary data, database backups, and intellectual property stored in adjacent sibling paths. Write access enables an attacker to modify, delete, or overwrite critical files belonging to other tenants. This capability can be leveraged to corrupt systems or inject malicious payloads into shared application paths.

The vulnerability has been assigned a CVSS v3.1 score of 8.1. The vector string CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N reflects high confidentiality and integrity impact. Although there is no direct impact on system availability, data deletion and corruption can result in operational disruption.

Remediation & Mitigation

The primary remediation strategy is to upgrade all SeaweedFS instances to version 4.24 or later. This release completely replaces the vulnerable matching logic with the secure segment-aware verification function. System administrators should verify that the update has been applied across all Filer nodes.

If an immediate upgrade is not feasible, temporary workarounds can be applied via JWT claim configuration. Administrators can modify token issuance policies to append a trailing slash to all AllowedPrefixes values. For example, issuing a scope of /tenant1/ instead of /tenant1 forces the vulnerable string check to require a trailing slash, neutralizing matches against sibling paths like /tenant1234.

Additionally, tenant namespaces can be refactored to eliminate shared character prefixes. Placing tenant directories under structurally unique parents prevents suffix collisions. Security groups should also monitor Filer logs for anomalous access requests targeting paths outside of a user's normal scope.

Official Patches

seaweedfsCommit fixing Filer prefix matching logic
seaweedfsGitHub Security Advisory

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
EPSS Probability
0.24%
Top 85% most exploited

Affected Systems

SeaweedFS FilerWolfiChainguard

Affected Versions Detail

Product
Affected Versions
Fixed Version
SeaweedFS
seaweedfs
< 4.244.24
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork (AV:N)
CVSS v3.1 Score8.1 (High)
EPSS Score0.00238 (0.24%)
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly obtain or evaluate the access rights of the actor, leading to unauthorized access.

Vulnerability Timeline

Fix commit submitted to upstream repository
2026-05-12
GitHub Advisory GHSA-gv5w-hfx8-8cwq published
2026-08-11
SeaweedFS version 4.24 released
2026-08-11
NVD record modified and completed
2026-08-13

References & Sources

  • [1]GitHub Security Advisory GHSA-gv5w-hfx8-8cwq
  • [2]Fix Commit
  • [3]Pull Request #9439
  • [4]SeaweedFS Release 4.24
  • [5]NVD Entry
  • [6]CVE.org Record
  • [7]Wiz Vulnerability Database Reference

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

•34 minutes ago•CVE-2026-72803
6.9

CVE-2026-72803: Information Disclosure via Missing Authorization in SiYuan API

An information disclosure vulnerability exists in the SiYuan personal knowledge management system versions prior to v3.7.4. The application fails to enforce publish-access filters on block attribute retrieval endpoints. Consequently, unauthenticated remote attackers can bypass document-level protection rules (such as password protection or disabled-publish flags) to retrieve sensitive block-level attributes, including aliases, memos, block names, and custom metadata fields, by querying the API using guessed or known block IDs.

Alon Barad
Alon Barad
0 views•7 min read
•about 2 hours ago•GHSA-7J72-F6WG-CXW6
8.6

CVE-2026-68584: Authentication Bypass via Auxiliary Content Endpoints in SiYuan

An authentication bypass vulnerability (classified as CWE-288) exists in the publish-mode component of SiYuan, a Go-based note-taking application. This security flaw allows unauthenticated remote attackers to bypass password-protected note boundaries by leveraging auxiliary block endpoints that fail to enforce document access checks. Attackers can exploit this issue by first harvesting document metadata via a public search endpoint and subsequently fetching full rendered document contents using vulnerable block endpoints. This technical analysis explores the root cause, exploitation methodology, and remediation path.

Alon Barad
Alon Barad
0 views•7 min read
•about 3 hours ago•CVE-2026-77465
7.5

CVE-2026-77465: Uncontrolled Recursion in toml-node Deserializer Leads to Denial of Service

An uncontrolled recursion vulnerability (CWE-674) in the toml-node NPM package (published as toml) prior to version 4.2.0 allows unauthenticated remote attackers to trigger process-wide Denial of Service (DoS) crashes. By submitting TOML payloads with deep bracket or brace nesting, attackers exhaust the V8 runtime stack limit.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 4 hours ago•CVE-2026-73295
5.4

CVE-2026-73295: DOM-based Cross-Site Scripting (XSS) in Material for MkDocs Search Suggestions

CVE-2026-73295 is a DOM-based Cross-Site Scripting (XSS) vulnerability affecting Material for MkDocs versions 7.2.0 through 9.7.6. When the optional 'search.suggest' feature is enabled, the client-side 'mountSearchSuggest' function processes user-controlled inputs from the URL 'q' parameter and writes them directly to the DOM using an unsafe innerHTML sink without sanitization.

Alon Barad
Alon Barad
4 views•6 min read
•about 5 hours ago•CVE-2026-71869
9.3

CVE-2026-71869: Remote Code Execution in Orval via OpenAPI Default Value Template Literal Injection

CVE-2026-71869 is a critical-severity code injection vulnerability in the Orval code generator (packages: orval, @orval/core, @orval/zod) prior to version 8.21.0. This flaw allows remote attackers to execute arbitrary JavaScript code at import-time by embedding malicious payloads into the default values of OpenAPI or Swagger specifications. This report details the root cause, exploitation mechanism, and patch remediation.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 6 hours ago•CVE-2026-61625
6.8

CVE-2026-61625: Arbitrary File Write via Path Traversal in VictoriaMetrics vmrestore

CVE-2026-61625 is a path traversal vulnerability (CWE-22) within the `vmrestore` utility of VictoriaMetrics. When restoring database shards from a compromised or malicious backup source, the application fails to validate the paths of backup parts before creating and writing files. By injecting objects with directory traversal sequences (such as `../`) into the remote backup storage, an attacker can write arbitrary files to out-of-bounds locations on the system executing the restore operation. Depending on the process privileges, this can result in host compromise via remote code execution.

Amit Schendel
Amit Schendel
6 views•6 min read