CVE-2024-23944
NoneCVSS
—
EPSS
0.2%
Published
Mar 15, 2024
CISA due date
—
Cloudanix analysis
A flaw in ZooKeeper lets someone who can watch one folder see the names of everything inside it even when they should not have permission, which could reveal private user or account details stored in those names.
- Exploitation
- Remote Authenticated
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Data Exposure
- Component
- Network Service
- Class
- Information Disclosure
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Missing ACL enforcement when persistent watchers trigger on child znodes allows an authenticated client to receive full znode paths for nodes beneath a watched parent without authorization checks.
Why it matters to the business
Organizations running ZooKeeper may leak sensitive identifiers embedded in znode paths such as usernames or login IDs to any client that can attach a watcher to a parent node, increasing risk of reconnaissance or targeted attacks.
How an attack unfolds
An attacker who already possesses read access to a parent znode issues an addWatch command; the server later fires watch events for child znodes without performing ACL checks and delivers the complete child paths to the watcher owner.
How to fix it
Upgrade Apache ZooKeeper to 3.9.2 or 3.8.4; the fixes are present in commit e454e8c7283100c7caec6dcae2bc82aaecb63023 and later releases. Verify the running version after upgrade and restart the ensemble.
How to confirm the fix worked
Confirm the server reports version 3.9.2 or 3.8.4; attempt to attach a persistent watcher as a low-privilege client and verify that child paths under restricted parents are no longer delivered.
Typical attack path
- Obtain ZooKeeper client credentials with read access to a target parent znode
- Issue addWatch API call against the parent
- Wait for or trigger creation/deletion of child znodes
- Receive watch notifications containing full child paths
How to detect it
Search ZooKeeper server logs for repeated addWatch requests from the same client session followed by watch event deliveries; correlate with client IP or authenticated user to identify watchers attached to parents the user should not traverse.
What your security team should do
- Schedule upgrade to 3.9.2 or 3.8.4 within the next maintenance window
- Audit existing ACLs on znodes that may contain sensitive path segments
- Enable ZooKeeper audit logging to capture addWatch operations
- Review client connection logs for unexpected persistent watchers
The record
Information disclosure in persistent watchers handling in Apache ZooKeeper due to missing ACL check. It allows an attacker to monitor child znodes by attaching a persistent watcher (addWatch command) to a parent which the attacker has already access to. ZooKeeper server doesn't do ACL check when the persistent watcher is triggered and as a consequence, the full path of znodes that a watch event gets triggered upon is exposed to the owner of the watcher. It's important to note that only the path is exposed by this vulnerability, not the data of znode, but since znode path can contain sensitive information like user name or login ID, this issue is potentially critical. Users are recommended to upgrade to version 3.9.2, 3.8.4 which fixes the issue.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Maven | org.apache.zookeeper:zookeeper | 3.6.0 | No fix |
| Maven | org.apache.zookeeper:zookeeper | 3.8.0 | 3.8.4 |
| Maven | org.apache.zookeeper:zookeeper | 3.9.0 | 3.9.2 |
| Bitnami | zookeeper | 3.6.0 | 3.8.4 |
| Bitnami | zookeeper | 3.9.0 | 3.9.2 |
| Chainguard | confluent-common-docker | 0 | 7.6.9-r0 |
| Chainguard | confluent-common-docker-base | 0 | 7.6.0-r20 |
| Chainguard | confluent-common-docker-ub | 0 | 7.6.0-r20 |
| Chainguard | confluent-kafka | 0 | 8.2.0.367-r0 |
| Chainguard | hive | 0 | 4.0.1-r1 |
| Chainguard | hive-compat | 0 | 4.0.1-r1 |
| Chainguard | kafka | 0 | 3.7.0-r2 |
| Chainguard | kafka-bitnami-compat | 0 | 3.7.0-r2 |
| Chainguard | kafka-jre-bcfips | 0 | 3.7.1-r0 |
| Chainguard | solr | 0 | 9.5.0-r2 |
| Chainguard | solr-oci-compat | 0 | 9.5.0-r2 |
| Chainguard | spark-3.5 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-bitnami-compat | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-compat | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-minimal | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-minimal-openjdk-11 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-minimal-openjdk-17 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-minimal-openjdk-8 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-openjdk-11 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-openjdk-17 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-openjdk-8 | 0 | 3.5.1-r3 |
| Chainguard | spark-3.5-scala-2.12 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13 | 0 | 3.5.7-r2 |
| Chainguard | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Chainguard | tez | 0 | 0.10.4-r6 |
| Chainguard | trino | 0 | 443-r0 |
| Chainguard | trino-config | 0 | 443-r0 |
| Chainguard | trino-oci-entrypoint | 0 | 443-r0 |
| Chainguard | trino-plugin-accumulo | 0 | 443-r0 |
| Chainguard | trino-plugin-ai-functions | 0 | 443-r0 |
| Chainguard | trino-plugin-atop | 0 | 443-r0 |
| Chainguard | trino-plugin-bigquery | 0 | 443-r0 |
| Chainguard | trino-plugin-blackhole | 0 | 443-r0 |
| Chainguard | trino-plugin-cassandra | 0 | 443-r0 |
| Chainguard | trino-plugin-clickhouse | 0 | 443-r0 |
| Chainguard | trino-plugin-delta-lake | 0 | 443-r0 |
| Chainguard | trino-plugin-druid | 0 | 443-r0 |
| Chainguard | trino-plugin-duckdb | 0 | 443-r0 |
| Chainguard | trino-plugin-elasticsearch | 0 | 443-r0 |
| Chainguard | trino-plugin-example-http | 0 | 443-r0 |
| Chainguard | trino-plugin-exasol | 0 | 443-r0 |
| Chainguard | trino-plugin-exchange-filesystem | 0 | 443-r0 |
| Chainguard | trino-plugin-exchange-hdfs | 0 | 443-r0 |
| Chainguard | trino-plugin-faker | 0 | 443-r0 |
| Chainguard | trino-plugin-functions-python | 0 | 443-r0 |
| Chainguard | trino-plugin-geospatial | 0 | 443-r0 |
| Chainguard | trino-plugin-google-sheets | 0 | 443-r0 |
| Chainguard | trino-plugin-hive | 0 | 443-r0 |
| Chainguard | trino-plugin-http-event-listener | 0 | 443-r0 |
| Chainguard | trino-plugin-http-server-event-listener | 0 | 443-r0 |
| Chainguard | trino-plugin-hudi | 0 | 443-r0 |
| Chainguard | trino-plugin-iceberg | 0 | 443-r0 |
| Chainguard | trino-plugin-ignite | 0 | 443-r0 |
| Chainguard | trino-plugin-jmx | 0 | 443-r0 |
| Chainguard | trino-plugin-kafka | 0 | 443-r0 |
| Chainguard | trino-plugin-kafka-event-listener | 0 | 443-r0 |
| Chainguard | trino-plugin-kinesis | 0 | 443-r0 |
| Chainguard | trino-plugin-kudu | 0 | 443-r0 |
| Chainguard | trino-plugin-lakehouse | 0 | 443-r0 |
| Chainguard | trino-plugin-ldap-group-provider | 0 | 443-r0 |
| Chainguard | trino-plugin-local-file | 0 | 443-r0 |
| Chainguard | trino-plugin-loki | 0 | 443-r0 |
| Chainguard | trino-plugin-mariadb | 0 | 443-r0 |
| Chainguard | trino-plugin-memory | 0 | 443-r0 |
| Chainguard | trino-plugin-ml | 0 | 443-r0 |
| Chainguard | trino-plugin-mongodb | 0 | 443-r0 |
| Chainguard | trino-plugin-mysql | 0 | 443-r0 |
| Chainguard | trino-plugin-mysql-event-listener | 0 | 443-r0 |
| Chainguard | trino-plugin-opa | 0 | 443-r0 |
| Chainguard | trino-plugin-openlineage | 0 | 443-r0 |
| Chainguard | trino-plugin-opensearch | 0 | 443-r0 |
| Chainguard | trino-plugin-oracle | 0 | 443-r0 |
| Chainguard | trino-plugin-password-authenticators | 0 | 443-r0 |
| Chainguard | trino-plugin-phoenix5 | 0 | 443-r0 |
| Chainguard | trino-plugin-pinot | 0 | 443-r0 |
| Chainguard | trino-plugin-postgresql | 0 | 443-r0 |
| Chainguard | trino-plugin-prometheus | 0 | 443-r0 |
| Chainguard | trino-plugin-ranger | 0 | 443-r0 |
| Chainguard | trino-plugin-raptor-legacy | 0 | 443-r0 |
| Chainguard | trino-plugin-redis | 0 | 443-r0 |
| Chainguard | trino-plugin-redshift | 0 | 443-r0 |
| Chainguard | trino-plugin-resource-group-managers | 0 | 443-r0 |
| Chainguard | trino-plugin-session-property-managers | 0 | 443-r0 |
| Chainguard | trino-plugin-singlestore | 0 | 443-r0 |
| Chainguard | trino-plugin-snowflake | 0 | 443-r0 |
| Chainguard | trino-plugin-spooling-filesystem | 0 | 443-r0 |
| Chainguard | trino-plugin-sqlserver | 0 | 443-r0 |
| Chainguard | trino-plugin-teradata-functions | 0 | 443-r0 |
| Chainguard | trino-plugin-thrift | 0 | 443-r0 |
| Chainguard | trino-plugin-tpcds | 0 | 443-r0 |
| Chainguard | trino-plugin-tpch | 0 | 443-r0 |
| Chainguard | trino-plugin-vertica | 0 | 443-r0 |
| Debian:11 | zookeeper | 0 | No fix |
| Debian:12 | zookeeper | 0 | No fix |
| Debian:13 | zookeeper | 0 | 3.9.2-1 |
| Ubuntu:20.04:LTS | zookeeper | 0 | No fix |
| Ubuntu:22.04:LTS | zookeeper | 0 | No fix |
| Ubuntu:24.04:LTS | zookeeper | 0 | No fix |
| Ubuntu:24.10 | zookeeper | 0 | No fix |
| Ubuntu:Pro:14.04:LTS | zookeeper | 0 | No fix |
| Ubuntu:Pro:16.04:LTS | zookeeper | 0 | No fix |
| Ubuntu:Pro:18.04:LTS | zookeeper | 0 | No fix |
| Wolfi | confluent-common-docker | 0 | 7.6.9-r0 |
| Wolfi | confluent-common-docker-base | 0 | 7.6.0-r20 |
| Wolfi | confluent-common-docker-ub | 0 | 7.6.0-r20 |
| Wolfi | confluent-kafka | 0 | 8.2.0.367-r0 |
| Wolfi | kafka | 0 | 3.7.0-r2 |
| Wolfi | kafka-bitnami-compat | 0 | 3.7.0-r2 |
| Wolfi | solr | 0 | 9.5.0-r2 |
| Wolfi | solr-oci-compat | 0 | 9.5.0-r2 |
| Wolfi | spark-3.5 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-bitnami-compat | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-compat | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-minimal | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-minimal-openjdk-11 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-minimal-openjdk-17 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-minimal-openjdk-8 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-openjdk-11 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-openjdk-17 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-openjdk-8 | 0 | 3.5.1-r3 |
| Wolfi | spark-3.5-scala-2.12 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.12-iamguarded-compat | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13 | 0 | 3.5.7-r2 |
| Wolfi | spark-3.5-scala-2.13-compat | 0 | 3.5.7-r2 |
| Wolfi | tez | 0 | 0.10.4-r6 |
| Wolfi | trino | 0 | 443-r0 |
| Wolfi | trino-config | 0 | 443-r0 |
| Wolfi | trino-oci-entrypoint | 0 | 443-r0 |
| Wolfi | trino-plugin-accumulo | 0 | 443-r0 |
| Wolfi | trino-plugin-ai-functions | 0 | 443-r0 |
| Wolfi | trino-plugin-atop | 0 | 443-r0 |
| Wolfi | trino-plugin-bigquery | 0 | 443-r0 |
| Wolfi | trino-plugin-blackhole | 0 | 443-r0 |
| Wolfi | trino-plugin-cassandra | 0 | 443-r0 |
| Wolfi | trino-plugin-clickhouse | 0 | 443-r0 |
| Wolfi | trino-plugin-delta-lake | 0 | 443-r0 |
| Wolfi | trino-plugin-druid | 0 | 443-r0 |
| Wolfi | trino-plugin-duckdb | 0 | 443-r0 |
| Wolfi | trino-plugin-elasticsearch | 0 | 443-r0 |
| Wolfi | trino-plugin-example-http | 0 | 443-r0 |
| Wolfi | trino-plugin-exasol | 0 | 443-r0 |
| Wolfi | trino-plugin-exchange-filesystem | 0 | 443-r0 |
| Wolfi | trino-plugin-exchange-hdfs | 0 | 443-r0 |
| Wolfi | trino-plugin-faker | 0 | 443-r0 |
| Wolfi | trino-plugin-functions-python | 0 | 443-r0 |
| Wolfi | trino-plugin-geospatial | 0 | 443-r0 |
| Wolfi | trino-plugin-google-sheets | 0 | 443-r0 |
| Wolfi | trino-plugin-hive | 0 | 443-r0 |
| Wolfi | trino-plugin-http-event-listener | 0 | 443-r0 |
| Wolfi | trino-plugin-http-server-event-listener | 0 | 443-r0 |
| Wolfi | trino-plugin-hudi | 0 | 443-r0 |
| Wolfi | trino-plugin-iceberg | 0 | 443-r0 |
| Wolfi | trino-plugin-ignite | 0 | 443-r0 |
| Wolfi | trino-plugin-jmx | 0 | 443-r0 |
| Wolfi | trino-plugin-kafka | 0 | 443-r0 |
| Wolfi | trino-plugin-kafka-event-listener | 0 | 443-r0 |
| Wolfi | trino-plugin-kinesis | 0 | 443-r0 |
| Wolfi | trino-plugin-kudu | 0 | 443-r0 |
| Wolfi | trino-plugin-lakehouse | 0 | 443-r0 |
| Wolfi | trino-plugin-ldap-group-provider | 0 | 443-r0 |
| Wolfi | trino-plugin-local-file | 0 | 443-r0 |
| Wolfi | trino-plugin-loki | 0 | 443-r0 |
| Wolfi | trino-plugin-mariadb | 0 | 443-r0 |
| Wolfi | trino-plugin-memory | 0 | 443-r0 |
| Wolfi | trino-plugin-ml | 0 | 443-r0 |
| Wolfi | trino-plugin-mongodb | 0 | 443-r0 |
| Wolfi | trino-plugin-mysql | 0 | 443-r0 |
| Wolfi | trino-plugin-mysql-event-listener | 0 | 443-r0 |
| Wolfi | trino-plugin-opa | 0 | 443-r0 |
| Wolfi | trino-plugin-openlineage | 0 | 443-r0 |
| Wolfi | trino-plugin-opensearch | 0 | 443-r0 |
| Wolfi | trino-plugin-oracle | 0 | 443-r0 |
| Wolfi | trino-plugin-password-authenticators | 0 | 443-r0 |
| Wolfi | trino-plugin-phoenix5 | 0 | 443-r0 |
| Wolfi | trino-plugin-pinot | 0 | 443-r0 |
| Wolfi | trino-plugin-postgresql | 0 | 443-r0 |
| Wolfi | trino-plugin-prometheus | 0 | 443-r0 |
| Wolfi | trino-plugin-ranger | 0 | 443-r0 |
| Wolfi | trino-plugin-raptor-legacy | 0 | 443-r0 |
| Wolfi | trino-plugin-redis | 0 | 443-r0 |
| Wolfi | trino-plugin-redshift | 0 | 443-r0 |
| Wolfi | trino-plugin-resource-group-managers | 0 | 443-r0 |
| Wolfi | trino-plugin-session-property-managers | 0 | 443-r0 |
| Wolfi | trino-plugin-singlestore | 0 | 443-r0 |
| Wolfi | trino-plugin-snowflake | 0 | 443-r0 |
| Wolfi | trino-plugin-spooling-filesystem | 0 | 443-r0 |
| Wolfi | trino-plugin-sqlserver | 0 | 443-r0 |
| Wolfi | trino-plugin-teradata-functions | 0 | 443-r0 |
| Wolfi | trino-plugin-thrift | 0 | 443-r0 |
| Wolfi | trino-plugin-tpcds | 0 | 443-r0 |
Related vulnerabilities
- CVE-2024-51504 When using IPAuthenticationProvider in ZooKeeper Admin Server there is a possibility of… Also affects org.apache.zookeeper:zookeeper
- CVE-2019-0201 An issue is present in Apache ZooKeeper 1.0.0 to 3.4.13 and 3.5.0-alpha to 3.5.4-beta. Also affects org.apache.zookeeper:zookeeper
- CVE-2017-5637 Two four letter word commands "wchp/wchc" are CPU intensive and could cause spike of CPU… Also affects org.apache.zookeeper:zookeeper
- CVE-2024-29371 In jose4j before 0.9.5, an attacker can cause a Denial-of-Service (DoS) condition by… Also affects confluent-common-docker
- CVE-2025-47906 If the PATH environment variable contains paths which are executables (rather than just… Also affects confluent-common-docker
- CVE-2025-52999 jackson-core contains core low-level incremental ("streaming") parser and generator… Also affects confluent-common-docker
- CVE-2024-47554 Uncontrolled Resource Consumption vulnerability in Apache Commons IO. Also affects confluent-common-docker
- CVE-2026-1605 In Eclipse Jetty, versions 12.0.0-12.0.31 and 12.1.0-12.0.5, class GzipHandler exposes a… Also affects confluent-kafka