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-XWMW-PRC4-V3CR

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

Alon Barad
Alon Barad
Software Engineer

Sep 19, 2026·6 min read·17 visits

Executive Summary (TL;DR)

Unauthenticated OAuth client registration and missing audience validation allow attackers to harvest administrative JWTs via a silent, zero-interaction authorization flow redirection.

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.

Vulnerability Overview

The Obot Platform is an open-source system designed for orchestrating AI agents and Model Context Protocol (MCP) servers. To secure its control plane and manage agent access, the platform integrates an internal OAuth 2.0 authorization server. When authentication is enabled via the OBOT_SERVER_ENABLE_AUTHENTICATION=true configuration, this server governs how users and components authenticate and access APIs.

In versions prior to v0.23.0, the platform exposed a critical security flaw involving its OAuth flow. The vulnerability arises from three interacting weaknesses: unauthenticated dynamic client registration, a consentless authorization sequence, and a complete lack of audience validation during JWT verification. An attacker can exploit this combination to execute a silent privilege escalation attack.

This architecture permits an external adversary to register a malicious client, trick an authenticated administrator into navigating to a crafted authorization URL, and steal their OAuth authorization code. Because the platform does not validate the token audience, the resulting token grants the attacker full control over the Obot Server.

Root Cause Analysis

The security failure of GHSA-XWMW-PRC4-V3CR is caused by three separate implementation flaws. The first flaw is located in the dynamic client registration endpoint (/oauth/register). This endpoint was exposed publicly without authentication, allowing any remote client to register arbitrary redirect URIs.

The second flaw occurs within the OAuth authorization workflow. The Obot Server lacked a consent screen or confirmation step. If an authenticated user accessed the /oauth/authorize endpoint, the server assumed immediate consent, issuing an authorization code and redirecting the browser automatically.

The final and most critical flaw lies in the token verification subsystem of the Obot core API. While the server issues JSON Web Tokens (JWT) with an audience (aud) claim matching the requested Model Context Protocol (MCP) server, the API gateway verified only the signature and issuer. It omitted validation of the aud claim, allowing scoped MCP tokens to be accepted as administrative credentials.

Code Analysis & Flow Mapping

The vulnerable authentication logic failed to cross-reference the client identity with the intended token audience during JWT validation. The following conceptual Go implementation illustrates the missing validation check in the token parsing logic.

// VULNERABLE: Token parsing logic in < v0.23.0
func ValidateTokenVulnerable(tokenStr string, secret []byte) (*Claims, error) {
    token, err := jwt.ParseWithClaims(tokenStr, &Claims{}, func(t *jwt.Token) (interface{}, error) {
        return secret, nil
    })
    if err != nil {
        return nil, err
    }
    claims, ok := token.Claims.(*Claims)
    if !ok || !token.Valid {
        return nil, errors.New("invalid token")
    }
    // MISSING: Validation of the audience claim (claims.Audience)
    // The server trusts any signed token containing group mappings
    return claims, nil
}

In the patched version (v0.23.0), the validation subsystem explicitly checks that the target audience corresponds strictly to the expected service. The repaired code path ensures that specialized tokens are rejected on administrative routes.

// PATCHED: Enforced audience validation in >= v0.23.0
func ValidateTokenPatched(tokenStr string, secret []byte, expectedAudience string) (*Claims, error) {
    token, err := jwt.ParseWithClaims(tokenStr, &Claims{}, func(t *jwt.Token) (interface{}, error) {
        return secret, nil
    })
    if err != nil {
        return nil, err
    }
    claims, ok := token.Claims.(*Claims)
    if !ok || !token.Valid {
        return nil, errors.New("invalid token")
    }
    // PATCH: Explicitly check the audience claim
    if claims.Audience != expectedAudience {
        return nil, errors.New("audience mismatch: token is unauthorized for this endpoint")
    }
    return claims, nil
}

This logic prevents scoped OAuth tokens from being used outside their designed context. Even if an attacker registers a client and obtains a token, the token is bound to a specific audience and is useless for administrative API execution.

Exploitation Methodology

Exploitation of this vulnerability requires a multi-stage process where the attacker establishes a rogue client and redirects an active administrative session. First, the attacker registers a client pointing to a remote server. Because registration is unauthenticated, no API key or session is required to establish this rogue client.

The attacker then constructs an authorization link containing the registered client ID and sends it to the targeted administrator. The target, possessing an active session on the Obot server, opens the link. The server immediately generates an authorization code and redirects the victim's session to the attacker's server.

The attacker exchanges this code for a JWT. Although this JWT was issued under the guise of an MCP server scope, the attacker submits it to the administrative endpoints. Due to the lack of audience checks, the API processes the request with administrative rights. The following diagram illustrates this sequence.

Impact Assessment

The impact of GHSA-XWMW-PRC4-V3CR is classified as high because it allows complete control over the Obot Platform's data and agent systems. Because the tokens capture the full group memberships of the authorized user, an attacker gaining an administrator's token achieves administrative parity. They can modify workflows, read sensitive parameters, and access internal configurations.

The CVSS v3.1 base score is assessed at 8.8 (High). The primary mitigating factor in this vector is the requirement for User Interaction (UI:R), as the administrator must navigate to the authorization URL. However, the attack requires no privileges (PR:N) and is highly reliable once the victim triggers the link.

Since this is tracked via a GHSA advisory without an active CVE, it is not currently listed on the CISA KEV or tracked by public EPSS systems. Nonetheless, because the underlying primitives utilize standard OAuth registration and exchange flows, the exploitability of this issue is high and reliable.

Remediation & Mitigations

The primary remediation path is upgrading the Obot installation to version 0.23.0 or later. This release addresses the vulnerability by introducing three defensive layers. First, a mandatory consent dialog is presented to the user, blocking auto-completion of authorization requests. Second, issued tokens are tightly scoped to specific MCPs. Finally, the core API enforces audience verification.

If upgrading is not immediately feasible, operators should apply temporary access controls. Network policies can be configured to block access to the /oauth/register endpoint from public networks. This prevents external actors from registering clients and interrupts the first stage of the attack chain.

Additionally, operators can temporarily disable authentication by setting the environment variable OBOT_SERVER_ENABLE_AUTHENTICATION=false. This configuration removes the vulnerable OAuth server code from the active execution path. However, this is an emergency measure and should only be applied within trusted networks.

Technical Appendix

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

Affected Systems

Obot Platform (github.com/obot-platform/obot) running with OBOT_SERVER_ENABLE_AUTHENTICATION=true

Affected Versions Detail

Product
Affected Versions
Fixed Version
obot
obot-platform
< 0.23.0v0.23.0
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS Score8.8
EPSS ScoreN/A (No CVE Assigned)
ImpactRemote Code Execution / Privilege Escalation
Exploit StatusPoC Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-863
Incorrect Authorization

Incorrect Authorization

Vulnerability Timeline

Vulnerability identified and disclosed via GitHub Security Advisory
2024-11-20
Patch released in Obot version v0.23.0
2024-11-20

References & Sources

  • [1]Official GitHub Security Advisory
  • [2]GitHub Advisory Database Entry
  • [3]Official Patched Release (v0.23.0)

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