Executive Summary
A high-severity information disclosure vulnerability (CVE-2025-71425) has been disclosed in Contrast, Edgeless Systems' confidential-computing runtime for Kubernetes. In versions before 1.8.1, the Contrast initializer logs the workload secret to stderr — and therefore into Kubernetes-collected logs — whenever CONTRAST_LOG_LEVEL is set to info or debug. Because info is the default log level, every installation that has not explicitly customized the initializer's log level is affected out of the box.
This is the original issue later reintroduced as a regression tracked separately as CVE-2025-71423.
CVSS Score: 7.3 (High) Fixed in: Contrast 1.8.1
Vulnerability Overview
| Attribute | Value |
|---|---|
| CVE ID | CVE-2025-71425 |
| CVSS Score | 7.3 (High) |
| Type | Sensitive Information Disclosure via Logging (CWE-532) |
| Component | Contrast initializer |
| Affected Versions | Before 1.8.1 |
| Fixed Version | 1.8.1 |
| Default-Affected | Yes — info is the default CONTRAST_LOG_LEVEL |
| Later Reintroduced As | CVE-2025-71423 (regression) |
Technical Details
Root Cause
The Contrast initializer writes diagnostic output to stderr, which Kubernetes captures as part of standard pod logs. When CONTRAST_LOG_LEVEL is set to info (the default) or debug, that diagnostic output includes the workload secret — a value that Contrast's design intends to keep accessible only to the Coordinator, the initializer, the seedshare owner, and the workload owner.
Because info requires no explicit configuration to trigger the exposure, every default Contrast deployment predating 1.8.1 was affected without any misconfiguration on the operator's part.
Attack Chain
1. A Contrast-protected workload is deployed with default settings
(CONTRAST_LOG_LEVEL unset, defaulting to "info")
2. The initializer logs the workload secret to stderr during startup
3. Kubernetes captures container stderr as pod logs
4. Any principal with get/list on pods/logs — or read access to
wherever cluster logs are shipped — retrieves the workload secret
5. The attacker uses the recovered secret to compromise encrypted
storage or impersonate the workload against VaultImpact Assessment
| Impact Area | Description |
|---|---|
| Confidentiality | Workload secrets, and everything they protect, must be treated as compromised for any affected deployment |
| Default Exposure | No non-default configuration was required to be vulnerable — this affected out-of-the-box installations |
| Scope of Exposure | Any principal with pod-log read access, including cloud providers hosting managed Kubernetes log storage |
| Historical Log Retention | Secrets logged before the upgrade may persist in log storage/backups well past the patch date |
Recommendations
Immediate Actions
- Upgrade to Contrast 1.8.1 or later if running any older version — and continue on to the latest release, since this exact class of bug reappeared in a later regression (CVE-2025-71423).
- Rotate all workload secrets for workloads that ever ran an initializer version prior to 1.8.1.
- Purge or restrict access to historical logs covering the vulnerable window, including any downstream log aggregation or SIEM retention.
- Explicitly set
CONTRAST_LOG_LEVELto a level that avoids secret-bearing debug/info output where your Contrast version still supports tuning it, as defense in depth alongside upgrading.
Detection
- Search historical stderr/pod logs for workload-secret-shaped strings dating back to initial deployment.
- Audit RBAC bindings granting
pods/logsaccess across all namespaces running Contrast-protected workloads.