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

CVE-2026-63445: Arbitrary File Read and Path Traversal in Perses File-System Database Backend

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 19, 2026·6 min read·5 visits

Executive Summary (TL;DR)

Unvalidated project query parameters in Perses allow authenticated path traversal and arbitrary JSON/YAML file reading when using the file-system database.

An arbitrary file read and path traversal vulnerability exists in Perses prior to version 0.54.0-rc.0. When configured with a file-system database backend, the application lacks input validation on the request-controlled project query parameter. An authenticated attacker with low privileges can supply directory traversal sequences to read arbitrary JSON or YAML files on the host file system.

Vulnerability Overview

Perses is an open-source observability dashboard and visualization platform designed to display operational metrics and logs. To manage dashboard assets, credentials, and custom configurations, Perses organizes resources into distinct project boundaries. When deployed with a local file-system database backend, these assets are stored directly on the host disk as JSON or YAML files.

The attack surface exists in the application's list endpoints, such as the dashboards and datasources query APIs. These endpoints expose query parameters that allow users to restrict operations to specific projects. However, the system does not sufficiently sanitize or validate these input parameters against path-traversal sequences before passing them to the file-resolution engine.

An authenticated attacker with low privileges can exploit this flaw by submitting crafted HTTP requests. By injecting path traversal sequences into the project parameter, the attacker can break out of the designated project directory. Consequently, the application will retrieve and display arbitrary configuration files stored on the filesystem.

Root Cause Analysis

The vulnerability stems from an improper implementation of pathname limitations, classified under CWE-22. Perses supports multiple database backends, including an option to store configurations on a local directory hierarchy. When processing list requests, the application extracts the value of the project query parameter to locate the targeted directory on disk.

Before the implementation of the patch, the value of projectQueryParameter was mapped directly into the database query structure. The application failed to perform any input validation, such as checking for directory traversal symbols like dot-dot-slash. Because the backend constructs absolute paths using simple string formatting or unsanitized path joining, these traversal sequences remained intact during system resolution.

During file-system operations, the operating system evaluates the traversal sequences and resolves the path relative to parent directories. This behavior allows the query to escape the intended sandbox directory, which is normally isolated to /var/lib/perses/database/projects/{project}. As a result, the application opens and parses any JSON or YAML formatted files within the privileges of the running daemon.

Code Analysis

An examination of the vulnerable code in the internal/api/toolbox/list.go file shows that the application accepted the project parameter without verification. The extracted value was processed and forwarded directly to the backend database layers. The absence of a sanitization step meant that the backend completed file system queries on any arbitrary resolved path.

// Vulnerable Implementation (Before Patch)
func (t *toolbox[T, K, V]) list(ctx echo.Context, parameters apiInterface.Parameters, query V) (any, error) {
	projectQueryParameter := query.GetProjectQueryParam()
	if len(projectQueryParameter) > 0 {
		if len(parameters.Project) > 0 && parameters.Project != projectQueryParameter {
			return nil, apiInterface.HandleBadRequestError(fmt.Sprintf("the project name in the path (%s) and the project name in the query parameter (%s) are different", parameters.Project, projectQueryParameter))
		}
	}
	// ... subsequent direct database query execution using projectQueryParameter ...
}

The security patch remediates the flaw by introducing strict identifier validation prior to processing. The code now imports the github.com/perses/spec/go/common package and invokes the common.ValidateID() function. This validation logic verifies that the input complies with standard identifier formats, rejecting special characters such as forward slashes, backslashes, and dot segments.

// Patched Implementation
import (
	// ... other imports ...
	"github.com/perses/spec/go/common"
)
 
func (t *toolbox[T, K, V]) list(ctx echo.Context, parameters apiInterface.Parameters, query V) (any, error) {
	projectQueryParameter := query.GetProjectQueryParam()
	if len(projectQueryParameter) > 0 {
		// Added validation to block traversal patterns
		if err := common.ValidateID(projectQueryParameter); err != nil {
			return nil, apiInterface.HandleBadRequestError(fmt.Sprintf("the project name in the query parameter is invalid: %s", err.Error()))
		}
		if len(parameters.Project) > 0 && parameters.Project != projectQueryParameter {
			return nil, apiInterface.HandleBadRequestError(fmt.Sprintf("the project name in the path (%s) and the project name in the query parameter (%s) are different", parameters.Project, projectQueryParameter))
		}
	}
	// ... subsequent safe query execution ...
}

Exploitation Methodology

To execute this exploit, an attacker must first obtain valid credentials to the target Perses instance. Even low-privileged account credentials are sufficient since the vulnerable list API endpoints do not require administrative privileges. Once authenticated, the attacker can leverage standard API utilities or web browsers to send crafted HTTP queries.

The attacker constructs an HTTP GET request to endpoints like /api/v1/dashboards or /api/v1/datasources. By appending a modified project query parameter containing traversal sequences, the attacker instructs the backend to look outside its normal sandbox. For example, a parameter such as ?project=../../another-project directs the file resolution engine to load configuration details from a separate, isolated tenant.

Because the backend expects files to conform to YAML or JSON schemas, arbitrary binary or plain text files may cause the parser to fail. However, any structural application metadata, credential stores, or other project configurations stored in these formats are parsed successfully. The resulting server response exposes the contents of the target files to the attacker, leading to unauthorized information disclosure.

Impact Assessment

The impact of this vulnerability is assessed as High, with a CVSS v4.0 base score of 7.1. The primary security consequence is the loss of confidentiality across project boundaries. In multi-tenant environments where projects are intended to remain isolated, an attacker can enumerate and read configurations belonging to other users.

