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-V8QF-FR4G-28P2
4.30.03%

CVE-2026-41908: Scope Enforcement Bypass in OpenClaw Assistant Media Route

Alon Barad
Alon Barad
Software Engineer

Apr 26, 2026·6 min read·3 visits

PoC Available

Executive Summary (TL;DR)

An incorrect authorization vulnerability in OpenClaw's proxy authentication mode allows authenticated users to bypass scope restrictions and read arbitrary assistant media files. The issue is fixed in version 2026.4.20.

OpenClaw versions prior to 2026.4.20 contain a medium-severity authorization bypass vulnerability in the assistant-media gateway route. When configured behind a trusted proxy, the application fails to validate operator scopes, allowing authenticated users with unrelated privileges to access sensitive media files.

Vulnerability Overview

The OpenClaw gateway acts as the central ingestion and routing point for the AI-assistant framework. It exposes multiple functional routes, including the /__openclaw__/assistant-media endpoint. This specific route handles the serving of media files and metadata generated or utilized by the framework's assistant agents.

In distributed deployment architectures, OpenClaw is frequently configured to operate behind a trusted upstream proxy, such as NGINX or Tailscale. This proxy assumes responsibility for the initial authentication phase, subsequently passing the verified user identity and associated scope permissions to the OpenClaw gateway via standardized HTTP headers.

The vulnerability manifests as an incorrect authorization flaw (CWE-863) within the gateway's handling of these proxy-forwarded requests. While the gateway correctly acknowledges the authenticated state of the incoming request, it fails to enforce fine-grained authorization checks on the targeted route. Specifically, the system omits the mandatory verification of the operator.read scope before fulfilling the media retrieval request.

Root Cause Analysis

The root cause of the vulnerability resides in the handleControlUiAssistantMediaRequest function located within the src/gateway/control-ui.ts component. This function processes incoming requests for media assets and implements branching logic predicated on the authentication method identified in the request context.

The logic extracts the authentication methodology into the authResult.method variable. For standard token-based or password-based authentication, the system follows a prescribed path that includes scope validation. However, for identity-bearing authentication methods categorized under the trusted-proxy designation, the implementation diverges.

When a request arrives via a trusted proxy, the function accepts the authenticated identity but erroneously skips the downstream scope enforcement utility. The code lacks a specific gate to verify if the provided identity explicitly possesses the operator.read scope. Consequently, any authenticated session passed by the proxy is granted unrestricted access to the media endpoint, regardless of the actual permissions assigned to that identity.

Code Analysis

Prior to the patch, the handleControlUiAssistantMediaRequest function operated under the flawed assumption that successful upstream proxy authentication inherently granted sufficient privileges for endpoint access. The vulnerable code path checked the authentication status but executed no authorization logic against the requested resource.

Commit 99ef3a63c58440d53f8e45ad861b846032fcb036 addresses this logic gap by introducing an explicit authorization gate for identity-bearing request paths. The patch defines a new boolean condition, trustDeclaredOperatorScopes, which activates when the authentication method relies on external declarations rather than internal tokens or passwords.

const trustDeclaredOperatorScopes =
  authResult.method !== "token" &&
  authResult.method !== "password" &&
  authResult.method !== "none";
 
if (trustDeclaredOperatorScopes) {
  const requestedScopes = resolveTrustedHttpOperatorScopes(req, {
    trustDeclaredOperatorScopes,
  });
  // New enforcement check
  const scopeAuth = authorizeOperatorScopesForMethod("assistant.media.get", requestedScopes);
  if (!scopeAuth.allowed) {
    sendJson(res, 403, {
      ok: false,
      error: {
        type: "forbidden",
        message: `missing scope: ${scopeAuth.missingScope}`,
      },
    });
    return true;
  }
}

The updated implementation extracts the scopes passed by the proxy using resolveTrustedHttpOperatorScopes. It then passes these scopes to a newly introduced method-level enforcement check, authorizeOperatorScopesForMethod, mapping the assistant.media.get action to the broader operator.read requirement. If the required scope is absent, the gateway correctly terminates the request with an HTTP 403 Forbidden response.

Exploitation Methodology

