---
id: CVE-2026-84439
title: >-
  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 us…
summary: >-
  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 us…
severity: medium
cvss: 5.3
cvssVector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N'
cwe:
  - CWE-117
vendor: apache
product: zookeeper
affected:
  - 'zookeeper >= 3.8.0, < 3.8.7'
  - 'zookeeper >= 3.9.0, < 3.9.6'
patched:
  - zookeeper 3.9.6
published: '2026-09-16'
updated: '2026-09-18'
sourceUpdated: '2026-09-18T14:37:30.650'
source: NVD
sourceUrl: 'https://nvd.nist.gov/vuln/detail/CVE-2026-84439'
references:
  - url: 'https://lists.apache.org/thread/b7qnjvqjh393l0j07tmnb5ggg40sx3m6'
    label: security@apache.org
  - url: 'http://www.openwall.com/lists/oss-security/2026/09/15/6'
    label: af854a3a-2127-422b-91ae-364da2661108
tags:
  - nvd
  - cve.org
epss: 0.00742
epssPercentile: 0.52737
ssvc:
  exploitation: none
  automatable: 'yes'
  technicalImpact: partial
  timestamp: '2026-09-17T19:14:36.442526Z'
ingestedAt: '2026-09-16T09:53:11.605Z'
---

## Overview

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.

## Affected

- `zookeeper >= 3.8.0, < 3.8.7`
- `zookeeper >= 3.9.0, < 3.9.6`

## Remediation

Upgrade past the affected range:

- `zookeeper 3.9.6`
