Description
Headroom's LLM proxy derives the memory owner from the x-headroom-user-id request header. The header is read directly at several points in headroom/proxy/handlers/openai.py, including the chat completion and websocket paths, and nothing binds the value to the caller. A client can therefore name another user's identifier and read or write that user's stored LLM memory. The fix introduces a single resolve_memory_identity seam in headroom/proxy/identity.py that honors the header only for loopback or allowlisted callers and otherwise binds the identity to the proxy-token fingerprint or the operating system user. The pip console script binds 127.0.0.1 by default, but the reference docker-compose.yml ships --host 0.0.0.0 with published ports and no required HEADROOM_PROXY_TOKEN, which the server itself warns about at startup, so a deployment following the shipped compose exposes the affected data-plane routes to the network without authentication.
Published: 2026-08-21
Score: 9.3 Critical
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Headroom’s proxy trusts the x-headroom-user-id request header without validating the caller, allowing an attacker to impersonate any user. By setting this header to another user’s identifier, a malicious client can read or overwrite that user’s stored LLM memory, resulting in confidentiality and integrity loss of private data.

Affected Systems

The vulnerability affects Headroom Labs’ Headroom proxy prior to the fix introduced in v0.36.1. Deployments that use the default docker‑compose configuration with the server listening on 0.0.0.0 and no HEADROOM_PROXY_TOKEN, or any instance that accepts the header from untrusted external clients, are impacted.

Risk and Exploitability

With a CVSS score of 9.3, the flaw is considered critical. The EPSS score is not available, and the vulnerability is not listed in the KEV catalog. An attacker can exploit it remotely by sending HTTP requests over the network to any exposed data‑plane route, because the service accepts the header unconditionally and no authentication is required for the affected paths.

Generated by OpenCVE AI on August 21, 2026 at 12:39 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Headroom to version 0.36.1 or later, which implements resolve_memory_identity and limits header usage to loopback or allowlisted callers.
  • If an upgrade is not immediately possible, change the docker‑compose host setting to 127.0.0.1 or otherwise restrict the proxy to the local network, and enforce a HEADROOM_PROXY_TOKEN to authenticate incoming requests.
  • Implement network controls or firewall rules to block external access to the proxy’s 0.0.0.0 entry points, ensuring only trusted hosts can reach the LLM memory endpoints.

Generated by OpenCVE AI on August 21, 2026 at 12:39 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 21 Aug 2026 13:00:00 +0000

Type Values Removed Values Added
First Time appeared Headroom Labs
Headroom Labs headroom
Vendors & Products Headroom Labs
Headroom Labs headroom

Fri, 21 Aug 2026 11:30:00 +0000

Type Values Removed Values Added
Description Headroom's LLM proxy derives the memory owner from the x-headroom-user-id request header. The header is read directly at several points in headroom/proxy/handlers/openai.py, including the chat completion and websocket paths, and nothing binds the value to the caller. A client can therefore name another user's identifier and read or write that user's stored LLM memory. The fix introduces a single resolve_memory_identity seam in headroom/proxy/identity.py that honors the header only for loopback or allowlisted callers and otherwise binds the identity to the proxy-token fingerprint or the operating system user. The pip console script binds 127.0.0.1 by default, but the reference docker-compose.yml ships --host 0.0.0.0 with published ports and no required HEADROOM_PROXY_TOKEN, which the server itself warns about at startup, so a deployment following the shipped compose exposes the affected data-plane routes to the network without authentication.
Title Headroom Proxy Treats the Client-Supplied x-headroom-user-id Header as an Authenticated Identity
Weaknesses CWE-639
References
Metrics cvssV3_1

{'score': 9.1, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N'}

cvssV4_0

{'score': 9.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

Headroom Labs Headroom
cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-08-21T11:22:51.779Z

Reserved: 2026-08-21T11:09:25.553Z

Link: CVE-2026-77776

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-08-21T12:16:36.967

Modified: 2026-08-21T12:16:36.967

Link: CVE-2026-77776

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-21T12:45:04Z

Weaknesses
  • CWE-639

    Authorization Bypass Through User-Controlled Key