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: < 1% Very Low
KEV: No
Impact: Remote Code Execution
Action: Immediate Patch
AI Analysis

Impact

UrlUtil.getBaseUrl in Eclipse Open VSX constructs absolute URLs for assets and download links from the X‑Forwarded‑Host, X‑Forwarded‑Proto and X‑Forwarded‑Prefix headers without validating the source of these headers. A malicious client can send a single crafted HTTP request with forged header values, causing the service to generate URLs that point to attacker‑controlled locations. Because the generated metadata is cached under keys that do not include the host, every other client that retrieves the cached entry will be instructed to download a malicious VSIX package, its signature and public key, all provided by the attacker. This enables an unauthenticated attacker to deliver arbitrary code to downstream Visual Studio Code‑compatible editors, achieving remote code execution.

Affected Systems

The affected product is Eclipse Open VSX, distributed by the Eclipse Foundation. Any deployed instance of the service that accepts client‑supplied X‑Forwarded‑Host, X‑Forwarded‑Proto or X‑Forwarded‑Prefix headers without filtering these headers is vulnerable. The advisory does not specify exact version numbers, but the flaw exists in all versions prior to the forthcoming patch.

Risk and Exploitability

With a CVSS score of 9.1 the flaw is considered high‑severity. The EPSS score shows a very low probability of exploitation in the wild (<1%), likely because the vulnerability requires direct or proxy‑forwarded access to the Open VSX service. The vulnerability is not yet listed in the CISA KEV catalog. An unauthenticated attacker who can reach the service directly, or through a proxy that does not overwrite the forwarded headers, can exploit this flaw by sending a crafted request, resulting in cache poisoning and remote code execution on any client that later fetches the poisoned metadata.

Generated by OpenCVE AI on September 22, 2026 at 17:22 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the vendor patch for Eclipse Open VSX as soon as it becomes available
  • Configure the reverse proxy to set, rather than relay, the X‑Forwarded‑Host, X‑Forwarded‑Proto and X‑Forwarded‑Prefix headers, ensuring they originate from a trusted source
  • Ensure the Open VSX server is not directly reachable from the internet and is only accessed through the correctly configured reverse proxy
  • Flush the per‑extension metadata cache after remediation to remove any poisoned entries
  • Monitor downloaded extension URLs and signatures for unexpected destinations as an additional containment measure

Generated by OpenCVE AI on September 22, 2026 at 17:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 22 Sep 2026 16:30:00 +0000

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

Tue, 22 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-345

Mon, 21 Sep 2026 14:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


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

Type Values Removed Values Added
First Time appeared Eclipse
Eclipse open Vsx
Vendors & Products Eclipse
Eclipse open Vsx

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

Eclipse Open Vsx
cve-icon MITRE

Status: PUBLISHED

Assigner: eclipse

Published:

Updated: 2026-09-30T15:09:36.585Z

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

Link: CVE-2025-12999

cve-icon Vulnrichment

Updated: 2026-09-21T13:52:46.609Z

cve-icon NVD

Status : Deferred

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

Modified: 2026-09-22T14:17:11.153

Link: CVE-2025-12999

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T17:30:18Z

Weaknesses
  • CWE-345

    Insufficient Verification of Data Authenticity