VYPR
Medium severity5.3NVD Advisory· Published Apr 23, 2026· Updated Apr 28, 2026

CVE-2026-41335

CVE-2026-41335

Description

OpenClaw before 2026.3.31 contains an information disclosure vulnerability in the Control Interface bootstrap JSON that exposes version and assistant agent identifiers. Attackers can extract sensitive fingerprinting information from the Control UI bootstrap payload to identify system versions and agent configurations.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
openclawnpm
< 2026.3.312026.3.31

Affected products

1
  • cpe:2.3:a:openclaw:openclaw:*:*:*:*:*:node.js:*:*
    Range: <2026.3.31

Patches

1
c5c10adc022f

gateway: trim control UI bootstrap payload (#57727)

https://github.com/openclaw/openclawJacob TomlinsonMar 30, 2026via ghsa
6 files changed · +10 16
  • src/gateway/control-ui-contract.ts+0 2 modified
    @@ -4,6 +4,4 @@ export type ControlUiBootstrapConfig = {
       basePath: string;
       assistantName: string;
       assistantAvatar: string;
    -  assistantAgentId: string;
    -  serverVersion?: string;
     };
    
  • src/gateway/control-ui.http.test.ts+4 3 modified
    @@ -27,7 +27,6 @@ describe("handleControlUiHttpRequest", () => {
           basePath: string;
           assistantName: string;
           assistantAvatar: string;
    -      assistantAgentId: string;
         };
       }
     
    @@ -196,7 +195,8 @@ describe("handleControlUiHttpRequest", () => {
             expect(parsed.basePath).toBe("");
             expect(parsed.assistantName).toBe("</script><script>alert(1)//");
             expect(parsed.assistantAvatar).toBe("/avatar/main");
    -        expect(parsed.assistantAgentId).toBe("main");
    +        expect(parsed).not.toHaveProperty("assistantAgentId");
    +        expect(parsed).not.toHaveProperty("serverVersion");
           },
         });
       });
    @@ -222,7 +222,8 @@ describe("handleControlUiHttpRequest", () => {
             expect(parsed.basePath).toBe("/openclaw");
             expect(parsed.assistantName).toBe("Ops");
             expect(parsed.assistantAvatar).toBe("/openclaw/avatar/main");
    -        expect(parsed.assistantAgentId).toBe("main");
    +        expect(parsed).not.toHaveProperty("assistantAgentId");
    +        expect(parsed).not.toHaveProperty("serverVersion");
           },
         });
       });
    
  • src/gateway/control-ui.ts+0 3 modified
    @@ -10,7 +10,6 @@ import {
     import { isWithinDir } from "../infra/path-safety.js";
     import { openVerifiedFileSync } from "../infra/safe-open-sync.js";
     import { AVATAR_MAX_BYTES } from "../shared/avatar-policy.js";
    -import { resolveRuntimeServiceVersion } from "../version.js";
     import { DEFAULT_ASSISTANT_IDENTITY, resolveAssistantIdentity } from "./assistant-identity.js";
     import {
       CONTROL_UI_BOOTSTRAP_CONFIG_PATH,
    @@ -365,8 +364,6 @@ export function handleControlUiHttpRequest(
           basePath,
           assistantName: identity.name,
           assistantAvatar: avatarValue ?? identity.avatar,
    -      assistantAgentId: identity.agentId,
    -      serverVersion: resolveRuntimeServiceVersion(process.env),
         } satisfies ControlUiBootstrapConfig);
         return true;
       }
    
  • ui/src/ui/controllers/control-ui-bootstrap.test.ts+6 4 modified
    @@ -12,8 +12,6 @@ describe("loadControlUiBootstrapConfig", () => {
             basePath: "/openclaw",
             assistantName: "Ops",
             assistantAvatar: "O",
    -        assistantAgentId: "main",
    -        serverVersion: "2026.3.7",
           }),
         });
         vi.stubGlobal("fetch", fetchMock as unknown as typeof fetch);
    @@ -34,8 +32,8 @@ describe("loadControlUiBootstrapConfig", () => {
         );
         expect(state.assistantName).toBe("Ops");
         expect(state.assistantAvatar).toBe("O");
    -    expect(state.assistantAgentId).toBe("main");
    -    expect(state.serverVersion).toBe("2026.3.7");
    +    expect(state.assistantAgentId).toBeNull();
    +    expect(state.serverVersion).toBeNull();
     
         vi.unstubAllGlobals();
       });
    @@ -59,6 +57,8 @@ describe("loadControlUiBootstrapConfig", () => {
           expect.objectContaining({ method: "GET" }),
         );
         expect(state.assistantName).toBe("Assistant");
    +    expect(state.assistantAgentId).toBeNull();
    +    expect(state.serverVersion).toBeNull();
     
         vi.unstubAllGlobals();
       });
    @@ -81,6 +81,8 @@ describe("loadControlUiBootstrapConfig", () => {
           `/openclaw${CONTROL_UI_BOOTSTRAP_CONFIG_PATH}`,
           expect.objectContaining({ method: "GET" }),
         );
    +    expect(state.assistantAgentId).toBeNull();
    +    expect(state.serverVersion).toBeNull();
     
         vi.unstubAllGlobals();
       });
    
  • ui/src/ui/controllers/control-ui-bootstrap.ts+0 3 modified
    @@ -37,14 +37,11 @@ export async function loadControlUiBootstrapConfig(state: ControlUiBootstrapStat
         }
         const parsed = (await res.json()) as ControlUiBootstrapConfig;
         const normalized = normalizeAssistantIdentity({
    -      agentId: parsed.assistantAgentId ?? null,
           name: parsed.assistantName,
           avatar: parsed.assistantAvatar ?? null,
         });
         state.assistantName = normalized.name;
         state.assistantAvatar = normalized.avatar;
    -    state.assistantAgentId = normalized.agentId ?? null;
    -    state.serverVersion = parsed.serverVersion ?? null;
       } catch {
         // Ignore bootstrap failures; UI will update identity after connecting.
       }
    
  • ui/vite.config.ts+0 1 modified
    @@ -50,7 +50,6 @@ export default defineConfig(() => {
                     basePath: "/",
                     assistantName: "",
                     assistantAvatar: "",
    -                assistantAgentId: "",
                   }),
                 );
               });
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.