CVE-2026-105949 (GCVE-0-2026-105949)

Vulnerability from cvelistv5 – Published: 2026-10-20 11:30 – Updated: 2026-10-23 10:31
VLAI
Title
Cruise-control: streams for apache kafka cruise control: authentication bypass via extra path segment allows unauthenticated access to all admin endpoints
Summary
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.
SSVC
Exploitation: none Automatable: no Technical Impact: total
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-10-22 21:20 UTC
CWE
  • CWE-287 - Improper Authentication
Assigner
redhat CNA under the redhat root
CNA scorecard B 82/100 over 1046 records in the last 180 days details
Impacted products
Vendor Product Version CPE status
Affected: 2.0.82 , < 3.1.0 (semver)
Red Hat streams for Apache Kafka 2     cpe:/a:redhat:amq_streams:2
Create a notification for this product.
Red Hat streams for Apache Kafka 3     cpe:/a:redhat:amq_streams:3
Create a notification for this product.
Date Public
2026-10-20 11:00
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-105949",
                "options": [
                  {
                    "Exploitation": "none"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-22T21:20:56.339490Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-10-22T21:21:08.947Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "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\u0027s 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\u0027s 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-23T10:31:59.027Z",
        "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"
        },
        {
          "url": "https://github.com/cruise-control-for-kafka/cruise-control/commit/0680880be8483e87a39832de807b68d5e9918325"
        }
      ],
      "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 \u2014 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\n\n--- CME Mitigation Guidance (2026-10-20) ---\nDisclaimer: 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.\n\nThe 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 \u2014 apply the upstream patch to fully remediate.\n\nHighest-impact CME: CME-921 URL Request Path Canonicalization Before Authorization (high)"
        }
      ],
      "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-23T10:31:59.027Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-105949",
      "date": "2026-10-23",
      "epss": "0.00296",
      "percentile": "0.21122"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "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"
              }
            ],
            "source": "secalert@redhat.com"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Cruise Control\u0027s 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\u0027s NetworkPolicy restricts Cruise Control port 9090 to operator pods only, reducing effective severity to Important."
          }
        ],
        "id": "CVE-2026-105949",
        "lastModified": "2026-10-23T12:18:06.253",
        "metrics": {
          "cvssMetricV31": [
            {
              "cvssData": {
                "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"
              },
              "exploitabilityScore": 2.8,
              "impactScore": 5.9,
              "source": "secalert@redhat.com",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-105949",
                "options": [
                  {
                    "exploitation": "none"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "total"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-10-22T21:20:56.339490Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-10-20T12:17:28.847",
        "references": [
          {
            "source": "secalert@redhat.com",
            "url": "https://access.redhat.com/security/cve/CVE-2026-105949"
          },
          {
            "source": "secalert@redhat.com",
            "url": "https://bugzilla.redhat.com/show_bug.cgi?id=2510878"
          },
          {
            "source": "secalert@redhat.com",
            "url": "https://github.com/cruise-control-for-kafka/cruise-control/commit/0680880be8483e87a39832de807b68d5e9918325"
          }
        ],
        "sourceIdentifier": "secalert@redhat.com",
        "vulnStatus": "Awaiting Analysis",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-287"
              }
            ],
            "source": "secalert@redhat.com",
            "type": "Secondary"
          }
        ]
      }
    },
    "redhat_vex": {
      "aggregate_severity": "Important",
      "current_release_date": "2026-10-23T10:31:51+00:00",
      "cve": "CVE-2026-105949",
      "id": "CVE-2026-105949",
      "initial_release_date": "2026-10-20T11:00:00+00:00",
      "product_status:known_affected": "2",
      "source": "Red Hat CSAF VEX",
      "status": "final",
      "title": "cruise-control: Streams for Apache Kafka Cruise Control: authentication bypass via extra path segment allows unauthenticated access to all admin endpoints",
      "url": "https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-105949.json",
      "version": "3"
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-105949",
                    "options": [
                      {
                        "Exploitation": "none"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "total"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-10-22T21:20:56.339490Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-10-22T21:21:03.521Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "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\u0027s 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\u0027s 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-23T10:31:59.027Z",
            "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"
            },
            {
              "url": "https://github.com/cruise-control-for-kafka/cruise-control/commit/0680880be8483e87a39832de807b68d5e9918325"
            }
          ],
          "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 \u2014 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\n\n--- CME Mitigation Guidance (2026-10-20) ---\nDisclaimer: 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.\n\nThe 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 \u2014 apply the upstream patch to fully remediate.\n\nHighest-impact CME: CME-921 URL Request Path Canonicalization Before Authorization (high)"
            }
          ],
          "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-23T10:31:59.027Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline

Sightings and recorded dates, grouped by day · UTC

JSON
Events included in the timeline

Loading timeline…


    Loading…

    Loading…

    Loading…

    Related by attack behaviour

    Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.