GHSA-wrgg-c9rw-j78f
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect to ZooKeeper client port (2181)
-
DeliveryRegister exists-watches on guessed non-existent paths
-
ExploitWait for app to create ACL-restricted znodes
-
ExecutionTrigger session reconnect (SetWatches replay)
-
PersistWatch fires with null ACL, no ACL check
-
ImpactLearn restricted path exists, harvest embedded sensitive path names
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires a running Apache ZooKeeper 3.8.0-3.8.6 or 3.9.0-3.9.5 server whose client port is network-reachable by the attacker, and the ability to establish a client session and issue SetWatches/SetWatches2 on reconnect (default protocol behavior, no authentication needed per PR:N). The attacker must register exists-watches on paths BEFORE they are created and then reconnect AFTER a privileged process creates them under a restricted ACL - so success depends on correctly anticipating (guessing) target path names and on those paths carrying sensitive information (usernames, login IDs) to be of value. Limiting factors: only path existence is revealed, never znode data; exploitation is probabilistic (depends on path-name prediction and reconnect timing); and impact is meaningful only when deployments encode secrets in znode path names rather than in data. |
| Impact | The signals converge on a genuine but modest-severity information-disclosure issue, not a top-tier emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N = 7.5) indicates network-reachable, unauthenticated, low-complexity access with high confidentiality impact and no integrity/availability effect. However, the vendor's C:H rating appears aggressive relative to the described impact: the flaw leaks only the EXISTENCE of a znode PATH (never its data), and exploitation requires the attacker to pre-register exists-watches on speculative paths and time a reconnect after those paths are created - a probabilistic, guessing-and-timing element the AC:L does not fully capture. A C:L rating (my assessed ~5.3) better reflects that only path metadata is disclosed. EPSS is low (0.20%, 10th percentile), there is no CISA KEV listing and no public exploit - consistent with a subtle logic bug that is hard to weaponize opportunistically. Exploitation status: no public exploit identified at time of analysis. Note the metadata conflict: the 'Authentication Bypass' tag mischaracterizes this as an authn flaw when the description and CWE-862 make clear it is an authorization/ACL-enforcement bypass. Overall this is a real but lower-priority fix - significant mainly where znode paths embed sensitive tokens (usernames, login IDs). |
| Exploit ScenarioDerived | An attacker connects to the ZooKeeper client port and registers exists-watches on guessed, currently non-existent paths that a privileged process is expected to create later under a restricted ACL. After the legitimate application creates those ACL-protected znodes, the attacker triggers a session reconnect; the SetWatches/SetWatches2 replay handler in DataTree.setWatches() fires the watch with a null ACL, confirming the path now exists and leaking any sensitive information encoded in the path name. No public exploit code exists, but the network-reachable, unauthenticated vector (AV:N/PR:N) makes it straightforward for anyone with client-port access. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv3 – Sep 17, 2026
Unauthenticated remote clients can discover the names of ACL-restricted znodes in Apache ZooKeeper 3.8.0 through 3.8.6 and 3.9.0 through 3.9.5 by abusing the SetWatches/SetWatches2 reconnect replay path, which replays watch events without the ACL check that a prior fix (CVE-2024-23944 / ZOOKEEPER-4799) added to WatchManager.triggerWatch(). An attacker registers exists-watches on not-yet-existing paths, reconnects after a privileged process creates those paths under a restrictive ACL, and learns the path names through the replayed events - only the path is exposed, never the znode data, though path names can themselves encode sensitive identifiers such as usernames or login IDs. Exploitation is probabilistic, requiring correct guessing of target path names and favorable reconnect timing, and the independent assessment rates confidentiality impact as Low (vector AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) rather than the published 7.5; EPSS is 0.20% (10th percentile), and no public exploit has been identified at time of analysis.
Earlier versions of this analysis (2)
Information disclosure in Apache ZooKeeper 3.8.0 through 3.8.6 and 3.9.0 through 3.9.5 lets a remote, unauthenticated client learn whether ACL-restricted znodes exist: it registers exists-watches on specific not-yet-created paths, waits for a legitimate process to create those paths with restrictive ACLs, then reconnects so the SetWatches/SetWatches2 replay handler in DataTree.setWatches() calls watcher.process(event) with a null ACL, bypassing the ACL check that ZOOKEEPER-4799 (the incomplete fix for CVE-2024-23944) added to WatchManager.triggerWatch(). Only path existence is exposed - never znode data - but paths can encode sensitive identifiers such as usernames or login IDs, and because the attacker must already know or guess the exact candidate path names, our assessment reduces the vendor's 7.5 (AC:L/C:H) to AC:H/C:L rather than treating it as free enumeration. EPSS is 0.20% (10th percentile), no public exploit has been identified at time of analysis, and the issue is confirmed fixed in 3.8.7 and 3.9.6.
Path-name disclosure in Apache ZooKeeper 3.8.0 through 3.8.6 and 3.9.0 through 3.9.5 lets a connected client learn the names of ACL-restricted znodes by registering exists-watches on paths that do not yet exist and then reconnecting after those paths are created under restrictive ACLs. The reconnect replay handler DataTree.setWatches() delivers the watch notification with a null ACL, bypassing the ACL check that was added to WatchManager.triggerWatch() as the fix for CVE-2024-23944 (ZOOKEEPER-4799), making this an incomplete-fix bypass. Only the znode path string is exposed, not znode data, but because paths frequently embed usernames, login IDs, or tenant identifiers, Apache and the reporter rate it critical; no public exploit code or confirmed active exploitation was identified at time of analysis.
RemediationAI
Upgrade to Apache ZooKeeper 3.9.6 or 3.8.7, which are the vendor-released versions that fix the missing ACL check in DataTree.setWatches(); these are the only confirmed patched releases at time of analysis, and there is no evidence that backports were issued for earlier lines. Where immediate upgrade is not possible, the most effective compensating control is to restrict network reachability of the ZooKeeper client port (default 2181) so that only trusted clients can open sessions - typically via firewall rules, security groups, or binding the service to internal interfaces; the trade-off is that any legitimate remote clients outside the permitted range lose access, which in multi-tenant or shared-service environments can be disruptive. Organizations should also review whether sensitive identifiers such as usernames or login IDs are encoded in znode path names rather than in node data; migrating such naming to non-sensitive path conventions removes most of the residual risk, since the flaw exposes only path existence and names. Enable ZooKeeper's authentication and ACL enforcement for client sessions where supported, although note this does not remediate the bypass itself because the vulnerable reconnect replay path ignores ACLs - it only limits which clients can reach the server. Note that CVE-2024-23944/ZOOKEEPER-4799 was an incomplete fix, so any prior mitigation adopted for that CVE should not be assumed to cover the SetWatches reconnect path, and monitoring for unusual watch re-registration patterns on reconnect can serve as a detection backstop. Patch status: Vendor-released patch: 3.9.6 and 3.8.7. Exploitation status: no public exploit identified at time of analysis.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Apache ZooKeeper is a distributed coordination service whose clients register watches to be notified when a znode changes state. The vulnerability is a missing-authorization flaw (CWE-862) rooted in an incomplete fix: CVE-2024-23944 (ZOOKEEPER-4799) added ACL verification to WatchManager.triggerWatch() so watch notifications would respect the ACLs of the watched path. However, DataTree.setWatches(), the handler for SetWatches and SetWatches2 requests that a client sends on reconnect to re-register previously held watches, still invokes watcher.process(event) with a null ACL, bypassing the check entirely. Because the reconnect replay path trusts the client-supplied watch list without evaluating ACLs, a client that registered an exists-watch on a non-existent path before the path was created will receive a notification for the created path regardless of the ACL now protecting it. The defect is purely an information-disclosure of path existence and names; the watch event payload does not include znode data, so no node content, credentials stored in data, or integrity/availability impact results, which is consistent with the assessed C:L/I:N/A:N profile. Affected CPEs correspond to the Apache ZooKeeper 3.8.x and 3.9.x release lines, with the fix landing in 3.9.6 and 3.8.7.
Know when Zookeeper gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Network-reachable and unauthenticated (AV:N/PR:N), but only path-existence metadata leaks - not znode data - so C:L rather than C:H; no integrity or availability impact.
Primary rating from Vendor (CNA).
CVSS VectorVendor
Lifecycle Timeline
3Description PRE-NVD
Executive ViewAI
Apache ZooKeeper instances running versions 3.8.0 through 3.8.6 or 3.9.0 through 3.9.5 can disclose the names of access-restricted configuration paths to unauthenticated network-reachable clients, potentially revealing identifiers such as usernames or login IDs embedded in those names, though never the underlying data. No vendor-released patch identified at time of analysis and no public exploit identified at time of analysis; exploitation is probabilistic, requiring correct path guessing and favorable reconnect timing, and only limited confidentiality impact (C:L) has been assessed. Because ZooKeeper commonly underpins service discovery and coordination for many downstream applications, leadership should treat this as a contained but unpatched disclosure risk requiring inventory, network-exposure review, and tracking of the vendor fix rather than emergency action.
No vendor-released patch identified at time of analysis. Interim mitigations: restrict network access to ZooKeeper client ports (2181/2182/2183) to trusted hosts and application subnets; enforce SASL/Digest authentication and strict ACLs on all znodes; avoid encoding sensitive identifiers such as usernames or login IDs in znode path names; enable ZooKeeper audit logging to detect anomalous SetWatches/SetWatches2 reconnect replay activity; and monitor the Apache ZooKeeper advisory channel for a fixed 3.8.x or 3.9.x release.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Two four letter word commands "wchp/wchc" are CPU intensive and could cause spike of CPU utilization on Apache ZooKeeper
Buffer overflow in the C cli shell in Apache Zookeeper before 3.4.9 and 3.5.x before 3.5.3, when using the "cmd:" batch
Hostname verification bypass in Apache ZooKeeper's ZKTrustManager allows attackers with a valid certificate trusted by t
Netty is an open-source, asynchronous event-driven network application framework for rapid development of maintainable h
When using IPAuthenticationProvider in ZooKeeper Admin Server there is a possibility of Authentication Bypass by Spoofin
Authorization Bypass Through User-Controlled Key vulnerability in Apache ZooKeeper. Rated critical severity (CVSS 9.1),
Authorization bypass in Apache ZooKeeper 3.8.0 through 3.8.6 and 3.9.0 through 3.9.5 lets remote attackers delete empty
Improper certificate hostname validation in Apache ZooKeeper's quorum TLS path allows a CA-trusted peer certificate whos
Apache ZooKeeper 3.8.5 and 3.9.4 improperly log sensitive client configuration data at INFO level, allowing unauthentica
No authentication/authorization is enforced when a server attempts to join a quorum in Apache ZooKeeper before 3.4.10, a
An issue is present in Apache ZooKeeper 1.0.0 to 3.4.13 and 3.5.0-alpha to 3.5.4-beta. Rated medium severity (CVSS 5.9),
Audit log injection in Apache ZooKeeper 3.9.0–3.9.5 and 3.8.0–3.8.6 allows attackers to forge entries in zookeeper_audit
EUVD-2026-80330
NVD
CVE.org
EPSS
VulDB
Exploit-DB