Furthermore, dashboards and datasources often contain sensitive configuration parameters. These files may store plaintext database credentials, API tokens, connection strings, or system metadata. Access to these parameters allows an attacker to compromise downstream systems, pivoting deeper into the organization's infrastructure.

Because the vulnerability is limited to file-system-based databases, environments running external databases such as Etcd are unaffected. However, for vulnerable deployments, the exploitation process leaves standard HTTP logs, which might not immediately indicate the malicious nature of the path traversal. This stealth increases the likelihood of prolonged exposure before detection.

Remediation and Mitigation

The primary remediation path is to upgrade the Perses installation to version 0.54.0-rc.0 or higher. This update integrates the identifier validation logic across all affected list API endpoints. By implementing this validation, the application successfully blocks requests containing path traversal sequences at the input validation stage.

If upgrading immediately is not viable, administrators should deploy defense-in-depth measures. A Web Application Firewall (WAF) or reverse proxy can be configured with rules to inspect query parameters. Rules should block incoming HTTP requests containing sequences like ../, ..%2f, or ..\ in the project query parameter.

Additionally, applying the principle of least privilege to the Perses operating system user reduces the attack surface. Ensure the Perses service runs under a dedicated, non-privileged user account. Restricting host-level directory access prevents the service from reading sensitive configurations even if the application layer is compromised.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.1/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N

Affected Systems

Perses (observability dashboard and visualization project)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Perses
Perses
< 0.54.0-rc.00.54.0-rc.0
AttributeDetail
CWE IDCWE-22
Attack VectorNetwork
CVSS v4.0 Score7.1
Privileges RequiredLow
Exploit StatusNone
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 product uses external input to construct a pathname that is intended to identify a file or directory that is located beneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.

References & Sources

  • [1]GitHub Security Advisory GHSA-vr5f-w35q-98jp
  • [2]NVD Vulnerability Entry
  • [3]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

•about 1 hour ago•CVE-2026-63199
8.3

CVE-2026-63199: Cross-Scope Secret Disclosure via Missing Authorization in Perses Datasource Proxy

CVE-2026-63199 is a critical missing authorization vulnerability (CWE-862) in Perses versions 0.43.0 to 0.54.0-rc.0. It allows low-privileged attackers to retrieve and exfiltrate highly sensitive credentials (secrets) from different scopes by configuring a malicious datasource pointing to an attacker-controlled endpoint.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 3 hours ago•CVE-2026-59163
9.1

CVE-2026-59163: Critical JWT Authentication Bypass in Mnemosyne Sync Server

CVE-2026-59163 is a critical authentication bypass vulnerability in the Mnemosyne sync server. In versions prior to v3.10.1, the server's authentication logic decoded incoming JSON Web Tokens (JWT) but completely skipped cryptographic signature verification. An unauthenticated remote attacker can exploit this vulnerability to bypass authentication, impersonate arbitrary users, read synchronized AI agent states, or write malicious database updates.

Alon Barad
Alon Barad
5 views•7 min read
•about 4 hours ago•CVE-2026-85058
7.5

CVE-2026-85058: Missing Authorization in Moquette MQTT Broker Last Will and Testament Feature

An authorization bypass vulnerability exists in the Moquette MQTT broker prior to version 0.18.1. When an MQTT client registers a Last Will and Testament (LWT) topic during its connection setup, the broker fails to perform write-access checks on that topic. Upon an abrupt client disconnection, the broker publishes the registered Will message to subscribers of the unauthorized topic, bypassing configured Access Control Lists (ACLs).

Amit Schendel
Amit Schendel
5 views•8 min read
•about 5 hours ago•CVE-2026-71537
6.5

CVE-2026-71537: Credit-Refund Double-Spend Race Condition in Paymenter Service Downgrade

A concurrent execution vulnerability (CWE-362) exists in the Paymenter webshop solution within the service downgrade execution path (doUpgrade). Authenticated customers can exploit this concurrency issue by sending concurrent HTTP requests to trigger multiple parallel executions of the refund process. Because the application checks for pending upgrades without database transactional isolation or exclusive row locks, attackers can generate multiple duplicate refunds to their account balance for a single downgrade action. This leads to arbitrary credit inflation on the platform.

Amit Schendel
Amit Schendel
5 views•9 min read
•about 6 hours ago•GHSA-XWMW-PRC4-V3CR
8.8

GHSA-XWMW-PRC4-V3CR: OAuth Dynamic Client Registration Enables API Token Theft via Audience Confusion in Obot Platform

A critical security vulnerability exists in the Obot Platform (versions < 0.23.0) where unauthenticated OAuth dynamic client registration, a consentless authorization flow, and a lack of JWT audience validation enable remote attackers to steal API tokens via audience confusion.

Alon Barad
Alon Barad
6 views•6 min read
•about 7 hours ago•GHSA-PR6H-VR44-XQ8J
5.3

GHSA-PR6H-VR44-XQ8J: Authentication Bypass in Obot Model Context Protocol (MCP) Registry API

An authentication bypass vulnerability in Obot versions <= v0.22.1 allows unauthenticated remote attackers to access Model Context Protocol (MCP) registry metadata and retrieve server lists when OBOT_SERVER_ENABLE_REGISTRY_AUTH is configured. This is due to a routing logic flaw where `/v0.1` paths are incorrectly categorized as public frontend user interface assets.

Amit Schendel
Amit Schendel
5 views•8 min read