{"api_version":"1","generated_at":"2026-10-21T19:44:21+00:00","cve":"CVE-2026-105949","urls":{"html":"https://cve.report/CVE-2026-105949","api":"https://cve.report/api/cve/CVE-2026-105949.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-105949","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-105949"},"summary":{"title":"Cruise-control: streams for apache kafka cruise control: authentication bypass via extra path segment allows unauthenticated access to all admin endpoints","description":"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.","state":"PUBLISHED","assigner":"redhat","published_at":"2026-10-20 12:17:28","updated_at":"2026-10-20 15:03:59"},"problem_types":["CWE-287","CWE-287 Improper Authentication"],"metrics":[{"version":"3.1","source":"secalert@redhat.com","type":"Primary","score":"8.8","severity":"HIGH","vector":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH","attackVector":"ADJACENT_NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"}},{"version":"3.1","source":"CNA","type":"CVSS","score":"8.8","severity":"HIGH","vector":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","data":{"attackComplexity":"LOW","attackVector":"ADJACENT_NETWORK","availabilityImpact":"HIGH","baseScore":8.8,"baseSeverity":"HIGH","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"NONE","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","version":"3.1"}}],"references":[{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2510878","name":"https://bugzilla.redhat.com/show_bug.cgi?id=2510878","refsource":"secalert@redhat.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://access.redhat.com/security/cve/CVE-2026-105949","name":"https://access.redhat.com/security/cve/CVE-2026-105949","refsource":"secalert@redhat.com","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-105949","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-105949","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"Red Hat","product":"streams for Apache Kafka 2","version":"","platforms":[]},{"source":"CNA","vendor":"Red Hat","product":"streams for Apache Kafka 3","version":"","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-08-04T03:32:18.261Z","lang":"en","value":"Reported to Red Hat."},{"source":"CNA","time":"2026-10-20T11:00:00.000Z","lang":"en","value":"Made public."}],"solutions":[],"workarounds":[{"source":"CNA","title":"","value":"1. Verify Strimzi NetworkPolicy exists restricting CC :9090 to operator pods\n2. Do not expose CC :9090 via Ingress or Route — must not be externally accessible\n3. Confirm TLS is enabled on the CC HTTP endpoint (Strimzi default)\n4. For standalone CC: deploy path-normalizing reverse proxy and restrict :9090 via firewall","time":"","lang":"en"}],"exploits":[],"credits":[],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"cna":{"affected":[{"collectionURL":"https://github.com/cruise-control-for-kafka/cruise-control","defaultStatus":"unaffected","packageName":"Cruise Control for Apache Kafka","versions":[{"lessThan":"3.1.0","status":"affected","version":"2.0.82","versionType":"semver"}]},{"collectionURL":"https://access.redhat.com/downloads/content/package-browser/","cpes":["cpe:/a:redhat:amq_streams:2"],"defaultStatus":"affected","packageName":"cruise-control","product":"streams for Apache Kafka 2","vendor":"Red Hat"},{"collectionURL":"https://access.redhat.com/downloads/content/package-browser/","cpes":["cpe:/a:redhat:amq_streams:3"],"defaultStatus":"affected","packageName":"cruise-control","product":"streams for Apache Kafka 3","vendor":"Red Hat"}],"datePublic":"2026-10-20T11:00:00.000Z","descriptions":[{"lang":"en","value":"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."}],"metrics":[{"other":{"content":{"namespace":"https://access.redhat.com/security/updates/classification/","value":"Important"},"type":"Red Hat severity rating"}},{"cvssV3_1":{"attackComplexity":"LOW","attackVector":"ADJACENT_NETWORK","availabilityImpact":"HIGH","baseScore":8.8,"baseSeverity":"HIGH","confidentialityImpact":"HIGH","integrityImpact":"HIGH","privilegesRequired":"NONE","scope":"UNCHANGED","userInteraction":"NONE","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","version":"3.1"},"format":"CVSS"}],"problemTypes":[{"descriptions":[{"cweId":"CWE-287","description":"Improper Authentication","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-10-20T11:30:29.296Z","orgId":"53f830b8-0a3f-465b-8143-3b8a9948e749","shortName":"redhat"},"references":[{"tags":["vdb-entry","x_refsource_REDHAT"],"url":"https://access.redhat.com/security/cve/CVE-2026-105949"},{"name":"RHBZ#2510878","tags":["issue-tracking","x_refsource_REDHAT"],"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2510878"}],"timeline":[{"lang":"en","time":"2026-08-04T03:32:18.261Z","value":"Reported to Red Hat."},{"lang":"en","time":"2026-10-20T11:00:00.000Z","value":"Made public."}],"title":"Cruise-control: streams for apache kafka cruise control: authentication bypass via extra path segment allows unauthenticated access to all admin endpoints","workarounds":[{"lang":"en","value":"1. Verify Strimzi NetworkPolicy exists restricting CC :9090 to operator pods\n2. Do not expose CC :9090 via Ingress or Route — must not be externally accessible\n3. Confirm TLS is enabled on the CC HTTP endpoint (Strimzi default)\n4. For standalone CC: deploy path-normalizing reverse proxy and restrict :9090 via firewall"}],"x_generator":{"engine":"cvelib 1.8.0"},"x_redhatCweChain":"CWE-287: Improper Authentication"}},"cveMetadata":{"assignerOrgId":"53f830b8-0a3f-465b-8143-3b8a9948e749","assignerShortName":"redhat","cveId":"CVE-2026-105949","datePublished":"2026-10-20T11:30:29.296Z","dateReserved":"2026-10-06T07:57:58.570Z","dateUpdated":"2026-10-20T11:30:29.296Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-10-20 12:17:28","lastModifiedDate":"2026-10-20 15:03:59","problem_types":["CWE-287","CWE-287 Improper Authentication"],"metrics":{"cvssMetricV31":[{"source":"secalert@redhat.com","type":"Primary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","baseScore":8.8,"baseSeverity":"HIGH","attackVector":"ADJACENT_NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"NONE","scope":"UNCHANGED","confidentialityImpact":"HIGH","integrityImpact":"HIGH","availabilityImpact":"HIGH"},"exploitabilityScore":2.8,"impactScore":5.9}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"105949","Ordinal":"1","Title":"Cruise-control: streams for apache kafka cruise control: authent","CVE":"CVE-2026-105949","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"105949","Ordinal":"1","NoteData":"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.","Type":"Description","Title":"Cruise-control: streams for apache kafka cruise control: authent"}]}}}