CVE-2025-23047 Overview
CVE-2025-23047 is an information disclosure vulnerability in Cilium's Hubble UI component. The flaw stems from an insecure default Access-Control-Allow-Origin: * header set in the nginx configuration template. Cilium is a networking, observability, and security solution built on an eBPF-based dataplane. Hubble UI deployments provisioned through the Cilium CLI or the Cilium Helm chart are affected. An attacker who lures a victim with access to Hubble UI to visit a malicious page can read cross-origin responses and leak Kubernetes cluster metadata, including node names, IP addresses, and workload networking details. The issue is classified as [CWE-200] Exposure of Sensitive Information to an Unauthorized Actor.
Critical Impact
Cross-origin data theft exposing Kubernetes node names, IP addresses, and workload metadata to attacker-controlled web pages.
Affected Products
- Cilium versions 1.14.0 through 1.14.17
- Cilium versions 1.15.0 through 1.15.11
- Cilium versions 1.16.0 through 1.16.4
Discovery Timeline
- 2025-01-22 - CVE-2025-23047 published to NVD
- 2026-06-17 - Last updated in NVD database
Technical Details for CVE-2025-23047
Vulnerability Analysis
Hubble UI ships with an nginx reverse proxy that fronts the Hubble API. The default nginx template sets permissive Cross-Origin Resource Sharing (CORS) headers on API responses, allowing any origin to read responses issued to authenticated users. When a Hubble UI user visits an attacker-controlled page in the same browser session, JavaScript on the malicious page can issue cross-origin requests to the Hubble API and read the returned data. Responses include Kubernetes cluster topology, node identifiers, pod IP addresses, service metadata, and networking configuration. This turns internal cluster observability data into information reachable from arbitrary origins.
Root Cause
The root cause is an insecure default configuration [CWE-200] in the Helm template install/kubernetes/cilium/templates/hubble-ui/_nginx.tpl. The template unconditionally emits Access-Control-Allow-Origin *, along with permissive method and header allow-lists. It also hides any upstream Access-Control-Allow-Origin header set by the API. Together these directives override same-origin protections that browsers would normally enforce against the Hubble API.
Attack Vector
Exploitation requires user interaction. A victim with active access to a Hubble UI instance must load an attacker-controlled page. That page issues fetch or XMLHttpRequest calls to the Hubble UI API endpoint. Because the response includes Access-Control-Allow-Origin: *, the browser exposes the response body to the attacker script. No authentication bypass is required against Cilium itself; the browser trust boundary is what is broken.
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
- # CORS
- add_header Access-Control-Allow-Methods "GET, POST, PUT, HEAD, DELETE, OPTIONS";
- add_header Access-Control-Allow-Origin *;
- add_header Access-Control-Max-Age 1728000;
- add_header Access-Control-Expose-Headers content-length,grpc-status,grpc-message;
- add_header Access-Control-Allow-Headers range,keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout;
- if ($request_method = OPTIONS) {
- return 204;
- }
- # /CORS
-
location {{ .Values.hubble.ui.baseUrl }}api {
{{- if not (eq .Values.hubble.ui.baseUrl "/") }}
rewrite ^{{ (trimSuffix "/" .Values.hubble.ui.baseUrl) }}(/.*)$ $1 break;
{{- end }}
proxy_http_version 1.1;
proxy_pass_request_headers on;
- proxy_hide_header Access-Control-Allow-Origin;
{{- if eq .Values.hubble.ui.baseUrl "/" }}
proxy_pass http://127.0.0.1:8090;
{{- else }}
Source: Cilium commit a3489f1 - This patch removes the wildcard CORS headers from the Hubble UI nginx template and stops hiding upstream origin headers.
Detection Methods for CVE-2025-23047
Indicators of Compromise
- HTTP responses from the Hubble UI service returning Access-Control-Allow-Origin: * on /api routes.
- Unexpected cross-origin fetch or XMLHttpRequest calls to Hubble UI endpoints originating from external referrers.
- Browser network logs showing successful CORS preflight (OPTIONS) responses with 204 status from Hubble UI.
Detection Strategies
- Inspect the deployed hubble-uiConfigMap or nginx template for add_header Access-Control-Allow-Origin * and proxy_hide_header Access-Control-Allow-Origin directives.
- Query cluster inventory for Cilium versions matching 1.14.0–1.14.17, 1.15.0–1.15.11, or 1.16.0–1.16.4 and flag as vulnerable.
- Review ingress or service mesh logs for external Origin and Referer headers targeting the Hubble UI API path.
Monitoring Recommendations
- Alert on HTTP requests to Hubble UI where the Origin header does not match the expected internal domain.
- Continuously validate Helm-rendered manifests against a policy that forbids wildcard CORS headers on internal observability endpoints.
- Track browser telemetry from privileged operators for redirects or navigations immediately preceding Hubble UI API activity.
How to Mitigate CVE-2025-23047
Immediate Actions Required
- Upgrade Cilium to v1.14.18, v1.15.12, or v1.16.5 depending on your minor release track.
- Restrict network access to Hubble UI to trusted operator networks using NetworkPolicy or ingress ACLs.
- Instruct users with Hubble UI access to avoid using the same browser session for untrusted browsing until patched.
Patch Information
The fix is delivered in Cilium v1.14.18, v1.15.12, and v1.16.5. Commit a3489f1 removes the permissive CORS headers and the proxy_hide_header directive from install/kubernetes/cilium/templates/hubble-ui/_nginx.tpl. Full details are available in the GitHub Security Advisory GHSA-h78m-j95m-5356.
Workarounds
- Users deploying Hubble UI via the Cilium Helm chart can remove the CORS headers from the Helm template as shown in commit a3489f1.
- Place Hubble UI behind an authenticating reverse proxy that strips or overrides Access-Control-Allow-Origin responses.
- Disable public exposure of Hubble UI until the patched release is deployed.
# Upgrade Cilium via Helm to a patched release
helm repo update
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--version 1.16.5 \
--reuse-values
# Verify Hubble UI no longer advertises wildcard CORS
kubectl -n kube-system exec deploy/hubble-ui -c frontend -- \
grep -R "Access-Control-Allow-Origin" /etc/nginx || echo "CORS headers removed"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

