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



GHSA-P6PH-3JX2-3337

GHSA-P6PH-3JX2-3337: Horizontal Privilege Escalation and Metadata Information Disclosure via Bleve Search in OpenList

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 25, 2026·5 min read·5 visits

Executive Summary (TL;DR)

A flaw in the directory verification logic using strings.HasPrefix allows low-privileged users to search and view metadata of sibling directories. Additionally, Bleve search queries leak global hit statistics, allowing blind metadata verification across restricted scopes.

OpenList version 4.2.3 and prior is vulnerable to an authorization bypass and metadata leakage. When configured with the Bleve search engine backend, OpenList fails to perform separator-aware path matching when validating tenant containment. This allows authenticated users to access sibling directories sharing similar name prefixes. Furthermore, the search backend returns unfiltered global result counts, leaking existence verification data of unauthorized files via side-channel analysis.

Vulnerability Overview

OpenList is a Go-based self-hosted file list and storage service designed to organize and index user-uploaded assets. To provide fast lookup and retrieval capabilities, the system integrates the Bleve search engine backend, indexing metadata such as names, types, sizes, and parent directories of files.

The search component exposes an API endpoint (/api/fs/search) that receives query parameters from authenticated clients and scopes results according to defined user namespaces. Multi-tenant partitioning is enforced by validating that retrieved files reside within a designated directory subtree, referred to as the BasePath restriction.

However, logical flaws in path validation and result summary compilation allow clients to bypass these directory restrictions. By exploiting these weaknesses, low-privileged users can execute horizontal privilege escalation, mapping restricted directory trees and identifying sensitive files across directories they do not own or possess authorization to read.

Root Cause Analysis

The authorization bypass stems from an insecure path verification implementation inside the directory containment handler. To ensure a returned node belongs to the requesting client's tenant namespace, the server verifies if the file's parent directory starts with the user's restricted base path.

Prior to version 4.2.4, this validation check was performed in server/handles/search.go and server/handles/sharing.go using the Go standard library function strings.HasPrefix(node.Parent, user.BasePath). Because strings.HasPrefix behaves as a character-by-character string comparator, it is not path-separator aware. It fails to evaluate structural directory boundaries denoted by the / symbol.

If a victim directory is situated at /base2 and the attacker's restricted scope is /base, the evaluator processes strings.HasPrefix("/base2", "/base"). This returns true because /base2 starts with the literal string /base. The system mistakes the sibling folder /base2 for a child of /base, bypassing the containment logic.

A secondary flaw resides in how search result volumes are tracked and returned. When searching, the global Bleve engine queries matches and computes total hit counts. The system returns the un-cleansed global total value back to the user response payload, exposing a side-channel metadata leak. Even when subsequent ACL controls filter unauthorized file nodes from the response body, the global match count persists, confirming the existence of matching documents globally.

Code-Level Analysis and Patch Verification

In the vulnerable version of the codebase, path validation checks were performed directly against raw strings without canonical path-boundary parsing. The server iterated through matching nodes and applied a naive prefix match.

// VULNERABLE LOGIC IN server/handles/search.go
for _, node := range nodes {
    if !strings.HasPrefix(node.Parent, user.BasePath) {
        continue
    }
    // ...
}

To resolve the directory containment failure, the remediation replaced strings.HasPrefix with a utility method utils.IsSubPath(). The IsSubPath function splits the directories into distinct segments based on the system delimiter, preventing sibling boundary traversal.

// PATCHED LOGIC IN server/handles/search.go
for _, node := range nodes {
    if !utils.IsSubPath(user.BasePath, node.Parent) {
        continue
    }
    // ...
}

To address the side-channel leakage, the second patch implemented the SearchFiltered function inside the Bleve search client. Instead of calculating the overall search count beforehand, the function processes nodes in chunks of 1000, calling the path separator and ACL filter function first, incrementing the total counter only for authorized records.

// PATCHED BATCH PROCESSING IN internal/search/bleve/search.go
for _, hit := range searchResults.Hits {
    node := searchNodeFromHit(hit)
    if !utils.IsSubPath(req.Parent, node.Parent) || filter != nil && !filter(node) {
        continue
    }
    if total >= from && total < to {
        result = append(result, node)
    }
    total++
}

Exploit Methodology

To execute the sibling path traversal, an attacker must first authenticate and obtain a valid session token. The user then constructs a POST request targeting the search endpoint /api/fs/search seeking files in sibling directories.

POST /api/fs/search HTTP/1.1
Host: target-instance.local
Authorization: Bearer <session-token>
Content-Type: application/json
 
{
  "parent": "/",
  "keywords": "confidential",
  "page": 1,
  "per_page": 10,
  "scope": 0
}

If the system is vulnerable and contains a directory /base2 where the attacker is restricted to /base, files matching the keyword within /base2 will bypass prefix validation. The server returns the structural metadata including file paths and sizes in the JSON response payload.

If strict folder-level access passwords block the returned array from displaying the node parameters, the attacker relies on the side-channel count. By checking if the returned total count is greater than zero, the user confirms the presence and quantitative volume of matching records, permitting systematic brute-force keyword verification across the entire server archive.

Impact Assessment

The overall impact of this vulnerability is a partial compromise of confidentiality. Attackers who possess low-privileged access to the application can map out directory structures, identify files, and gather quantitative data across administrative or private namespaces.

The inability of the server to cleanly segregate user namespaces breaks multi-tenant configurations. Sibling organizations hosted on the same server can discover information about each other's storage directories.

