Skip to main content

Headroom EUVDEUVD-2026-63904

| CVE-2026-77775 HIGH
Server-Side Request Forgery (SSRF) (CWE-918)
2026-08-21 VulnCheck GHSA-4j5r-9p93-j2px
7.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send HTTP request to exposed proxy endpoint
  2. Delivery
    Supply crafted x-headroom-base-url header pointing to metadata or internal address
  3. Exploit
    Proxy resolves header value as upstream base URL without address validation
  4. Execution
    Proxy issues server-side HTTP request to internal/metadata target
  5. Persist
    Upstream response returned verbatim to attacker
  6. Impact
    Internal service data or cloud IAM credentials disclosed

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation against the default docker-compose deployment requires no special conditions: the reference docker-compose.yml binds 0.0.0.0 and ships without a required HEADROOM_PROXY_TOKEN, so any host with network connectivity to the published port can send the crafted header. The proxy routes that are affected are the OpenAI-compatible data-plane routes and passthrough routes. For pip-installed deployments (non-Docker), the server defaults to binding 127.0.0.1, limiting exploitation to processes on the same host. Exploitation is further limited to services reachable from the proxy host's network namespace - cloud metadata endpoints (169.254.169.254) are reachable only from cloud-hosted deployments, and internal service access is scoped to the proxy host's network. Authorization header forwarding to attacker-controlled hosts requires an active client session with a bearer token to be in-flight. No privileged access, special configuration flag, or specific Headroom feature toggle beyond the default deployment is required for the SSRF condition itself.

Impact

The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/SC:H) assigns a 7.7 score reflecting network-accessible, zero-complexity, unauthenticated exploitation with high confidentiality impact on subsequent systems - an accurate characterization for docker-compose deployments. The critical aggravating factor beyond the CVSS score is Authorization header forwarding: an attacker can harvest API keys or bearer tokens passed by legitimate clients by designating an attacker-controlled host. Real-world risk is highly deployment-dependent: the pip console script defaults to 127.0.0.1 binding, confining the attack surface to local clients; however, the vendor-shipped docker-compose.yml overrides this to 0.0.0.0 and sets no HEADROOM_PROXY_TOKEN, exposing the data-plane globally on the published port. Organizations following the quickstart guide are therefore vulnerable without any misconfiguration on their part. No EPSS score or KEV listing is available in the provided data, so exploitation frequency cannot be quantified from signals beyond the vulnerability mechanics; the low product prevalence moderates aggregate real-world exposure but does not reduce per-instance risk for affected deployments.

Exploit ScenarioDerived

An attacker with network access to an internet-exposed Headroom instance running with the default docker-compose configuration sends a single HTTP request to a proxy data-plane route with the header x-headroom-base-url: http://169.254.169.254/latest/meta-data/iam/security-credentials/; the proxy fetches that URL from the EC2 instance metadata service and returns the IAM role credentials in the response body. In a second pass, the attacker replaces the base URL with an attacker-controlled server, then triggers a request from a legitimate client - the client's Authorization bearer token is forwarded to the attacker's server, yielding API credentials. No public exploit code has been identified, but the attack requires only standard HTTP client tooling and knowledge of the header name.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – Aug 21, 2026

Server-side request forgery in Headroom LLM proxy (versions before 0.36.1) allows unauthenticated remote attackers to redirect proxy upstream requests to arbitrary internal, loopback, link-local, or RFC 1918 destinations - including cloud instance metadata endpoints such as 169.254.169.254 - by supplying a crafted x-headroom-base-url request header. The proxy returns upstream responses verbatim to the caller, disclosing internal service content; critically, it also forwards the original Authorization header to the attacker-designated host, enabling credential harvesting. Exploitation is trivially achievable against deployments using the vendor-shipped docker-compose.yml, which binds 0.0.0.0 and enforces no HEADROOM_PROXY_TOKEN by default - a configuration weakness the server itself warns about at startup. No public exploit or KEV listing is identified at time of analysis; a vendor patch is available in v0.36.1.

Earlier versions of this analysis (1)
v1 Aug 21, 2026 - 11:52 CVSS 8.6

