CVE-2026-59739: Apache ZooKeeper: Information disclosure via SetWatches reconnect replay
CVE-2026-59739: Apache ZooKeeper missing ACL check in SetWatches reconnect replay lets attackers discover ACL-restricted znode paths.
Missing ACL Check in Apache ZooKeeper SetWatches Replay Leaks Restricted Znode Paths
Apache ZooKeeper fails to enforce ACLs when replaying a client's registered watches during session reconnection, an information-disclosure flaw (CWE-862, missing authorization) in the reconnect SetWatches/SetWatches2 handler. An attacker connects to the ZooKeeper client port and registers exists-watches on guessed paths that do not yet exist; after those paths are created with restricted ACLs, the attacker reconnects, and DataTree.setWatches() calls watcher.process(event) with a null ACL, bypassing the check that was added to WatchManager.triggerWatch() as an incomplete fix for CVE-2024-23944 (ZOOKEEPER-4799). The attacker learns only that the ACL-protected paths exist, not the znode data, but path names can embed sensitive values such as usernames or login IDs, making the leak potentially critical. Any deployment of ZooKeeper 3.8.x before 3.8.7 or 3.9.x before 3.9.6 where clients can reach the client port is affected. No public PoC is known, the issue is not in CISA KEV, and CVSS has not yet been scored.
What to do: Upgrade to ZooKeeper 3.9.6 or 3.8.7, the fixed patch releases for each branch. Restrict network access to the ZooKeeper client port (default 2181) to trusted hosts and subnets, since the attack only requires client connectivity to register and replay watches. Assume ACL-protected znode paths may have been enumerated on long-lived clusters and review whether those path names embed usernames or other sensitive identifiers.
| Product | Affected |
|---|---|
| Apache Software Foundation Apache ZooKeeper | 3.8.x before 3.8.7 |
| Apache Software Foundation Apache ZooKeeper | 3.9.x before 3.9.6 |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Information disclosure via SetWatches reconnect replay in Apache ZooKeeper due to missing ACL check. An attacker can discover ACL-restricted paths by registering exists-watches on non-existent paths, then reconnecting after the paths are created with restricted ACLs. Issue is caused by incomplete fix for CVE-2024-23944 (ZOOKEEPER-4799). The fix added ACL checking to WatchManager.triggerWatch(). However, DataTree.setWatches() — the SetWatches/SetWatches2 reconnect replay handler — still calls watcher.process(event) with null ACL, bypassing the check entirely. 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.6, 3.8.7 which fixes the issue.
CVE-2026-59739: Apache ZooKeeper missing ACL check in SetWatches reconnect replay lets attackers discover ACL-restricted znode paths.
Today 1.6K readers · 2.5K views · 779 reads · all time 189K views