WS-2026-0058
Published:August 27, 2026
Updated:September 02, 2026
crossplane-runtime's xpkg.CachedClient.Get() resolved a package tag to a digest with fetcher.Head(), had cosign verify that digest, and then re-fetched the image by the original tag - so the verified digest and the pulled bytes came from two independent registry requests. A registry serving different content between the two requests can have verification succeed against a benign signed digest while an unsigned malicious manifest is installed, defeating ImageConfig signature verification. Fixed in 2.3.3 and 2.4.0-rc.1 by pinning both the validator call and the fetch to the resolved digest.
Affected Packages
https://github.com/crossplane/crossplane-runtime.git (GITHUB):
Affected version(s) =v2.4.0-rc.0 <v2.4.0-rc.1Fix Suggestion:
Update to version v2.4.0-rc.1https://github.com/crossplane/crossplane-runtime.git (GITHUB):
Affected version(s) >=v2.3.0 <v2.3.3Fix Suggestion:
Update to version v2.3.3github.com/crossplane/crossplane-runtime/v2 (GO):
Affected version(s) >=v2.3.0 <v2.3.3Fix Suggestion:
Update to version v2.3.3Related Resources (3)
Do you need more information?
Contact UsCVSS v4
Base Score:
9
Attack Vector
NETWORK
Attack Complexity
HIGH
Attack Requirements
NONE
Privileges Required
NONE
User Interaction
PASSIVE
Vulnerable System Confidentiality
HIGH
Vulnerable System Integrity
HIGH
Vulnerable System Availability
HIGH
Subsequent System Confidentiality
HIGH
Subsequent System Integrity
HIGH
Subsequent System Availability
HIGH
CVSS v3
Base Score:
8.3
Attack Vector
NETWORK
Attack Complexity
HIGH
Privileges Required
NONE
User Interaction
REQUIRED
Scope
CHANGED
Confidentiality
HIGH
Integrity
HIGH
Availability
HIGH