Skip to main content

Crossplane EUVDEUVD-2026-92128

| CVE-2026-105163 MEDIUM
Time-of-check Time-of-use (TOCTOU) Race Condition (CWE-367)
2026-10-04 VulDB GHSA-92mr-7mjc-w93g
6.9
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

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

  1. Access
    Operate or compromise an OCI registry
  2. Delivery
    Victim triggers tag-based package install
  3. Exploit
    Serve signed image to cosign verifier
  4. Execution
    Serve unsigned image on fetch
  5. Impact
    Install 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

crossplane-runtime 2.2.1
crossplane-runtime 2.2.0
crossplane-runtime 2.2.2
crossplane-runtime 2.3.2
crossplane-runtime 2.3.0
crossplane-runtime 2.3.1

Affected Packages

go github.com/crossplane/crossplane-runtime/v2 fix: 2.3.3, 2.4.0-rc.1
euvd crossplane_runtime no fix

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

Vendor (VulDB) PRIMARY 6.9 MEDIUM
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
vuln.today AI 3.7 LOW

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.

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

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

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

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

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Medium
CNCF Crossplane common in platform-engineering/Kubernetes, not universally deployed
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

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