# CVE-2026-105949: Cruise-control: streams for apache kafka cruise control: authentication bypass via extra path segment allows unauthenticated access to all admin endpoints

Status: published. Published: 2026-10-20. Updated: 2026-11-03.

Cruise Control's Jetty ConstraintSecurityHandler registers security constraints on exact path specs without a catch-all wildcard constraint and without calling setDenyUncoveredHttpMethods(true). The servlet routes requests using Path.of(pathInfo).getFileName(), which strips all leading segments and trailing slashes. Requests like POST /kafkacruisecontrol/x/rebalance bypass authentication entirely but still dispatch to admin endpoints. All 15 admin endpoints become reachable without authentication. In AMQ Streams, the Strimzi operator's NetworkPolicy restricts Cruise Control port 9090 to operator pods only, reducing effective severity to Important.

## Remediation

- workaround: 1. Verify Strimzi NetworkPolicy exists restricting CC :9090 to operator pods
2. Do not expose CC :9090 via Ingress or Route — must not be externally accessible
3. Confirm TLS is enabled on the CC HTTP endpoint (Strimzi default)
4. For standalone CC: deploy path-normalizing reverse proxy and restrict :9090 via firewall

--- CME Mitigation Guidance (2026-10-20) ---
Disclaimer: The following mitigation solutions are provided as a courtesy, pending the application of an official patch. This content was generated utilizing AI tools in conjunction with data from https://cmetaxonomy.org. Customers are advised to independently evaluate and test these temporary mitigations within their own infrastructure.

The highest-value action is to eliminate the path discrepancy between Jetty security constraints and ParameterUtils routing by canonicalizing URI paths prior to authorization evaluation: upgrade to the fixed Cruise Control/Kafka Relations Sink/Playbook Dispatcher/Cloudservices/Kafka Relations Sink/Redhat User Workloads/Playbook Dispatcher Connect builds, which canonicalizes request URI paths prior to authorization and registers wildcard security constraints or denies uncovered HTTP methods in Jetty, closing prepending an arbitrary path segment to administrative endpoint URIs. Until patched, this is a concern on Cruise Control deployments exposing HTTP port 9090 without network policy restrictions or reverse proxy path filtering, so Enforce Strimzi NetworkPolicy restricting port 9090 access strictly to operator pods, prohibit external exposure through Ingress or Routes, and deploy a path-normalizing reverse proxy or firewall rules for standalone setups. As a compensating measure, Require authenticated identity verification at the network boundary using a zero trust gateway or identity-aware proxy before traffic reaches port 9090, Restrict network access to Cruise Control port 9090 using host-based firewalls like firewalld or nftables, Bind the Cruise Control service to localhost to ensure all incoming traffic passes through a local tunnel or controlling reverse proxy, Enforce URL path authorization rules at an upstream reverse proxy to block unmapped or manipulated URI paths, and Forward Cruise Control administrative endpoint invocations to a SIEM to detect unauthorized execution of admin actions. These controls limit blast radius and contain exploitation, but they do not fix the underlying path discrepancy authentication bypass defect — apply the upstream patch to fully remediate.

Highest-impact CME: CME-921 URL Request Path Canonicalization Before Authorization (high) (source: CNA: redhat)

## Affected products and versions

-  /  (Cruise Control for Apache Kafka): ≥ 2.0.82; < 3.1.0 (affected, semver). Source: CNA: redhat
- Red Hat / streams for Apache Kafka 2 (cruise-control): Version range not reported. Source: CNA: redhat
- Red Hat / streams for Apache Kafka 3 (cruise-control): Version range not reported. Source: CNA: redhat

## Severity and prioritization

- CVSS 3.1: 8.8 (high); CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H; source: CNA: redhat

- CVSS 3.1: 8.8 (high); CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H; source: NVD: secalert@redhat.com

- CISA KEV: No listing in collected sources

- EPSS: 0.33% as of 2026-11-03; percentile 25.96%

- SSVC: exploitation none; automatable no; technical impact total; source ADP: CISA-ADP

- Weaknesses: CWE-287

## Exploit evidence

No exploit evidence in collected sources. This is not proof of no exploitation.

## References

- https://access.redhat.com/security/cve/CVE-2026-105949 (CNA: redhat; vdb-entry, x_refsource_REDHAT)

- https://bugzilla.redhat.com/show_bug.cgi?id=2510878 (CNA: redhat; issue-tracking, x_refsource_REDHAT)

- https://github.com/cruise-control-for-kafka/cruise-control/commit/0680880be8483e87a39832de807b68d5e9918325 (CNA: redhat)

- https://access.redhat.com/security/cve/CVE-2026-105949 (secalert@redhat.com)

- https://bugzilla.redhat.com/show_bug.cgi?id=2510878 (secalert@redhat.com)

- https://github.com/cruise-control-for-kafka/cruise-control/commit/0680880be8483e87a39832de807b68d5e9918325 (secalert@redhat.com)

## Provenance

- CNA: redhat: https://www.cve.org/CVERecord?id=CVE-2026-105949; retrieved 2026-11-03; source updated 2026-11-03

- NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-105949; retrieved 2026-11-03; source updated 2026-11-03

- FIRST EPSS: https://api.first.org/data/v1/epss?cve=CVE-2026-105949; retrieved 2026-11-03; source updated Not reported

Revision: c1359771a306d49f83366c6a7cc1000955dda60b441c7c836bcbc1a5a18280e3

Canonical: https://y2.dev/cve/CVE-2026-105949

## Agent and API access

Public CVE pages, Markdown, and JSON are free to read without an account or API key.

- Public catalog: https://y2.dev/cve/index.json. Follow nextCursor with the same search, filters, sort, and limit (1–100). A null cursor marks the end.

- WebMCP: search_cve_disclosures, get_cve_disclosure, get_cve_page_markdown, get_y2_cve_access. Available in compatible browsers.

- Cyber API: https://api.y2.dev/api/v2/cyber/cves and https://api.y2.dev/api/v2/cyber/cves/{cveId}.

- Y2 Pro or Elite: create a workspace API key with the intel:cyber scope and send Authorization: Bearer <Y2_API_KEY>. Setup: https://y2.dev/docs/api/create-key.

- x402: Pay per request without an account or API key. Omit Authorization, read the HTTP 402 PAYMENT-REQUIRED challenge, validate its current requirements, and retry with PAYMENT-SIGNATURE through an authorized payment client. These browser tools never make payments. Guide: https://y2.dev/docs/api/x402.

- OpenAPI: https://y2.dev/api/openapi.yaml. Agent access metadata: https://y2.dev/cve/agent.json.

Collected public records only. Check source status for coverage and freshness.