Exploitation of CVE-2026-41908 requires the attacker to fulfill specific environmental prerequisites. The target OpenClaw instance must be configured to utilize a trusted upstream proxy for authentication. Furthermore, the attacker must possess valid credentials capable of satisfying the proxy's authentication requirements, obtaining a baseline authenticated session.

The attacker does not require high-level privileges. A low-privileged account, such as one limited strictly to the operator.approvals scope, is sufficient. The attacker authenticates against the proxy, which subsequently forwards the request to the OpenClaw gateway, appending the verified identity and the restricted scope headers.

To execute the exploit, the authenticated attacker crafts a direct HTTP GET request targeting the /__openclaw__/assistant-media endpoint, appending the specific identifier of a target media file. The OpenClaw gateway receives the proxy-forwarded request, validates the basic authenticated state, but fails to check the specific scope headers against the endpoint's requirements.

The gateway processes the request and returns the unauthorized media file or associated metadata in the HTTP response. The official patch repository contains test cases that serve as implicit proofs-of-concept, demonstrating exactly how these specific HTTP headers trigger the bypass in the vulnerable routing logic.

Impact Assessment

Successful exploitation of this vulnerability yields a direct breach of confidentiality. An attacker gains unauthorized read access to all media files and associated metadata stored within the allowed media roots of the OpenClaw deployment. These assets often contain sensitive output generated by AI assistants, which may include proprietary data, internal communications, or user-submitted information.

The National Vulnerability Database (NVD) evaluates the severity of this flaw at a CVSS v3.1 score of 4.3 (Medium). The scoring vector (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N) reflects a network-based attack vector requiring low privileges and no user interaction, resulting in a low confidentiality impact. VulnCheck provides a lower CVSS v4.0 assessment of 2.3, indicating a reduced perceived severity under the updated scoring framework.

Threat intelligence metrics indicate an extremely low likelihood of active, widespread exploitation. The Exploit Prediction Scoring System (EPSS) assigns this vulnerability a score of 0.00025, placing it in the 6.97th percentile. The necessity of a specific proxy architecture combined with the requirement for valid, albeit low-privileged, authentication credentials significantly restricts the potential attack surface.

Remediation and Mitigation

The primary and definitive remediation for CVE-2026-41908 is to upgrade the OpenClaw gateway component to version 2026.4.20 or any subsequent release. This version incorporates the explicit scope authorization checks required to secure the proxy-authentication routing paths.

In environments where an immediate upgrade is unfeasible, administrators can implement a configuration-based mitigation at the proxy layer. The upstream proxy (e.g., NGINX, Authelia) must be explicitly configured to enforce route-based access control. The proxy should intercept any requests destined for the /__openclaw__/assistant-media path and reject them unless the authenticated user's session explicitly contains the operator.read scope.

Security operations teams can deploy Web Application Firewall (WAF) rules to monitor and enforce these restrictions. The WAF should inspect HTTP GET requests targeting the vulnerable endpoint and validate the presence of the appropriate scope declarations in the authorization or custom identity headers, alerting on or blocking anomalous access attempts.

Official Patches

OpenClawFix commit in OpenClaw repository
GitHubOfficial GitHub Security Advisory

Fix Analysis (1)

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
EPSS Probability
0.03%
Top 93% most exploited

Affected Systems

OpenClaw Gateway

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenClaw Gateway
OpenClaw
< 2026.4.202026.4.20
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS v3.1 Score4.3
EPSS Score0.00025
ImpactConfidentiality
Exploit StatusPoC
CISA KEVFalse

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

Incorrect Authorization

Vulnerability Timeline

Security patch committed to the OpenClaw repository
2026-04-17
Fixed version 2026.4.20 released
2026-04-20
Public disclosure of GHSA-V8QF-FR4G-28P2 and assignment of CVE-2026-41908
2026-04-23

References & Sources

  • [1]GitHub Advisory: GHSA-v8qf-fr4g-28p2
  • [2]OpenClaw Fix Commit
  • [3]VulnCheck Advisory
  • [4]NVD Vulnerability Detail
Related Vulnerabilities
CVE-2026-41908

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.