Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessRegister sibling-suffix domain (evilghcr.io)
-
DeliveryGet deployment to reference image on that host
-
ExploitregistryFor suffix-matches victim registry config
-
ExecutionImagepuller sends Authorization header + disables TLS
-
ImpactCapture leaked registry credential
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Hardware access control
|
| Exploitation Conditions | Requires a specific misconfiguration plus attacker positioning: (1) the operator must configure a per-registry block in the imagepuller using an FQDN with NO leading dot, e.g. [registries."ghcr.io."] or [registries."ghcr.io"] - configurations using a leading dot such as [registries.".example.registry"] are entirely unaffected; and (2) an image or layer must be pulled from a sibling domain whose hostname ends in that byte sequence (e.g. evilghcr.io), which the attacker must register/control, or which occurs coincidentally. Limiting factors: dual preconditions (operator config error AND attacker-controlled sibling domain in the pull path) make exploitation high-complexity; only Contrast versions through 1.20.0 are affected (fixed in 1.21.0, which enforces exact per-DNS-label equality); and the leak is bounded to credentials/CA-trust/mirror behavior, not image contents. |
| Impact | This is a genuinely low-to-moderate real-world risk best treated as configuration hygiene rather than an urgent priority. The vendor CVSS 4.0 vector (6.3, AV:N/AC:H/AT:P/PR:N/VC:L) is internally consistent with the described mechanics: network vector because credentials leak to an attacker-controlled registry, but AC:H and AT:P because exploitation demands two independent preconditions - the operator must have configured a registry FQDN WITHOUT a leading dot, AND the attacker must control a sibling-suffix domain (e.g. evilghcr.io) that the deployment actually pulls an image or layer from. Impact is confined to confidentiality (VC:L / C:L): leaked Authorization header plus disabled TLS verification and mirror redirection for the sibling host. There is no integrity or availability impact - image bytes stay pinned by digest and are validated after pull, so no code substitution is possible. No EPSS score, no CISA KEV listing, and no public POC are present in the input; the advisory describes the flaw clearly but ships no weaponized exploit. Signals do not conflict: low likelihood (high complexity, dual precondition, no exploitation evidence) matches the moderate-but-not-critical score. The only notable metadata gap is that this is credential disclosure to a system under attacker control, which some analysts would model as a scope change (S:C) - the vendor chose S:U, keeping impact within the imagepuller. |
| Exploit ScenarioDerived | An operator configures a Contrast imagepuller registry block as [registries."ghcr.io."] (no leading dot) with a registry token and custom CA. An attacker registers evilghcr.io and gets the deployment to reference an image or layer on that host; because HasSuffix matches without a label boundary, the imagepuller sends the configured Authorization header (and honours insecure-skip-verify) to the attacker's server, leaking the credential. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 27, 2026
Credential leakage in Edgeless Systems Contrast through 1.20.0 stems from unanchored suffix matching in the imagepuller's per-registry configuration lookup, which allows a registry block defined for one FQDN to be applied to any hostname merely ending in that same byte sequence. When a deployment pulls an image from a sibling domain such as evilghcr.io that an attacker has registered (or that appears coincidentally in the pull path), the imagepuller transmits the configured Authorization header - basic auth, registry token, or identity token - and additionally inherits the host's custom CA bundle, mirror setting, and insecure-skip-verify behavior, disabling TLS verification for that host. The CVSS 4.0 base score is 6.3 (our independent assessment scores it 3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N), and the vector requires no privileges (PR:N) but is rated high-complexity because two independent preconditions must align: a per-registry FQDN configured without a leading dot, and an image pulled from a matching suffix domain. There is no public exploit identified at time of analysis and no KEV listing; the issue is best treated as configuration hygiene, and configuration entries that use a leading dot (for example [registries.".example.registry"]) are entirely unaffected.
RemediationAI
Vendor-released patch: upgrade to Contrast 1.21.0, which determines registry matches by exact DNS label equality instead of suffix matching - see GHSA-6c87-g9pw-78fx and the upstream commit 10826b1d82613025767fb094e8aa51a7dcfbd2a1. Until upgrading, the vendor-recommended workaround is to configure explicit subdomains or prepend a leading dot to each registry FQDN in the imagepuller config (for example [registries.".example.registry"]), since leading-dot entries are unaffected by the flawed comparison; note the trade-off that a leading-dot block no longer matches the bare apex hostname, so verify that pulls from the intended registry still receive the correct credential, CA bundle, and mirror settings after the change. Operators should also audit deployment pull paths and image references for sibling domains whose names end in a configured FQDN, and remove insecure-skip-verify from any registry block, because that setting is inherited by the sibling host and suppresses TLS certificate validation entirely. Rotating any registry tokens or basic-auth credentials associated with affected FQDNs is prudent if a pull from an unexpected sibling domain may have occurred. Avoiding credentials in per-registry blocks for apex domains, or scoping tokens to a single repository, limits the blast radius of any residual configuration error. Note that digest pinning in the policy continues to protect image integrity throughout, so these steps target credential and trust leakage rather than image substitution.
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
Contrast is a Kubernetes-based confidential-computing platform whose imagepuller resolves per-registry settings from the runtime config. The vulnerable helper, Config.registryFor, stripped one trailing dot from the requested hostname and then evaluated strings.HasSuffix(hostname, fqdn) with no DNS label boundary check, so the comparison operated on raw byte suffixes rather than on label-aligned FQDNs. This is CWE-1289 (improper validation of unsafe equivalence), where a string comparison treats non-equivalent values as equal: ghcr.io, evilghcr.io, and notghcr.io all satisfy the same suffix test. The result is misrouting of trust material - the matched block's Authorization header, custom CA bundle, mirror endpoint, and insecure-skip-verify flag are all applied to the sibling host, meaning an attacker controlling such a domain receives live registry credentials and can present TLS certificates that the client would not validate if verification was disabled. The fix replaces suffix matching with exact per-label equality, requiring every dot-separated label of the configured FQDN to match the corresponding label in the image reference. Notably, image integrity is preserved regardless: image bytes stay pinned by digest in the policy and are validated after the pull, so this is a confidentiality and trust-boundary defect, not a code-substitution or supply-chain integrity flaw.
Know when Contrast 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:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Network credential leak but AC:H due to required no-leading-dot config plus attacker-controlled sibling domain in the pull path; confidentiality-only (C:L), integrity digest-pinned so I:N/A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Contrast (Edgeless Systems) through 1.20.0 performs unanchored suffix matching when selecting per-registry configuration in the imagepuller. Config.registryFor strips a single trailing dot and then uses strings.HasSuffix(hostname, fqdn) without requiring a DNS label boundary, so a registry entry such as [registries."ghcr.io."] is also applied to any host whose name merely ends in that byte sequence, including attacker-registered domains such as evilghcr.io. When an image or layer is pulled from such a sibling domain, the imagepuller sends the configured Authorization header (basic auth, registry token, or identity token), trusts the configured custom CA bundle, follows the configured mirror, and honours insecure-skip-verify (disabling TLS verification) for that host. Image integrity is not affected, as image bytes remain pinned by digest in the policy and are validated after the pull. Configurations that use a leading dot (e.g., [registries.".example.registry"]) are unaffected.
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
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Related Vulnerabilities in Contrast Confidential-Computing Runtime Multiple Flaws
View all 11Improper verification in the Edgeless Systems Contrast Coordinator's peer-recovery path (versions 1.8.0 through 1.24.0)
Local privilege escalation in Edgeless Systems Contrast 1.8.0 through 1.24.0 allows a low-privileged local user on a nod
EUVD-2026-87832
GHSA-frqc-cxqj-qxmv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB