Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOperate or compromise an OCI registry
-
DeliveryVictim triggers tag-based package install
-
ExploitServe signed image to cosign verifier
-
ExecutionServe unsigned image on fetch
-
ImpactInstall unverified package into control plane
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Exploitation requires ALL of: (1) Crossplane package signature verification configured via the ImageConfig mechanism; (2) packages installed using mutable tag references (e.g., semantic versions) rather than immutable image digests; and (3) installation from an OCI registry the victim does not control, where the attacker can serve different content between the cosign verification (Head/Validate) and the Fetch step. The TOCTOU window in CachedClient.Get resolves the tag separately for verification and fetch. Limiting factors: all three conditions are non-default/operational choices, and the attack is infeasible against installs pinned by digest (the documented mitigation) or from a registry the attacker cannot manipulate; impact is limited to installing an unverified package (integrity), with no direct confidentiality or availability impact per the vector. |
| Impact | This is a moderate, conditionally-exploitable supply-chain integrity flaw rather than a broad emergency. The input CVSS 4.0 vector (AV:N/AC:L/PR:N/UI:N) and score of 6.9 (MEDIUM) frame it as a remote, unauthenticated, low-integrity-impact issue with VI:L and VC:N/VA:N - confirming the harm is integrity-only (an unsigned/malicious package slipping past verification), not confidentiality or availability. No EPSS score was provided, there is no CISA KEV listing (status: no), and no public proof-of-concept is indicated, so by the precision rules this is 'no public exploit identified at time of analysis.' The GHSA advisory materially contradicts the PR:N 'default-config' impression: real exploitation requires THREE simultaneous conditions (signature verification enabled, tag-based installs, and pulling from an untrusted/attacker-controlled registry), which makes the practical attack surface narrower than the AC:L/PR:N vector implies. The 'network' and 'no privileges' metrics are technically accurate (the attacker operates a malicious OCI registry over the network, needing no credentials on the Crossplane system) but the TOCTOU race and configuration preconditions mean this is targeted, not opportunistic/wormable. Bottom line: a credible, well-documented defense-in-depth bypass worth patching on a normal cycle, but not a high-urgency 'drop everything' item absent evidence of exploitation; the main gap is missing EPSS and any telemetry on real-world abuse. |
| Exploit ScenarioDerived | An organization enables Crossplane package signature verification but installs packages by tag (e.g., a semantic version) from a third-party OCI registry it does not control. The attacker, controlling or compromising that registry, serves a correctly-signed image when Crossplane performs the cosign verification (the 'check'), then serves a different unsigned/malicious image when Crossplane subsequently fetches by the same tag (the 'use'), installing unverified code into the control plane. No public exploit code is identified, but the attack is reliable because the attacker fully controls the registry's responses between the two requests. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 04, 2026
A time-of-check/time-of-use (TOCTOU) flaw in Crossplane's crossplane-runtime package manager (pkg/xpkg/client.go) lets a malicious OCI registry defeat cosign package signature verification, causing an unsigned or tampered package to be installed in place of the verified one. Exploitation requires an unusual combination of non-default operational choices: signature verification enabled through the ImageConfig mechanism, packages installed by mutable tag reference (such as a semantic version) instead of an immutable digest, and installation from a registry the operator does not control, where the attacker can serve a signed image for the cosign verifier and a different unsigned image moments later for the fetch. Impact is limited to integrity - an unverified package is pulled and installed - with no direct confidentiality or availability effect, and no public exploit code has been identified at time of analysis. Fixes are available in crossplane-runtime v2.2.3, v2.3.3, and v2.4.0-rc.1.
RemediationAI
Vendor-released patch: upgrade crossplane-runtime to v2.2.3, v2.3.3, or v2.4.0-rc.1, which pin tag resolution to a single digest before validation and fetch. The upstream change is PR #1038 (https://github.com/crossplane/crossplane-runtime/pull/1038), commit bee99c6cd6ca81878acca2940a2f0a02169fc208, with release artifacts at https://github.com/crossplane/crossplane-runtime/releases/tag/v2.2.3 and the advisory at https://github.com/advisories/GHSA-mf7q-r4rv-jv94. Until upgrading, the documented mitigation is to install packages by image digest rather than by mutable tag - the trade-off is that digest pinning disables automatic pickup of tag updates, so package upgrades must be performed by explicitly changing the pinned digest. A second compensating control is to restrict package installation to OCI registries the operator controls or otherwise trusts, which removes the attacker's ability to serve divergent content but constrains the package supply chain and requires registry allow-listing. Disabling ImageConfig signature verification entirely would also remove the vulnerable code path, but this is a security downgrade that abandons supply-chain verification and is not recommended except as a last resort. Confirm that no other component shares the underlying crossplane-runtime module at a vulnerable version before considering remediation complete.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Crossplane's package manager (crossplane-runtime, Go module github.com/crossplane/crossplane-runtime/v2) implements CachedClient.Get in pkg/xpkg/client.go, which resolves an OCI package reference, runs cosign-based signature validation via validator.Validate, and then fetches the image via fetcher.Fetch. In vulnerable versions the tag reference was resolved separately for each of these steps: the digest obtained during the initial Head/resolution was used to attest the signature, but the subsequent Validate and Fetch calls were performed using the original tag reference. Because an OCI tag is a mutable pointer, a hostile registry can answer the first resolution with a legitimately signed image digest and then repoint the tag to unsigned content before the fetch, so the bytes actually installed never had their signature checked - the classic CWE-367 time-of-check time-of-use race, applied to a supply-chain verification boundary. The upstream fix (PR #1038, commit bee99c6cd6ca81878acca2940a2f0a02169fc208) pins every subsequent registry interaction to the digest resolved once by Head, constructing a single digestRef that is passed to both Validate and Fetch, so verification and installation address identical content. The affected component is the ImageConfig signature-verification path, CPE cpe:2.3:a:crossplane:crossplane-runtime:*:*:*:*:*:*:*:*.
Know when Crossplane 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
Remote and unauthenticated to the Crossplane host, but non-default verification config, tag-based installs, and an attacker-controlled registry plus a race make AC:H; only integrity (unsigned package) is affected.
Primary rating from Vendor (VulDB).
CVSS VectorVendor: VulDB
DescriptionCVE.org
A vulnerability was detected in crossplane crossplane-runtime up to 2.2.2/2.3.2. This vulnerability affects the function Get of the file pkg/xpkg/client.go of the component ImageConfig. The manipulation results in time-of-check time-of-use. The attack may be launched remotely. Upgrading to version 2.2.3, 2.3.3 and 2.4.0-rc.1 is able to resolve this issue. The patch is identified as bee99c6cd6ca81878acca2940a2f0a02169fc208. You should upgrade the affected component.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
More in Crossplane
View allCrossplane is a framework for building cloud native control planes without needing to write code. Rated critical severit
crossplane-runtime is a set of go libraries used to build Kubernetes controllers in Crossplane and its related stacks. R
Crossplane is a framework for building cloud native control planes without needing to write code. Rated low severity (CV
crossplane-runtime is a set of go libraries used to build Kubernetes controllers in Crossplane and its related stacks. R
EUVD-2026-92128
GHSA-92mr-7mjc-w93g
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB