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

CVE-2026-63458: Broken Object Level Authorization (BOLA) and Tenant Isolation Bypass in Perses

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 19, 2026·6 min read·45 visits

Executive Summary (TL;DR)

Authenticated users with viewer access can bypass tenant boundaries and view configurations of unauthorized projects due to inconsistent parameter evaluation in Perses backend services.

An authorization bypass and tenant isolation vulnerability in Perses prior to version 0.54.0-beta.3 allows authenticated viewers to access unauthorized project resources by manipulating query parameters or querying unmapped ephemeral endpoints.

Vulnerability Overview

Perses is an open-source observability dashboard and visualization platform designed for multi-tenant environments.

Multi-tenancy in Perses relies on project boundaries to isolate dashboards, datasources, folders, variables, and secrets.

Security boundaries must prevent users assigned to one project from viewing or modifying resources belonging to another project.

Prior to version 0.54.0-beta.3, Perses suffered from a significant Broken Object Level Authorization (BOLA) vulnerability.

The application evaluated permissions based on path parameters but retrieved data using client-controlled query parameters.

This inconsistency allowed authenticated users with minimum viewer access to bypass project isolation and read sensitive resource metadata from arbitrary projects.

Root Cause Analysis

The root cause of the vulnerability lies in the parameter precedence logic inside the Perses API service layer.

Specifically, the helper function manageQuery processed incoming query filters before interacting with the database.

When a client requested a list of resources, the API extracted the project scope from both the HTTP request path and the URL query parameters.

In the vulnerable implementation, manageQuery prioritized existing values in the query object over the validated path parameter.

If the project key was present in the query string, the helper skipped overriding it with the authorized path variable.

Consequently, the authorization middleware performed access checks against the safe path parameter, while the database query execution layer proceeded to retrieve records using the attacker-controlled query parameter.

Additionally, a secondary gap existed within the authorization middleware's path registration.

The middleware classified incoming requests as project-scoped or global by checking their paths against a static list.

Because the endpoint for Ephemeral Dashboards (PathEphemeralDashboard) was omitted from this registration array, all requests targeting ephemeral dashboards bypassed project-scoped authorization entirely.

Code Analysis

The vulnerable code in the service layer relied on manageQuery to resolve the target project.

The function failed to enforce alignment between the authorized parameter and the query filter:

// Vulnerable implementation of manageQuery
func manageQuery(q *dashboard.Query, params apiInterface.Parameters) (*dashboard.Query, error) {
    query, err := deep.Copy(q)
    if err != nil {
        return nil, fmt.Errorf("unable to copy the query: %w", err)
    }
    // If the query parameter is already populated, this override is skipped
    if len(query.Project) == 0 {
        query.Project = params.Project
    }
    return query, nil
}

The remediation removed manageQuery entirely and established query verification in the central toolbox component.

The toolbox now enforces strict parity between the path scope and the query parameter:

// Patched logic in internal/api/toolbox/list.go
func (t *toolbox[T, K, V]) list(ctx echo.Context, parameters apiInterface.Parameters, query V) (any, error) {
    projectQueryParameter := query.GetProjectQueryParam()
    if len(projectQueryParameter) > 0 {
        // Enforce strict matching between the path-defined project and query-defined project
        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))
        }
        // Override parameter to ensure authorization is performed on the actual target
        parameters.Project = projectQueryParameter
    }

To resolve the second issue, the middleware utility array was updated to include the missing ephemeral path variable:

// Patched internal/api/utils/utils.go
var ProjectResourcePathList = []string{
    PathDashboard,
    PathEphemeralDashboard, // Added to enforce authorization checks
    PathDatasource,
    PathFolder,
    PathRole,
    PathRoleBinding,
    PathSecret,
    PathVariable,
}

Exploitation Methodology

To exploit this vulnerability, an attacker must first obtain valid credentials with viewer permissions for at least one project on the target Perses instance.

