Jun 19, 2026·5 min read·20 visits
A missing authorization check (CWE-862) in the OpenClaw 'focus' command allows authenticated low-privilege users to change the gateway's focus state, bypassing configured controlScope isolation boundaries.
An authorization bypass vulnerability in OpenClaw versions prior to 2026.4.25 allows authenticated users to execute the 'focus' command without proper controlScope validation. Because the routing engine fails to enforce configured access policies on this specific command pathway, low-privilege operators can alter the gateway's global focus state, leading to potential unauthorized cross-channel or cross-session interaction depending on downstream configuration.
OpenClaw functions as an open-source personal AI assistant gateway designed to route command executions across multiple user sessions, applications, and messaging channels. To enforce security boundaries between these disparate environments, the application implements an access control mechanism referred to as 'controlScope'. The controlScope configuration dictates which commands a given user, channel, or token can execute within the gateway's runtime environment.
A flaw exists in the command registration and routing component of OpenClaw. Specifically, the 'focus' command pathway does not perform validation against the caller's controlScope. This exposes an unauthorized execution path for any caller possessing authenticated access to the gateway interface.
While OpenClaw relies on a trusted-operator model for standard operations, this flaw allows low-privilege callers to transcend their designated scope. The exposure remains confined to environments where multiple logical boundaries share a single gateway node, and where untrusted or restricted operators can execute basic gateway commands.
The fundamental flaw resides in the lack of explicit authorization checks within the command router for the 'focus' feature, classified under CWE-862 (Missing Authorization). During initialization, the gateway registers commands alongside their required access parameters. However, the registration parameters for 'focus' omitted the validation hook that checks the caller's active context against the target scope.
When a command is issued, the routing logic processes the payload and maps it to the registered execution callback. If the command implementation lacks an explicit declaration to verify the incoming scope, the routing engine executes the state transition unconditionally. The 'focus' command is designed to update state parameters such as active windows, current database schemas, or active user contexts.
Consequently, an authenticated user restricted to a low-trust context can issue a 'focus' command that alters the active state of a high-trust context. The router validates that the user is authenticated, but it fails to confirm whether the user is authorized to perform state modifications on the specified target, allowing unauthorized cross-scope state manipulation.
The following flowchart illustrates the difference between secure command execution pathways and the insecure 'focus' command execution pathway that led to CVE-2026-53850.
This workflow demonstrates that while standard restricted commands must clear the validation gate, the 'focus' execution path bypasses the access-control filter entirely, leading directly to state modification.
An examination of the command registration and execution layers in vulnerable versions reveals how the verification step was bypassed. Below is an illustrative representation of the vulnerable routing logic compared with the corrected implementation.
// In vulnerable versions, command declarations did not enforce controlScope restrictions systematically
router.register('focus', async (context, args) => {
// VULNERABILITY: No check is performed to see if context.user.scope satisfies args.targetScope
state.setFocus(args.target);
return { status: 'success', currentFocus: args.target };
});// In version 2026.4.25, the registration explicitly validates the caller context
router.register('focus', async (context, args) => {
// FIX: Validate the caller's controlScope against the target system resource
if (!context.controlScope.canAccess(args.target)) {
throw new AuthorizationError('Inadequate privilege level for the specified target');
}
state.setFocus(args.target);
return { status: 'success', currentFocus: args.target };
});By adding explicit verification against the target parameter, the gateway prevents unauthorized actors from targeting assets outside their administrative domain. This mitigation completely resolves the bypass, provided that the authorization helper is applied to all active commands.
To exploit this vulnerability, an attacker must first obtain a valid channel or session key allowing command input to the gateway. The exploit does not require administrator privileges, only standard operator access. Once authenticated, the attacker submits a structured command containing the target parameter they wish to manipulate.
The attacker assesses the active workspace to identify administrative targets. This is accomplished by reviewing accessible public directories or metadata exposed within the standard user interface.
The attacker sends the command payload targeting a restricted context. An example command sequence is structured as follows:
{
"command": "focus",
"arguments": {
"target": "admin-session-04",
"workspace": "restricted-management-zone"
}
}The routing engine processes the instruction. Since no controlScope checks are enforced, the engine shifts the gateway's global active focus parameter to admin-session-04. Subsequent automated actions, context queries, or assistant logs are directed to or evaluated against this administrative channel, leaking information or executing subsequent commands in the context of the hijacked session.
The primary impact of CVE-2026-53850 is a loss of integrity. The CVSS v3.1 score is calculated as 5.5 (Medium), with a vector of CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N. Because the focus state dictates where subsequent instructions or queries are targeted, manipulating this parameter allows a low-privilege operator to redirect processing workflows into high-privilege zones.
The vulnerability does not directly expose variables or system files (Confidentiality: None), nor does it crash the gateway process (Availability: None). However, the alteration of execution scope can be chained with other processing tools to execute unauthorized operations. If the assistant gateway is configured with sensitive downstream plugins (such as local file execution or database write privileges), altering the focus state can cause the assistant to process malicious inputs inside a privileged zone.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N| Product | Affected Versions | Fixed Version |
|---|---|---|
openclaw OpenClaw | < 2026.4.25 | 2026.4.25 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-862 (Missing Authorization) |
| Attack Vector | Local (AV:L) |
| CVSS v3.1 Base Score | 5.5 |
| CVSS v4.0 Base Score | 6.8 |
| EPSS Score | 0.00093 (0.71st percentile) |
| Impact Class | Integrity (High) |
| Exploit Status | No public functional exploit or proof-of-concept exists |
| CISA KEV Status | Not listed |
The acquisition or verification of permissions is not performed on an active execution path, enabling an actor to access resources or modify state without matching authorization privileges.
Prior to version 1.0.7, the djust Python package is vulnerable to Stored and Reflected Cross-Site Scripting (XSS) via component template tags. The underlying issue exists because the package fails to sanitize or validate incoming URI schemes when rendering URLs inside interactive HTML attributes like href or action. While the framework HTML-escapes strings to prevent attribute breakout, it permits the execution of arbitrary JavaScript via the javascript: pseudo-protocol.
A high-severity session hijacking and authorization bypass vulnerability has been identified in the djust framework prior to version 1.0.7. The flaw resides in the Server-Sent Events (SSE) transport implementation, which keyed sessions solely by client-provided session identifiers without verifying session ownership or binding. This allows an attacker who possesses or guesses a victim's session identifier to send malicious post messages to execute arbitrary state machine event handlers under the identity and permissions of the victim.
CVE-2026-61591 is a high-severity state injection and authorization bypass vulnerability affecting the djust framework's opt-in State Snapshot feature. Prior to version 1.0.7, the framework restored public view state snapshots returned from the client browser during back-navigation without validating their cryptographic authenticity or integrity. This flaw allows malicious clients to manipulate serialized JSON payloads to inject unauthorized properties, leading to mass assignment (CWE-915) and privilege escalation. Version 1.0.7 addresses this issue by introducing HMAC cryptographic signatures bound to both the view configuration and the user's session identifier.
A critical connection reuse vulnerability exists in curl and libcurl between versions 7.64.1 and 8.21.0 inclusive when Negotiate authentication (SPNEGO) is configured with blank credentials. Because libcurl fails to track changes to the underlying operating system's ambient security context, persistent authenticated connections are incorrectly matched and shared between distinct user sessions, allowing subsequent users to execute requests with the authorization state of the prior user.
A sensitive data exposure vulnerability exists in the djust framework before version 1.0.7. When serializing Django models to public view attributes, the framework fails to filter out sensitive fields such as passwords, privilege flags, and private tokens, leading to over-serialization and exposure of sensitive records to the client browser.
A broken object-level access control (IDOR) vulnerability exists in the djust Django framework prior to version 1.0.7. The framework's per-object authorization hooks were enforced correctly over WebSockets but entirely bypassed on synchronous HTTP GET rendering, SPA client-side navigation, and embedded sub-views, allowing authenticated attackers to view arbitrary unauthorized database records.