Apache ZooKeeper security advisories
Security information for Apache ZooKeeper
Reporting
Do you want to disclose a potential security issue for Apache ZooKeeper? Send your report to the Apache ZooKeeper Security Team.
You can read more about the security policy on:
Advisories
This section is experimental: it provides advisories since 2023 and may lag behind the official CVE publications. It may also lack details found on the project security page linked above. If you have any feedback on how you would like this data to be provided, you are welcome to reach out on our public mailinglist or privately on security@apache.org
Operational log forgery via newline injection in EnsembleAuthenticationProvider
CVE-2026-84501 [CVE] [CVE json] [OSV json]
Last updated: 2026-09-16T09:28:09.271Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.5
- Apache ZooKeeper from 3.8.0 through 3.8.6
Description
An unauthenticated attacker can inject arbitrary fake log lines into Apache ZooKeeper's operational log by sending a crafted add_auth("ensemble", ...) request containing newline characters (\n). When the ensemble name doesn't match, EnsembleAuthenticationProvider.handleAuthentication() logs the raw, unsanitized name via LOG.warn(). Because SLF4J's {} placeholder preserves embedded newlines, the attacker can forge complete log entries — with arbitrary timestamps, log levels, class names, and messages — that are visually indistinguishable from genuine ZooKeeper log output.
This issue affects Apache ZooKeeper: from 3.9.0 through 3.9.5, from 3.8.0 through 3.8.6.
Users are recommended to upgrade to version 3.8.7 or 3.9.6, which fixes the issue.
References
Credits
- Youlong Chen Institute of Computing Technology chenyoulong20g@ict.ac.cn (finder)
Audit log injection via unsanitized output from multiple sources
CVE-2026-84439 [CVE] [CVE json] [OSV json]
Last updated: 2026-09-16T09:27:45.211Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.5
- Apache ZooKeeper from 3.8.0 through 3.8.6
Description
When audit logging is enabled (zookeeper.audit.enable=true), an unauthenticated attacker can inject arbitrary fields into Apache ZooKeeper's audit log by sending a digest authentication request with tab characters (\t) embedded in the username. Because the audit log uses tab-separated key=value format, the injected tabs are parsed as legitimate field separators, allowing the attacker to spoof audit results (e.g., injecting result=success), forge operation types, and corrupt forensic evidence.
A log injection vulnerability in Apache ZooKeeper allows a client that can call setACL to inject forged key-value fields into zookeeper_audit.log. When audit logging is enabled, the server serializes attacker-controlled digest ACL ids into the acl= audit field without escaping tab characters. Because audit events are emitted as tab-separated key=value records, a crafted ACL id can make one successful setAcl event appear to contain forged fields such as operation=delete and znode=/forged. This undermines the integrity of downstream audit parsing, alerting, and incident response.
This issue affects Apache ZooKeeper: from 3.9.0 through 3.9.5, from 3.8.0 through 3.8.6.
Users are recommended to upgrade to version 3.9.6 or 3.8.7, which fixes the issue.
References
Credits
- Youlong Chen Institute of Computing Technology chenyoulong20g@ict.ac.cn (reporter)
Missing ACL check on deleteContainer opcode allows unauthorized deletion of any empty persistent/container znode
CVE-2026-79993 [CVE] [CVE json] [OSV json]
Last updated: 2026-09-16T09:27:21.440Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.5
- Apache ZooKeeper from 3.8.0 through 3.8.6
Description
The `deleteContainer` opcode (0x14/20) is processed without verifying the caller's ACL permissions, allowing any authenticated client to delete specific znodes in the data tree regardless of the ACL restrictions on the znode or its parent. This opcode is considered internal-only and the official client doesn't have API for it, but a client that can open a plain TCP session on the ZooKeeper client port (2181 by default) - with NO authentication and NO ACL permissions - can delete any empty persistent znode (including regular persistent nodes, container nodes, and TTL nodes) by issuing the raw protocol OpCode deleteContainer (20). The deleteContainer request path completely skips both the session check and the DELETE ACL check that are enforced by the regular delete (OpCode 2) path. This is an authorization bypass / ACL enforcement bug.
This issue affects Apache ZooKeeper: from 3.9.0 through 3.9.5, from 3.8.0 through 3.8.6.
Users are recommended to upgrade to version 3.9.6 or 3.8.7, which fixes the issue.
References
Credits
- K sec-reports@outlook.com (reporter)
- z f tinkerzf@gmail.com (reporter)
- 布豪 1958304602@qq.com (finder)
Improper validation of certificate with host mismatch in FIPS mode
CVE-2026-59969 [CVE] [CVE json] [OSV json]
Last updated: 2026-09-16T09:26:59.171Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.5
- Apache ZooKeeper from 3.8.0 through 3.8.6
Description
Apache ZooKeeper quorum TLS fails to enforce peer hostname verification in FIPS-mode deployments. When sslQuorum=true, zookeeper.fips-mode=true, ssl.quorum.hostnameVerification=true, and ssl.quorum.clientHostnameVerification=true are enabled, the Java SSLSocket quorum path accepts a CA-trusted peer certificate whose SAN does not match the connected host. A malicious or misissued peer certificate can therefore join quorum traffic, participate in leader election, and enter replication flows.
Users are recommended to upgrade to version 3.8.7 or 3.9.6, which fixes the issue.
References
Credits
- Erichen chenyoulong20g@ict.ac.cn (reporter)
Information disclosure via SetWatches reconnect replay
CVE-2026-59739 [CVE] [CVE json] [OSV json]
Last updated: 2026-09-16T09:26:36.333Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.5
- Apache ZooKeeper from 3.8.0 through 3.8.6
Description
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.
References
Credits
- NGUYEN HONG QUAN hongquanvp11@gmail.com (reporter)
- n0mi1k nomilksec@gmail.com (reporter)
Sensitive information disclosure in client configuration handling
CVE-2026-24308 [CVE] [CVE json] [OSV json]
Last updated: 2026-03-07T08:51:03.330Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.4
- Apache ZooKeeper from 3.8.0 through 3.8.5
Description
Improper handling of configuration values in ZKConfig in Apache ZooKeeper 3.8.5 and 3.9.4 on all platforms allows an attacker to expose sensitive information stored in client configuration in the client’s logfile. Configuration values are exposed at INFO level logging rendering potential production systems affected by the issue. Users are recommended to upgrade to version 3.8.6 or 3.9.5 which fixes this issue.
References
Credits
- Youlong Chen chenyoulong20g@ict.ac.cn (reporter)
Reverse-DNS fallback enables hostname verification bypass in ZooKeeper ZKTrustManager
CVE-2026-24281 [CVE] [CVE json] [OSV json]
Last updated: 2026-03-07T08:50:30.345Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.4
- Apache ZooKeeper from 3.8.0 through 3.8.5
Description
Hostname verification in Apache ZooKeeper ZKTrustManager falls back to reverse DNS (PTR) when IP SAN validation fails, allowing attackers who control or spoof PTR records to impersonate ZooKeeper servers or clients with a valid certificate for the PTR name. It’s important to note that attacker must present a certificate which is trusted by ZKTrustManager which makes the attack vector harder to exploit. Users are recommended to upgrade to version 3.8.6 or 3.9.5, which fixes this issue by introducing a new configuration option to disable reverse DNS lookup in client and quorum protocols.
References
Credits
- Nikita Markevich markevich.nikita1@gmail.com (reporter)
Insufficient Permission Check in AdminServer Snapshot/Restore Commands
CVE-2025-58457 [CVE] [CVE json] [OSV json]
Last updated: 2025-09-24T09:29:42.132Z
Affected
- Apache ZooKeeper from 3.9.0 before 3.9.4
Description
Improper permission check in ZooKeeper AdminServer lets authorized clients to run snapshot and restore command with insufficient permissions.
This issue affects Apache ZooKeeper: from 3.9.0 before 3.9.4.
Users are recommended to upgrade to version 3.9.4, which fixes the issue.
The issue can be mitigated by disabling both commands (via admin.snapshot.enabled and admin.restore.enabled), disabling the whole AdminServer interface (via admin.enableServer), or ensuring that the root ACL does not provide open permissions. (Note that ZooKeeper ACLs are not recursive, so this does not impact operations on child nodes besides notifications from recursive watches.)
References
Credits
- Damien Diederen ddiederen@apache.org (reporter)
Authentication bypass with IP-based authentication in Admin Server
CVE-2024-51504 [CVE] [CVE json] [OSV json]
Last updated: 2024-11-07T09:52:02.061Z
Affected
- Apache ZooKeeper from 3.9.0 before 3.9.3
Description
When using IPAuthenticationProvider in ZooKeeper Admin Server there is a possibility of Authentication Bypass by Spoofing – this only impacts IP based authentication implemented in ZooKeeper Admin Server. Default configuration of client’s IP address detection in IPAuthenticationProvider, which uses HTTP request headers, is weak and allows an attacker to bypass authentication via spoofing client’s IP address in request headers. Default configuration honors X-Forwarded-For HTTP header to read client’s IP address. X-Forwarded-For request header is mainly used by proxy servers to identify the client and can be easily spoofed by an attacker pretending that the request comes from a different IP address. Admin Server commands, such as snapshot and restore arbitrarily can be executed on successful exploitation which could potentially lead to information leakage or service availability issues. Users are recommended to upgrade to version 3.9.3, which fixes this issue.
References
Credits
- 4ra1n (reporter)
- Y4tacker (reporter)
Information disclosure in persistent watcher handling
CVE-2024-23944 [CVE] [CVE json] [OSV json]
Last updated: 2025-07-03T14:52:54.955Z
Affected
- Apache ZooKeeper from 3.9.0 through 3.9.1
- Apache ZooKeeper from 3.8.0 through 3.8.3
- Apache ZooKeeper from 3.6.0 through 3.7.2
Description
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.
References
Credits
- 周吉安(寒泉) zhoujian.zja@alibaba-inc.com (reporter)
Authorization bypass in SASL Quorum Peer Authentication
CVE-2023-44981 [CVE] [CVE json] [OSV json]
Last updated: 2023-10-11T11:55:41.759Z
Affected
- Apache ZooKeeper from 3.9.0 before 3.9.1
- Apache ZooKeeper from 3.8.0 through 3.8.2
- Apache ZooKeeper from 3.7.0 through 3.7.1
- Apache ZooKeeper before 3.7.0
Description
Authorization Bypass Through User-Controlled Key vulnerability in Apache ZooKeeper. If SASL Quorum Peer authentication is enabled in ZooKeeper (quorum.auth.enableSasl=true), the authorization is done by verifying that the instance part in SASL authentication ID is listed in zoo.cfg server list. The instance part in SASL auth ID is optional and if it’s missing, like ’eve@EXAMPLE.COM’, the authorization check will be skipped. As a result an arbitrary endpoint could join the cluster and begin propagating counterfeit changes to the leader, essentially giving it complete read-write access to the data tree. Quorum Peer authentication is not enabled by default.
Users are recommended to upgrade to version 3.9.1, 3.8.3, 3.7.2, which fixes the issue.
Alternately ensure the ensemble election/quorum communication is protected by a firewall as this will mitigate the issue.
See the documentation for more details on correct cluster administration.
References
Credits
- Damien Diederen ddiederen@apache.org (reporter)