Server-side request forgery in Headroom's LLM proxy allows unauthenticated network attackers to route proxy requests to loopback, link-local, RFC 1918, and cloud metadata addresses via the client-controlled x-headroom-base-url request header, with the upstream response returned directly to the caller. The reference docker-compose deployment ships with --host 0.0.0.0 and no required HEADROOM_PROXY_TOKEN - the configuration that existed until PR #2207 - making data-plane routes network-accessible without authentication and matching the CVSS PR:N rating. Forwarded Authorization headers compound the risk by exposing client credentials to attacker-designated hosts. No public exploit or CISA KEV listing is present, but the zero-prerequisite exploitation path on the shipped docker-compose configuration makes this a meaningful priority for affected operators.

RemediationAI

Upgrade Headroom to version 0.36.1 or later, which introduces upstream_guard.py to validate and restrict proxy upstream destinations; the fix is delivered via GitHub PR #2207 (https://github.com/headroomlabs-ai/headroom/pull/2207). Upstream fix is confirmed present at the tagged v0.36.1 release based on the presence of headroom/proxy/upstream_guard.py in that commit; independently verified patched release packaging is not confirmed beyond the GitHub tag. For deployments that cannot immediately upgrade, set HEADROOM_PROXY_TOKEN to a strong random value (openssl rand -hex 32) in your environment or .env file - this gates all data-plane routes and prevents unauthenticated SSRF exploitation from the network; note this does not eliminate the SSRF capability for authenticated clients. If running the docker-compose stack, update docker-compose.yml to require HEADROOM_PROXY_TOKEN using the :? syntax shown in PR #2207 so the stack refuses to start without a token. Additionally, restrict host-level network egress from the proxy container to block RFC 1918, loopback, and link-local ranges at the firewall or security group level; this eliminates SSRF reachability even if the header validation is bypassed, but may block legitimate internal upstream endpoints and must be tuned per deployment. On AWS, consider enabling IMDSv2 (token-required mode) as a defense-in-depth measure against metadata service access regardless of this patch.

Affected VersionsENISA

Headroom 0 <0.36.1

Affected Packages

euvd headroom fix: 0.36.1

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Headroom is an LLM proxy (CPE: cpe:2.3:a:headroom_labs:headroom:*:*:*:*:*:*:*:*) that routes client requests to upstream AI provider APIs. The vulnerability exists in two functions: _resolve_openai_upstream_base in headroom/proxy/handlers/openai.py and _select_passthrough_base_url in headroom/providers/proxy_routes.py. Both read the x-headroom-base-url HTTP request header, parse it for a valid http/https scheme and hostname, and return it as the upstream destination without any allowlist or blocklist check against the resolved IP address space. CWE-918 (Server-Side Request Forgery) describes the root cause: the application issues server-side HTTP requests to a URL controlled by the client, making the proxy act as a network relay into otherwise-inaccessible address spaces. Cloud-hosted deployments are especially at risk because instance metadata services (AWS IMDSv1 at 169.254.169.254, GCP metadata at metadata.google.internal) are reachable from the proxy host and typically return sensitive data including IAM credentials without requiring authentication from the instance.

Know when Headroom gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 7.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N
vuln.today AI 8.6 HIGH

Network-accessible via HTTP with no auth in docker-compose default; scope changes because SSRF crosses trust boundary into internal and metadata services with high confidentiality impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:N/SC:H/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
High
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
CVSS changed
Aug 21, 2026 - 12:22 NVD
8.6 (HIGH) 7.7 (HIGH)
Patch available
Aug 21, 2026 - 12:01 EUVD
CVE Published
Aug 21, 2026 - 11:22 cve.org
HIGH 8.6

DescriptionCVE.org

Headroom's LLM proxy lets a client choose the upstream destination with the x-headroom-base-url request header. _resolve_openai_upstream_base in headroom/proxy/handlers/openai.py accepts the header value, requires only that it parse with an http or https scheme and a hostname, and returns it for use as the upstream base; _select_passthrough_base_url in headroom/providers/proxy_routes.py reads the same header for the passthrough routes. No check rejects loopback, link-local, or RFC 1918 destinations, and because the component is a proxy the upstream response is returned to the caller, so the request reaches internal services and cloud metadata addresses and their responses are disclosed. The Authorization header accompanying the request is forwarded unchanged to the caller-designated host. 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.

Executive ViewAI

Why It Matters

Headroom LLM proxy versions before 0.36.1 are vulnerable to unauthenticated attacks that expose internal credentials and services to the internet. The vulnerability allows attackers to steal authentication tokens and access cloud infrastructure details, creating direct risk to backend systems and sensitive data. Patch availability makes remediation straightforward.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 70% exploitable
Prevalence
Low
niche LLM proxy product, limited observed enterprise deployment
Social Media
2
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy