Description
UrlUtil.getBaseUrl builds the absolute URLs in a response — download links, icons, asset and API URLs — from the X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix request headers, with no check on whether the sender was a trusted proxy, falling back to the client-supplied Host header.




Those responses are cached under keys that do not include the host (extension.json since 0.6.0, namespace.details.json since 0.9.0, sitemap since 0.14.5, latest.extension.version.vscode since 0.34.2). A single request carrying a forged header therefore places attacker-chosen URLs into an entry served to every other client for the lifetime of that entry — one hour by default, and cluster-wide where ovsx.redis.enabled is set.



The VSIX download URL, its signature URL and the public key URL are all derived from the same base URL, so extension signing does not limit the impact: an attacker who poisons an entry supplies the package, the signature over it, and the key used to verify it.



Exploitability depends on deployment topology. A server reachable directly by clients, or fronted by a proxy that relays the client's X-Forwarded-Host rather than overwriting it, is exploitable by an unauthenticated remote attacker. A proxy that overwrites the header is not.



An unauthenticated attacker can poison Open VSX's per-extension metadata cache with attacker-controlled download, signature, and public-key URLs by supplying a crafted X-Forwarded-Host header, causing downstream VS Code-compatible editors to fetch and install a malicious VSIX.



Workarounds (unpatched versions)




1. Configure the reverse proxy to set rather than relay X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix — note that nginx's $host is the client's Host header and is not a safe value.



2. Ensure the server is not reachable except through that proxy.



3. Flush the caches afterwards; poisoned entries survive the configuration change.
Published: 2026-09-21
Score: 9.1 Critical
EPSS: n/a
KEV: No
Impact: Remote Code Execution
Action: Immediate Patch
AI Analysis

Impact

The vulnerability lies in the way the application constructs absolute URLs for assets, download links and keys using the X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix headers without validating that these headers come from a trusted reverse proxy. An attacker can send requests with forged headers, causing the server to generate URLs that point to malicious locations. Because those URLs are cached, every other client that retrieves the cached metadata will be instructed to download a malicious VSIX, sign it with a forged signature, and use a fabricated public key, allowing the attacker to deliver arbitrary code to those clients. This leads to remote code execution on machines that download the poisoned extension. The weakness is a form of input validation error that permits cache poisoning and unsanitized header usage.

Affected Systems

The affected product is Eclipse Open VSX provided by the Eclipse Foundation. The vulnerability applies to any deployed instance of this service that accepts client‑supplied X‑Forwarded-Host, X‑Forwarded-Proto or X‑Forwarded‑Prefix values without filtering them, including versions before any fix is released. Exact affected version numbers are not provided in the advisory.

Risk and Exploitability

The CVSS score of 9.1 indicates a high‑severity vulnerability. The exploit confidence is moderate because it requires direct or proxy‑assisted HTTP access to the Open VSX service; a proxy that rewrites the forwarded headers mitigates the risk. The vulnerability is not yet listed in the CISA KEV catalog. An unauthenticated attacker can induce cache poisoning and trigger remote code execution by crafting a single HTTP request, so the risk is significant for environments with publicly reachable Open VSX instances.

Generated by OpenCVE AI on September 21, 2026 at 10:20 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Configure the reverse proxy to set rather than relay X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix values, using trusted proxy values only
  • Ensure that the Open VSX server is not directly reachable from the internet and is accessed only through the correctly configured reverse proxy
  • Flush the existing per‑extension metadata cache after remediation to clear poisoned entries
  • Upgrade to a patched release of Eclipse Open VSX as it becomes available
  • Monitor outgoing UI and download URLs for suspicious patterns as a containment measure

Generated by OpenCVE AI on September 21, 2026 at 10:20 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 21 Sep 2026 10:45:00 +0000

Type Values Removed Values Added
Title Remote Server‑Side Cache Poisoning via Untrusted HTTP Headers in Eclipse Open VSX
Weaknesses CWE-937

Mon, 21 Sep 2026 09:15:00 +0000

Type Values Removed Values Added
Description UrlUtil.getBaseUrl builds the absolute URLs in a response — download links, icons, asset and API URLs — from the X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix request headers, with no check on whether the sender was a trusted proxy, falling back to the client-supplied Host header. Those responses are cached under keys that do not include the host (extension.json since 0.6.0, namespace.details.json since 0.9.0, sitemap since 0.14.5, latest.extension.version.vscode since 0.34.2). A single request carrying a forged header therefore places attacker-chosen URLs into an entry served to every other client for the lifetime of that entry — one hour by default, and cluster-wide where ovsx.redis.enabled is set. The VSIX download URL, its signature URL and the public key URL are all derived from the same base URL, so extension signing does not limit the impact: an attacker who poisons an entry supplies the package, the signature over it, and the key used to verify it. Exploitability depends on deployment topology. A server reachable directly by clients, or fronted by a proxy that relays the client's X-Forwarded-Host rather than overwriting it, is exploitable by an unauthenticated remote attacker. A proxy that overwrites the header is not. An unauthenticated attacker can poison Open VSX's per-extension metadata cache with attacker-controlled download, signature, and public-key URLs by supplying a crafted X-Forwarded-Host header, causing downstream VS Code-compatible editors to fetch and install a malicious VSIX. Workarounds (unpatched versions) 1. Configure the reverse proxy to set rather than relay X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix — note that nginx's $host is the client's Host header and is not a safe value. 2. Ensure the server is not reachable except through that proxy. 3. Flush the caches afterwards; poisoned entries survive the configuration change.
References
Metrics cvssV4_0

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


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: eclipse

Published:

Updated: 2026-09-21T08:59:00.465Z

Reserved: 2025-11-11T09:24:12.379Z

Link: CVE-2025-12999

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-21T09:17:04.533

Modified: 2026-09-21T09:17:04.533

Link: CVE-2025-12999

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-21T10:30:09Z

Weaknesses