The attacker does not require administrative privileges.

This low prerequisite threshold increases the likelihood of internal exploitation in multi-tenant environments.

The attacker crafts a standardized HTTP GET request to a project-scoped list endpoint.

The request targets the project for which the attacker possesses authorization, but appends the target project's name as a query parameter.

The following diagram illustrates the vulnerable flow and the authorization bypass mechanism:

When the query parameter is processed, the backend queries the database for resources matching the query value instead of the path value.

The server returns the configuration objects of the unauthorized tenant, exposing credentials, data source locations, and dashboard layouts.

Impact Assessment

The impact of CVE-2026-63458 is classified as High, with a CVSS v4.0 base score of 7.1.

The attack vector is Network, requiring Low privileges and zero user interaction.

The primary impact is to Confidentiality, which is assessed as High.

An attacker can read the complete database schema, connection endpoints, credentials, and variable configurations of other projects.

For datasources, this exposure could reveal sensitive system metrics, internal infrastructure topology, or monitoring credentials.

Because the vulnerability does not allow modification of resources or interruption of service, Integrity and Availability impacts are rated as None.

While there is no current evidence of active exploitation in the wild, the vulnerability presents a significant risk to organizations utilizing Perses as a shared, multi-tenant monitoring service.

Security teams should treat this as a high-priority exposure in environments where sensitive data is separated on a project-by-project basis.

Remediation and Mitigation

The recommended and complete remediation for CVE-2026-63458 is upgrading the Perses server installation to version 0.54.0-beta.3 or higher.

This release contains the updated verification pipeline in the toolbox module that rejects mismatched requests.

If upgrading is not immediately possible, security teams can implement temporary Web Application Firewall (WAF) or reverse proxy rules.

The rules should analyze incoming GET requests to /api/v1/projects/ paths.

If the request contains a query parameter named project that does not match the project name in the path, the request must be blocked and a 400 Bad Request returned.

Organizations should also conduct a retrospective log analysis of their web server access logs.

Search for HTTP requests that access project resources and contain the project query parameter.

Comparing the path segment against the query parameter value will help identify any past exploitation attempts.

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 Platform

Affected Versions Detail

Product
Affected Versions
Fixed Version
perses
perses
< 0.54.0-beta.30.54.0-beta.3
AttributeDetail
CWE IDCWE-639
Attack VectorNetwork (AV:N)
CVSS Score7.1
EPSS Score0.0
ImpactConfidentiality High (VC:H)
Exploit Statusnone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1592Gather Victim Org Information
Reconnaissance
T1020Automated Ad-Hoc Querying
Discovery
CWE-639
Authorization Bypass Through User-Controlled Key

The system fails to prevent a user from accessing resources of other tenants by modifying a key (the project query parameter) that directly controls which object is retrieved.

Vulnerability Timeline

Core patch developed and verified by security team.
2026-06-30
Fix commit merged into the main repository branch.
2026-07-03
Release of CVE-2026-63458 and corresponding advisory GHSA-cjgj-2fwf-4c2w.
2026-09-18

References & Sources

  • [1]Official GitHub Security Advisory
  • [2]Remediation Fix Commit
  • [3]Release Tag Details
  • [4]NVD Vulnerability Record
  • [5]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 9 hours ago•CVE-2026-62374
7.1

CVE-2026-62374: Silent Claim-Set Reduction and Verification Bypass in SD JWT JS

CVE-2026-62374 (GHSA-f9j6-8p6x-r9j6) is a verification bypass vulnerability in the OpenWallet Foundation SD JWT JS library (@sd-jwt/core and @sd-jwt/decode versions 0.19.0 and earlier). Due to permissive UTF-8 decoding and the omission of mandatory reference checks during presentation verification, tampered or unreferenced disclosures are silently dropped rather than rejected. This deviates from RFC 9901 §7.1 requirements and allows attackers to execute silent claim-set reduction attacks against relying parties.

Alon Barad
Alon Barad
7 views•10 min read
•about 10 hours ago•GHSA-J656-3HF2-FVJC
6.1

GHSA-j656-3hf2-fvjc: Read-Only SQL Validation Bypass via Comment Interpretation Conflict in Bytebase DBHub

An interpretation conflict in Bytebase DBHub (< 0.22.6) allows attackers to bypass read-only SQL query restrictions when connected to MySQL or MariaDB instances. Because DBHub's custom SQL tokenizer treats any '--' sequence as a comment, whereas MySQL and MariaDB require trailing whitespace or a control character, crafted queries containing '--' immediately followed by non-whitespace characters allow stacked destructive SQL statements to execute on connections configured as read-only.

Alon Barad
Alon Barad
6 views•9 min read
•2 days ago•CVE-2026-118777
4.8

CVE-2026-118777: Prototype Pollution in Forge HTTP Client Cookie Management

CVE-2026-118777 is a prototype pollution vulnerability (CWE-1321) in the Forge JavaScript cryptography and networking library (distributed on npm as node-forge) prior to version 1.4.1. The flaw resides in the forge.http client subsystem, where incoming HTTP cookie names and paths parsed from Set-Cookie response headers are stored directly into standard JavaScript objects without key validation or property isolation. By returning crafted Set-Cookie headers containing keys such as __proto__ or constructor, a malicious HTTP server can inject arbitrary properties into Object.prototype, attach attributes to the global Object constructor, or delete built-in prototype methods to cause an application-wide denial of service.

Amit Schendel
Amit Schendel
10 views•10 min read
•2 days ago•CVE-2026-118775
3.7

CVE-2026-118775: ASN.1 OID First Arc Truncation and Ambiguity in node-forge

CVE-2026-118775 (GHSA-4642-5mcj-2rqw) is an integer overflow and validation flaw in the ASN.1 serialization module of Forge (node-forge) prior to version 1.4.1. The asn1.oidToDer() function fails to validate the range of the first two arcs of an Object Identifier (OID) and truncates the packed initial subidentifier to a single 8-bit integer. Applications that perform policy checks on untrusted OID strings before encoding them into Distinguished Encoding Rules (DER) format can be tricked into emitting DER bytes that correspond to a completely different, restricted OID.

Amit Schendel
Amit Schendel
10 views•10 min read
•2 days ago•CVE-2026-119194
7.5

CVE-2026-119194: Algorithmic Complexity Denial of Service in pyasn1 Schemaless ASN.1 Decoder

CVE-2026-119194 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting versions 0.3.3 through 0.6.4. The flaw resides in the schemaless decoding routine ConstructedPayloadDecoderBase._decodeComponentsSchemaless used across BER, CER, and DER codecs. By sending an ASN.1 container populated with child components whose tag identifiers are separated by multiples of CPython's integer hash modulus (sys.hash_info.modulus), an unauthenticated attacker can force worst-case hash collisions in an unbounded Python set, degrading decoding performance from O(N) to O(N^2) and causing a Denial of Service (DoS).

Alon Barad
Alon Barad
9 views•9 min read
•2 days ago•CVE-2026-119195
7.5

CVE-2026-119195: Quadratic-Time Denial of Service in pyasn1 BER/CER/DER Decoders

CVE-2026-119195 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting all versions prior to 0.6.5. When decoding constructed strings or indefinite-length ANY types across BER, CER, and certain DER code paths, the payload decoders repeatedly concatenate incoming fragments onto an immutable bytes object using the += operator. Because Python bytes objects cannot be resized in-place, each fragment iteration allocates a new buffer and copies all previously accumulated bytes, resulting in quadratic O(N^2) time and memory copy complexity. An unauthenticated remote attacker can supply a highly fragmented ASN.1 stream to exhaust CPU cycles and stall application worker threads.

Amit Schendel
Amit Schendel
9 views•10 min read