Skip to main content

Open VSX EUVDEUVD-2025-210973

| CVE-2025-12999 CRITICAL
Insufficient Verification of Data Authenticity (CWE-345)
2026-09-21 emo@eclipse.org
9.1
CVSS 4.0 · Vendor: eclipse
Share

Severity by source

Vendor (eclipse) PRIMARY
9.1 CRITICAL
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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.5 HIGH

Unauthenticated network attack via a forged header, but success is gated on deployment topology (server directly reachable or proxy relaying the header), hence AC:H; poisoned cache compromises downstream editors so S:C with I:H, no confidentiality impact, A:L.

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

Primary rating from Vendor (eclipse).

CVSS VectorVendor: eclipse

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

5
POC Analysis Generated
Sep 21, 2026 - 11:21 vuln.today
Metadata Corrected
Sep 21, 2026 - 09:40 vuln.today
tag: Java added
Metadata Corrected
Sep 21, 2026 - 09:40 vuln.today
tag: Information Disclosure removed
Analysis Generated
Sep 21, 2026 - 09:31 vuln.today
CVE Published
Sep 21, 2026 - 09:17 cve.org
CRITICAL 9.1

DescriptionCVE.org

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.

AnalysisAI

Cache poisoning in the Open VSX registry allows an unauthenticated remote client to inject attacker-chosen download, signature, and public-key URLs into per-extension metadata that is then served to every other client, so downstream VS Code-compatible editors fetch and install an attacker-supplied VSIX. Exploitation requires the deployment to be reachable directly by clients, or fronted by a reverse proxy that relays rather than overwrites the client's X-Forwarded-Host/X-Forwarded-Proto/X-Forwarded-Prefix headers, with ovsx.server.url left unset and the attacker's source address treated as a trusted proxy (by default only loopback and private ranges are). Because the VSIX download URL, its signature URL and the verifying public key URL are all derived from the same base URL, extension signing provides no protection; poisoned entries persist for the cache lifetime (one hour by default) and spread cluster-wide when ovsx.redis.enabled is set. No public exploit code or confirmed in-the-wild exploitation was identified at time of analysis, but the prerequisite is a common default deployment shape, so the risk is real and high rather than theoretical.

Technical ContextAI

Open VSX is an open-source, vendor-neutral extension registry for VS Code-compatible editors, typically deployed as a Spring Boot service behind nginx and optionally scaled with Redis. UrlUtil.getBaseUrl constructs the absolute URLs placed in responses (download links, icons, asset and API URLs) from the X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix request headers, with no check that the sending peer is a trusted proxy, falling back to the client-supplied Host header. The response caches are keyed without the host, so a single request carrying a forged header writes an entry that is later served to every client: extension.json since 0.6.0, namespace.details.json since 0.9.0, sitemap since 0.14.5, and latest.extension.version.vscode since 0.34.2. This is a classic host-header-injection-driven web cache poisoning pattern (root-cause class of origin/header validation failure combined with cache keys that omit the authority; no CWE was assigned in the input data). The trust boundary is ovsx.server.trusted-proxies, which defaults to loopback and private ranges (127.0.0.0/8, ::1/128, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 169.254.0.0/16, fc00::/7, fe80::/10), the same set Tomcat's RemoteIpValve trusts; that list decides whose headers are read, not whether their contents are believable, so a trusted proxy that forwards a client-chosen value still enables the attack. The upstream fix adds an ovsx.server.url configuration property that removes the request from base-URL construction entirely, plus documentation and deployment template (Docker, Kubernetes, OpenShift) changes.

RemediationAI

The definitive fix is to set the ovsx.server.url property (e.g. https://openvsx.example, including any path prefix such as https://example.com/openvsx) on every deployment reachable from the open web, as introduced by eclipse-openvsx/openvsx pull request 2196; this takes the base URL out of the request altogether, so the X-Forwarded-* headers are ignored regardless of who sends them, every cluster node agrees on the URLs it emits, and the cache holds one entry per extension instead of one per requested host. Upstream fix available (PR/commit); released patched version not independently confirmed, so the configuration workaround should be applied immediately on unpatched versions per advisory GHSA-f55q-5m46-rmxc. Where multiple hostnames must be answered by one registry and ovsx.server.url cannot be set, configure the reverse proxy to set (not relay) X-Forwarded-Host, X-Forwarded-Proto and X-Forwarded-Prefix with literal values - note that nginx's $host is the client's Host header and is not a safe value to forward - and additionally ensure the server is not reachable except through that proxy; tightening ovsx.server.trusted-proxies (or emptying it to ignore forwarded headers outright) limits which peers' headers are read at all, with the trade-off that a legitimate proxy or cloud load balancer on a public address must be explicitly listed or the registry will instead emit internal-host URLs and log a warning naming both properties. Any of these configuration changes must be followed by flushing the affected caches, since poisoned entries survive the change and persist for the configured lifetime (one hour by default), propagating cluster-wide when ovsx.redis.enabled is set; organizations that cannot flush immediately should treat previously served extension URLs as untrusted until entries expire.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

Share

EUVD-2025-210973 vulnerability details – vuln.today

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