CVE-2026-77776: Headroom Proxy Treats the Client-Supplied x-headroom-user-id Header as an Authenticated Identity
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.
Security readout for executives and security teams
Plain-English summary
Headroom’s LLM proxy trusted a user-controlled header as proof of identity. An unauthenticated network client could claim another user’s identifier and access or alter that user’s stored LLM memory. Confidentiality and integrity risks are severe, particularly where the proxy follows the shipped Docker Compose configuration and is reachable beyond the host.
Executive priority
Immediate action is warranted for network-accessible deployments because unauthorized clients may read or modify sensitive conversational memory without credentials. Restrict exposure and require authentication now, then apply the vendor-supported correction. Also investigate possible cross-user access where the proxy was previously exposed without a token.
Technical view
CVE-2026-77776 is a CWE-639 authorization flaw. Chat-completion and WebSocket handlers derive memory ownership directly from x-headroom-user-id without binding it to the caller. The documented fix centralizes identity resolution, accepting that header only from loopback or allowlisted callers and otherwise using a proxy-token fingerprint or operating-system user.
Likely exposure
Highest exposure exists where Headroom’s proxy listens on 0.0.0.0, publishes ports, and does not require HEADROOM_PROXY_TOKEN, as described for the reference Docker Compose deployment. The bundle lists Headroom versions 0 and 0.36.1 as affected; the exact vulnerable version range is unclear.
Exploitation context
The weakness is remotely reachable, low complexity, requires no privileges or user interaction, and can compromise stored memory confidentiality and integrity. The supplied record is not in KEV, and the cited material does not establish active exploitation. Treat internet-accessible or broadly network-accessible deployments as urgent despite the absence of confirmed exploitation.
Researcher notes
The core invariant is that memory ownership must derive from authenticated caller context, not a client assertion. Review both HTTP chat-completion and WebSocket paths. The source bundle identifies a centralized resolve_memory_identity seam, but does not clearly identify the first fully fixed release or provide evidence of exploitation in the wild.
Mitigation direction
Follow vendor guidance and Pull Request #2207 for the corrected identity-resolution implementation.
Require HEADROOM_PROXY_TOKEN for every non-loopback deployment.
Bind the proxy to loopback unless remote access is operationally necessary.
Restrict published proxy ports to explicitly trusted callers using network controls.
Avoid trusting x-headroom-user-id from unallowlisted network clients.
Validation and detection
Inventory deployed headroom-ai versions and compare them with current vendor guidance.
Confirm proxy listeners are not unintentionally bound to 0.0.0.0.
Verify non-loopback requests require a valid proxy token.
Review Docker Compose and runtime arguments for published, unauthenticated proxy ports.
Confirm identity resolution binds remote callers to token fingerprints rather than supplied headers.
Review access logs for unexpected user identifiers or cross-user memory activity.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-639: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
The CVE wording references authentication or credential exposure, so valid-account and credential-access review may help. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.
The affected technology mentions containers, so container-specific ATT&CK technique review may help. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
2CVSS vectors
3Timeline events
1ADP providers
6Source links
SSVC decision data
CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: noneAutomatable: yesTechnical Impact: total
CVSS vector scores
2 official scores
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.
CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.
CWE-639 · source CWE mapping
Authorization Bypass Through User-Controlled Key
Authorization Bypass Through User-Controlled Key represents a recurring weakness pattern that can create exploitable paths when design, validation, or implementation controls are missing.