This vulnerability does not directly impact the integrity or availability of files on the system, as the bypass does not grant unauthorized write, delete, or modify actions. However, the data gathered via directory structure mapping can be chained with other exploits to target specific assets.

Remediation and Mitigation

Organizations running OpenList should immediately upgrade instances to version 4.2.4 or higher. This release integrates structural path boundary evaluations using utils.IsSubPath and restricts Bleve statistical counts, addressing both vector points.

If immediate software upgrade is unfeasible, administrators can mitigate the issue by disabling global search indexing. Disabling the Bleve search mode shuts down the vulnerable endpoint, preventing exploitation.

Additionally, administrators can implement a defensive naming convention for tenant directories. Ensuring that user base paths do not share overlapping prefix character sequences (e.g., separating /user-data/ from /user-archive/ by using random strings or distinct subdirectories) blocks character-based prefix match bypasses.

Official Patches

OpenListTeamOpenList version 4.2.4 patch release download

Fix Analysis (2)

Technical Appendix

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

Affected Systems

OpenList instances with search indexing configured to Bleve

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenList
OpenListTeam
<= 4.2.34.2.4
AttributeDetail
CWE IDCWE-639, CWE-200
Attack VectorNetwork
CVSS v3.1 Score4.3 (Medium)
Exploit Statuspoc
CISA KEV StatusNo
Fixed Version4.2.4
EcosystemGo

MITRE ATT&CK Mapping

T1083File and Directory Discovery
Discovery
T1213Data from Information Repositories
Collection
T1548Abuse Elevation Control Mechanism
Privilege Escalation
CWE-639
Authorization Bypass Through User-Controlled Key

The application fails to restrict directory traversal access by comparing subpath scopes without path delimiter verification, leaking matching metadata structures.

Known Exploits & Detection

GitHub Security AdvisoryVulnerability overview with reproduction configuration setup instructions.

Vulnerability Timeline

Boundary validation code fix patch commit developed.
2026-07-09
Search results pre-filtering verification logic commit implemented.
2026-07-23
GitHub Security Advisory GHSA-P6PH-3JX2-3337 published.
2026-07-24
OpenList release v4.2.4 made available.
2026-07-24

References & Sources

  • [1]OpenList Advisory Details (GHSA-P6PH-3JX2-3337)
  • [2]OpenList Source Code Repository
  • [3]Remediation Patch Commit: Directory Boundaries
  • [4]Remediation Patch Commit: Search Filter Count Leak

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

•22 minutes ago•GHSA-95CV-R8X4-VH75
7.6

GHSA-95cv-r8x4-vh75: Path Traversal Vulnerability in OpenList Batch Rename Handler

A critical path traversal vulnerability has been identified in the OpenList Go-based backend package. The vulnerability exists within the batch rename handler because the application does not validate the source filename parameter before constructing filesystems paths. This omission allows authenticated users to escape their designated directory and rename files in sibling paths.

Amit Schendel
Amit Schendel
0 views•7 min read
•about 2 hours ago•GHSA-86CX-WWF4-PHQ4
6.5

GHSA-86cx-wwf4-phq4: Path Prefix Confusion Authorization Bypass in OpenList

An authorization bypass vulnerability in OpenList version 4.2.3 and below allows authenticated users to read arbitrary files outside of their designated base directories due to an insecure path prefix check using Go's standard strings.HasPrefix function.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 3 hours ago•CVE-2026-16584
7.0

CVE-2026-16584: Security Policy Bypass in AWS API MCP Server via Startup Initialization Failure

A security policy bypass vulnerability exists in the AWS API MCP Server (awslabs-aws-api-mcp-server) from version 0.2.13 through 1.3.46. When the server fails to load the read-only operations index during startup (due to transient network failures, file permission issues, or other exceptions), it logs a warning but continues running in an insecure, degraded state. Under this condition, the security policy engine fails open, silently skipping all subsequent security checks and consent prompts for the lifetime of the process. This permits unauthorized mutating AWS CLI commands to execute via indirect prompt injection attacks.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 4 hours ago•GHSA-6V4M-FW66-8R4X
6.5

GHSA-6V4M-FW66-8R4X: Path Disclosure and Shell Expansion Bypass in Shescape

An incomplete escaping vulnerability in the npm package 'shescape' allows unauthenticated users to trigger dynamic shell expansions, absolute path disclosure, and command block break-outs on Unix and Windows systems.

Alon Barad
Alon Barad
5 views•7 min read
•about 5 hours ago•GHSA-W4HW-QCX7-56PR
9.2

GHSA-W4HW-QCX7-56PR: OS Command Injection in Shescape via Unescaped Parentheses on Windows CMD

A critical command injection vulnerability in the shescape npm library affects Windows systems when running shell commands using cmd.exe. The escaping function fails to neutralize parentheses, allowing attackers to close shell blocks and execute arbitrary commands.

Amit Schendel
Amit Schendel
11 views•5 min read
•about 6 hours ago•GHSA-Q53C-4PRM-W95Q
6.3

GHSA-q53c-4prm-w95q: Unix Home Directory Path Disclosure and Command Escaping Flaws in Shescape

An escaping bypass in the npm package shescape on Unix platforms utilizing the Dash shell can result in unauthorized home directory path disclosure. The vulnerability occurs when user input containing specific sequences is passed inside shell variable assignment contexts. Additionally, the patch addresses secondary security gaps related to Zsh extended globbing and Windows CMD command block breakouts.

Amit Schendel
Amit Schendel
6 views•6 min read