Servers, proxies and network services

Apache Pulsar: CVE-2026-105869, CVE-2026-105942 and Pulsar Manager CVE-2026-105944

Apache Pulsar check

The Apache Pulsar PMC published 14 advisories on 21 October 2026, all fixed in 4.0.14, 4.2.5 and 5.0.0, and a separate advisory for Pulsar Manager, which has reached end of life. This tool covers three of them, the ones whose exposure depends on configuration or on what is installed.

Item CVE-2026-105869 CVE-2026-105942 CVE-2026-105944
Component Broker Broker Pulsar Manager
Severity Critical, CVSS 4.0 9.2 High, 7.7 Critical, CVSS 4.0 10.0
Affected 2.8.1 before 4.0.14, and 4.1.0 before 4.2.5 2.8.1 before 4.0.14, and 4.1.0 before 4.2.5 0.1.0 through 0.4.0, every release
Fixed 4.0.14, 4.2.5, 5.0.0 4.0.14, 4.2.5, 5.0.0 Retired by the Pulsar PMC: remove it
What With MultiRolesTokenAuthorizationProvider and a non-empty anonymousUserRole, HTTP and WebSocket requests whose credentials fail authentication fall back to the anonymous role, and the provider authorizes them with the roles in the unverified bearer token. A forged or unsigned token can claim a superuser role. The binary protocol is not affected For requests a proxy sends on behalf of a user, the broker authorized the original principal with the proxy's own authentication data. With MultiRolesTokenAuthorizationProvider the user gains the roles in the proxy's token; whatever the provider, the tenant admin check of a proxied admin REST request passed without checking the original principal when the proxy role was a tenant admin In 0.3.0 and later anyone who can reach it over the network can take full control (the call that creates the first administrator needs no authentication and stays available after setup). In all versions, when it holds an HTTP authentication credential for a cluster, any user who can reach it can perform the admin operations that credential permits, and can make it send the credential to a host of their choosing
Needs MultiRolesTokenAuthorizationProvider, non-empty anonymousUserRole, authorization enabled proxyRoles set, authorization enabled Pulsar Manager installed and reachable

None of the two broker flaws is reachable on a default broker. Pulsar's shipped broker.conf has authenticationEnabled=false, authorizationEnabled=false, an empty anonymousUserRole and an empty proxyRoles.

The other twelve advisories in the 21 October announcement (cross-tenant access, missing authorization checks and similar) are fixed by the same upgrade. They are not counted separately here.

Quick start

  1. Download the script. The repository is mirrored on GitHub and Codeberg; pick a base URL.

    # BASE from GitHub:   https://raw.githubusercontent.com/PrivacySafe/security-patches/refs/heads/main
    # BASE from Codeberg: https://codeberg.org/PrivacySafe/security-patches/raw/branch/main
    # curl -fLO "$BASE/pulsar/pulsar-check.sh"
    curl -fLO https://raw.githubusercontent.com/PrivacySafe/security-patches/refs/heads/main/pulsar/pulsar-check.sh
    
  2. Read it before running it, then make it executable.

    less pulsar-check.sh
    chmod +x pulsar-check.sh
    
  3. Check this host. By default it searches /opt /srv /usr/local /var/lib /etc /home /root; pass directories to narrow it.

    ./pulsar-check.sh check
    ./pulsar-check.sh check /opt/pulsar
    

Commands

Command What it does
check [DIR ...] (default) Finds brokers by their jars (pulsar-broker-X.Y.Z.jar and org.apache.pulsar-pulsar-broker-X.Y.Z.jar), reads conf/broker.conf and conf/standalone.conf beside each, scans broker.conf, standalone.conf, compose files, Helm values*.yaml and *.env files for the exposing settings, and looks for Pulsar Manager (jars, running processes, listeners on 7750 and 9527, container images)
version Prints the script version

Exit codes: 0 nothing exposed, 1 an affected broker with an exposing configuration (or whose configuration could not be read), an exposing configuration of unknown version, or Pulsar Manager present, 2 bad arguments.

How to read the result

  • Broker in an affected range and the exposing settings present: exposed. Upgrade to 4.0.14, 4.2.5 or 5.0.0 or newer. Until then (PrivacySafe recommendation): empty anonymousUserRole, do not expose the HTTP and WebSocket ports to untrusted clients, and keep the broker behind the proxy with strict network rules.
  • Affected range, no exposing settings: exit 0 with a reminder that the upgrade is still needed.
  • Affected broker with no conf/ beside it: reported as exposed, exit 1, so you review it with the settings in hand (they may come from environment variables or a mounted file).
  • A fixed broker (4.0.14 and later, 4.2.5 and later, 5.0.0 and later) is fine even if its configuration contains the settings: the check is on the version, and the file is not flagged separately.
  • Versions older than 2.8.1: the two configuration-dependent flaws start at 2.8.1, but those releases are unsupported and affected by other advisories in the set: upgrade.
  • Containers: a compose file or Helm values file with the exposing settings is reported without a version, because the image is not opened. Check the tag: below 4.0.14, any 4.1.x, or 4.2.x below 4.2.5 is exposed.
  • Pulsar Manager, any version, any state: stop and remove it. If it was reachable from a network you do not fully trust, treat the Pulsar credential or token signing key it held as compromised and replace it, and check its user list for administrators you did not create. The Pulsar documentation lists alternatives: https://pulsar.apache.org/docs/administration-ui

Sources

Before you run it

  • The fix. Brokers: update to 4.0.14, 4.2.5 or 5.0.0. The Pulsar PMC retired Pulsar Manager: stop using it and remove it.
  • The broker flaws depend on configuration. Neither CVE-2026-105869 nor CVE-2026-105942 is reachable on a default broker: authentication, authorization, anonymousUserRole and proxyRoles are off or empty by default. The script reads broker.conf, standalone.conf, configuration, compose, Helm and env files for the exposing settings.
  • It does not open container images. For containers it reads the files beside them and tells you to check the tag. It also looks for Pulsar Manager (jars, running processes, listeners on 7750 and 9527).
  • There is no hunt. No indicators of exploitation have been published.
  • It also checks running docker and podman containers, unless you name a directory or set SCAN_CONTAINERS=0. In each running container, a read-only probe copies the broker jar names as empty files, because only the name carries the version. From each broker.conf, standalone.conf, compose, Helm and .env file it copies only the lines that mention authorizationProvider, anonymousUserRole, authorizationEnabled or proxyRoles, so token secrets and client credentials never leave the container. A broker.conf that has none of those settings is still staged, so it is reported as clean rather than as unreadable. The script runs once per container in isolation. /pulsar, where the official image installs, is searched in containers.

The Security Patches software and this documentation are dedicated to the public domain under CC0 1.0 Universal. Other pages on privacysafe.app/docs are CC BY-SA 4.0 unless the page says otherwise.

Edit this page on Codeberg

The PrivacySafe Ecosystem

Shop at Ivy Cyber

Ivy Cyber offers PrivacySafe products and services in the USA and has partnerships with 3NSoft in Canada and Kuip Limited in the European Union. Enterprise services and consulting are available at ivycyber.com

PrivacySafe Foundation is a 501(c)(3) nonprofit public charity that supports the development of the PrivacySafe applications, along with the components they rely upon: 3NWeb protocols, filesystem, documentation, and reference implementations.

PrivacySafe Foundation

Donations to PrivacySafe Foundation support education, research, documentation, and public code. Purchases from Ivy Cyber support PrivacySafe products, services, hosting, and technical support. Together, we're building a better web.