Someone left the master key to the building's intercom system inside a rarely-used janitor's closet
CVE-2026-78234 is a design flaw in hawtio-operator, the Kubernetes operator for the HawtIO diagnostic console used with Red Hat build of Apache Camel on OpenShift. The operator reads the OpenShift Service CA private signing key from the openshift-service-ca namespace and uses it to mint client TLS certificates whose Subject CN is pulled directly from user-authored Hawtio custom resources. Because the operator ships a ClusterRole that aggregates Hawtio CR permissions into the default edit and admin roles, any user with edit access in any namespace can request a Service-CA-signed certificate with an arbitrary subject. That certificate lets the holder impersonate any in-cluster service identity trusted by the Service CA — including Jolokia agents on Java workloads, where MBean invocation yields remote code execution. Affected product: Red Hat build of Apache Camel – HawtIO 4 (all versions prior to a fix; no patched version has been published as of 2026-09-09). Reported to Red Hat on 2026-05-20, publicly disclosed 2026-09-08.
Red Hat assigned CVSS 9.9 CRITICAL with Changed scope, reflecting cross-tenant blast radius. The *technical* severity is accurate: the chain is low-complexity, requires only low-privilege (namespace edit), and the impact is cluster-wide service impersonation plus RCE. However, the real-world severity is lower than 9.9 for most enterprises because hawtio-operator is a niche diagnostic tool for Apache Camel/Fuse workloads — it is *not* a default OpenShift component, does not appear in Red Hat's top-10 deployed operators, and the vast majority of OpenShift clusters do not run it. The vulnerability is also OpenShift-specific (not vanilla Kubernetes). For the subset of clusters that *do* run it, this is genuinely dangerous: it turns every developer with edit into a cluster-wide signing oracle.
5 steps from start to impact.
Obtain namespace edit access
edit ClusterRole (or higher) in any namespace on an OpenShift cluster running hawtio-operator. In most OpenShift deployments, this is the default role granted to developers. An external attacker would need to compromise a developer's credentials or exploit another vulnerability to reach this position.- OpenShift cluster with hawtio-operator installed
- User account with
editrole in at least one namespace
- Hawtio-operator is a niche add-on; most OpenShift clusters do not have it installed
- Requires authenticated access — not reachable by unauthenticated external attackers
oc get hawtio --all-namespaces to enumerate existing CRsCreate a Hawtio CR with arbitrary CN
Hawtio custom resource specifying a malicious spec.routeHostName or other field that feeds into the certificate Subject CN. Because the operator's ClusterRole aggregates into edit, no additional RBAC escalation is needed. The operator's reconciliation loop picks up the CR and proceeds to mint a certificate.- Ability to create/modify Hawtio CRs in the namespace
- If RBAC has been hardened to remove Hawtio CR verbs from the edit role, this step fails
- Organizations with admission controllers (OPA/Gatekeeper/Kyverno) that validate CR fields could block malicious values
CREATE or UPDATE on hawtio.hawt.io resources; policy engine alerts on unexpected CR field valuesOperator mints a forged Service-CA certificate
openshift-service-ca namespace and signs a new client certificate using the attacker-controlled CN. This certificate is valid for any peer that trusts the OpenShift Service CA for client authentication. The operator acts as a *signing oracle* — it has no validation that the requested CN corresponds to a legitimate service identity.- Operator has RBAC to read the Service CA signing secret (default behavior)
- If the operator's ServiceAccount RBAC has been manually restricted to prevent reading the signing secret, this step fails — but this is not a documented hardening step
GET on the signing-key secret in openshift-service-ca namespace; certificate transparency logs (if configured for internal CA)Impersonate target service via forged certificate
- Target services use Service CA for client certificate authentication
- Network connectivity to the target service (typically within the cluster SDN)
- Services using their own CA chain or not requiring client certs are unaffected
- Network policies may restrict cross-namespace traffic
RCE via Jolokia MBean invocation
javax.management.loading.MLet, runtime exec beans) permit arbitrary code execution. The attacker invokes these MBeans to execute commands as the Java process user, typically achieving container-level compromise and potentially pivoting further via service account tokens.- Target Java workload exposes Jolokia agent
- Jolokia MBeans include code-execution-capable operations
- Not all Java workloads in the cluster run Jolokia
- Container sandboxing and pod security standards limit post-exploitation lateral movement
The supporting signals.
| In-the-wild exploitation | No confirmed exploitation. Not listed in CISA KEV. No threat campaigns reported as of 2026-09-09. |
|---|---|
| Proof of concept | No public PoC available. No exploit code found on GitHub, ExploitDB, or Nuclei templates. The attack is conceptually straightforward (create a CR, extract the cert) but no weaponized tool has been published. |
| EPSS score | Not yet scored (CVE disclosed 2026-09-08, <48 hours old). Expect low initial EPSS given niche product scope. |
| KEV status | Not listed in CISA KEV as of 2026-09-09. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H — Network-accessible, low complexity, low privilege required, Changed scope (cross-tenant impact). The S:C is the key driver: compromise of one namespace's edit role impacts the entire cluster's trust model. |
| Affected versions | Red Hat build of Apache Camel – HawtIO 4 (all versions). Upstream hawtio-operator on GitHub likely affected across 1.x and 2.x branches. No specific version range boundaries published by Red Hat. |
| Fixed versions | No fix available as of 2026-09-09. Red Hat has not published an RHSA for this CVE. Prior advisory RHSA-2026:25089 (HawtIO 4.4.0, 2026-06-10) addressed other issues but predates this disclosure. |
| Scanning / exposure data | Hawtio-operator is an OpenShift-only operator installed via OperatorHub. Not externally exposed (runs inside cluster). No Shodan/Censys/GreyNoise footprint — this is an internal-cluster attack surface only. Install base estimated to be a small fraction of OpenShift clusters (Apache Camel users only). |
| Disclosure timeline | Reported to Red Hat: 2026-05-20. Public disclosure: 2026-09-08. Red Hat Bugzilla: 2524894. |
| Reporting researcher | Not publicly credited. Red Hat is the CNA (CVE assigner). |
noisgate verdict.
Decisive downgrade factor: niche installed base — hawtio-operator is an optional diagnostic add-on for Apache Camel workloads on OpenShift, not a default cluster component, meaning the vast majority of OpenShift clusters (and all vanilla Kubernetes clusters) are entirely unaffected. The HIGH floor holds because the affected component has direct access to the cluster-scoped Service CA signing key, and successful exploitation yields a cluster-wide signing oracle with cross-tenant service impersonation and RCE — a PKI-level blast radius that prevents further downgrade.
Why this verdict
- Niche product scope: Hawtio-operator is an optional OperatorHub add-on used exclusively by teams running Apache Camel/Fuse on OpenShift. It is not a default component, does not appear in Red Hat's top-10 deployed operators, and has no footprint on vanilla Kubernetes. Most enterprise OpenShift clusters are not affected.
- Authenticated prerequisite: Exploitation requires
editrole in any namespace — a common developer permission, but still an authenticated position. An external unauthenticated attacker cannot reach this without a prior compromise, compounding the chain with at least one prerequisite step. - No exploitation or PoC: Zero days since disclosure, no public exploit code, no KEV listing, no observed campaigns. The attack is conceptually simple but not yet weaponized.
- Role multiplier: The affected component directly handles the OpenShift Service CA signing key, which is a cluster-scoped trust anchor. When hawtio-operator IS installed, exploitation yields a signing oracle → cross-namespace service impersonation → RCE via Jolokia. Blast radius is cluster-wide (not just one namespace). This PKI-adjacent role sets a floor of HIGH and prevents downgrade to MEDIUM despite the niche install base.
- No fix available: Red Hat has disclosed the CVE but has not yet shipped a patched operator version, leaving defenders reliant on compensating controls. This is a negative factor that supports maintaining HIGH rather than downgrading further.
Why not higher?
A CRITICAL rating would require either active exploitation, a broadly-deployed component, or a canonical high-value-role where ≥10% of installs occupy that role by definition. Hawtio-operator is none of these: it is a niche diagnostic tool with a small install base, no exploitation in the wild, no public PoC, and the attack requires authenticated access (namespace edit). The 9.9 CVSS reflects theoretical maximum impact but not real-world exposure.
Why not lower?
The component directly accesses the OpenShift Service CA private signing key — a cluster-scoped trust anchor. Successful exploitation is a CA-level compromise: the attacker can forge certificates for any service identity in the cluster, impersonate services cross-namespace, and achieve RCE via Jolokia MBeans. This PKI-scale blast radius, combined with no available patch, prevents a MEDIUM rating. The edit role prerequisite is a low bar in most OpenShift environments (standard developer access).
What to do — in priority order.
- Remove hawtio-operator if not actively used — The most effective control. If your team is not actively using HawtIO for Camel diagnostics, uninstall the operator entirely via OperatorHub or
oc delete subscription. This eliminates the attack surface completely. Per the noisgate mitigation SLA for HIGH, deploy this control within 30 days — but given no patch exists, do this immediately if feasible. - Strip Hawtio CR verbs from edit/admin ClusterRoles — The operator's ClusterRole aggregates Hawtio CR permissions into the default
editandadminroles. Create a ClusterRole override that removescreate,update, andpatchverbs onhawtio.hawt.ioresources from these aggregated roles. This breaks the attack at step 2 by preventing arbitrary users from creating the malicious CR. Deploy within 30 days per the noisgate mitigation SLA. - Deploy admission policy to validate Hawtio CR fields — Use OPA/Gatekeeper or Kyverno to enforce that
spec.routeHostNameand other CN-influencing fields in Hawtio CRs match an allowlist of legitimate values. This prevents the signing oracle from issuing certs with arbitrary subjects. - Restrict operator ServiceAccount RBAC — Manually remove the operator's ServiceAccount permission to read secrets in the
openshift-service-canamespace. This breaks the signing oracle entirely but will also break legitimate hawtio-operator TLS functionality. Only appropriate if you can tolerate degraded HawtIO operation. - Enforce NetworkPolicies for cross-namespace isolation — Apply Kubernetes NetworkPolicies that restrict pod-to-pod communication across namespaces. This limits the attacker's ability to reach Jolokia endpoints on Java workloads in other namespaces, even if they obtain a forged certificate.
- WAF / ingress-level controls — this is an intra-cluster attack using Kubernetes API and internal mTLS. No ingress traffic is involved, so WAF rules and ingress controllers provide no protection.
- Pod Security Standards / SecurityContextConstraints — these control container runtime privileges (runAsRoot, capabilities) but do not prevent Hawtio CR creation or certificate minting, which happen at the Kubernetes API level.
- Rotating the Service CA — while rotating certificates is good hygiene, it does not help because the operator retains access to the *new* signing key and the signing oracle remains functional.
Crowdsourced verification payload.
Run this script on any host with oc (OpenShift CLI) authenticated to the target cluster. Requires at least cluster-reader privileges. Invoke: bash check_cve_2026_78234.sh
#!/usr/bin/env bash
# CVE-2026-78234 — Hawtio Operator Signing Oracle Check
# Checks whether hawtio-operator is installed and whether the
# aggregated ClusterRole grants edit users Hawtio CR access.
# Exit codes: 0=VULNERABLE, 1=PATCHED, 2=UNKNOWN
set -euo pipefail
echo "[*] CVE-2026-78234 — Hawtio Operator Signing Oracle Check"
echo "============================================================"
# Step 1: Check if hawtio-operator is installed
HAWTIO_SUB=$(oc get subscriptions.operators.coreos.com --all-namespaces -o json 2>/dev/null | \
grep -i hawtio || true)
HAWTIO_PODS=$(oc get pods --all-namespaces -l name=hawtio-operator -o name 2>/dev/null || true)
if [[ -z "$HAWTIO_SUB" && -z "$HAWTIO_PODS" ]]; then
echo "[+] hawtio-operator is NOT installed on this cluster."
echo "PATCHED"
exit 1
fi
echo "[!] hawtio-operator IS installed on this cluster."
echo " Subscription/pods found."
# Step 2: Check if Hawtio CRD exists
if ! oc get crd hawtios.hawt.io &>/dev/null; then
echo "[?] Hawtio CRD not found — operator may be partially installed."
echo "UNKNOWN"
exit 2
fi
echo "[!] Hawtio CRD (hawtios.hawt.io) exists."
# Step 3: Check if edit/admin ClusterRoles have Hawtio CR verbs
EDIT_HAWTIO=$(oc get clusterrole -l rbac.authorize.openshift.io/aggregate-to-edit=true -o json 2>/dev/null | \
grep -c 'hawtios' || echo 0)
ADMIN_HAWTIO=$(oc get clusterrole -l rbac.authorize.openshift.io/aggregate-to-admin=true -o json 2>/dev/null | \
grep -c 'hawtios' || echo 0)
if [[ "$EDIT_HAWTIO" -gt 0 || "$ADMIN_HAWTIO" -gt 0 ]]; then
echo "[!] Hawtio CR verbs are aggregated into edit/admin ClusterRoles."
echo " Any namespace editor can create Hawtio CRs (signing oracle active)."
else
echo "[+] Hawtio CR verbs are NOT aggregated into edit/admin roles."
echo " Signing oracle may be restricted (manual RBAC hardening detected)."
echo "PATCHED"
exit 1
fi
# Step 4: Check for existing Hawtio CRs
HAWTIO_CRS=$(oc get hawtio --all-namespaces -o json 2>/dev/null | \
python3 -c "import sys,json; d=json.load(sys.stdin); print(len(d.get('items',[])))" 2>/dev/null || echo 0)
echo "[*] Found $HAWTIO_CRS existing Hawtio CR(s) across all namespaces."
echo ""
echo "=== RESULT ==="
echo "VULNERABLE"
echo "hawtio-operator is installed with default aggregated RBAC."
echo "Any namespace editor can exploit CVE-2026-78234 as a signing oracle."
exit 0If you remember one thing.
edit/admin aggregated ClusterRoles immediately, and (3) deploy an admission policy to validate Hawtio CR field values. Monitor Red Hat advisories for a patched operator version and apply it within the noisgate remediation SLA of 180 days from patch availability. Audit existing Hawtio CRs across all namespaces for unexpected routeHostName values and rotate any Service-CA-signed certificates that may have been minted with suspicious subjects.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.