Apache Kafka: Denial of service in Kafka Streams and client deserializers via unbounded memory allocation
Several Kafka deserialization paths read a size or count field from input data and use it directly to allocate an array, collection, or byte buffer, with no check against the bytes actually available. A small crafted input can therefore declare a very large size and force a multi-gigabyte allocation. The affected paths are, in Kafka Streams, ProcessorRecordContext (header count), ChangedDeserializer (varint value length), CombinedKeySchema (foreign-key length, which could also produce a negative size), ProcessorMetadata (key length), and AssignmentInfo group-assignment decoding; and, in the clients library, ListDeserializer (used by ListSerde). Impact: An attacker can trigger the oversized allocation and raise an OutOfMemoryError that crashes the affected consumer or Kafka Streams thread; the broker and the rest of the cluster are unaffected. The reachable surface depends on the path: writing a crafted record to a Streams application's internal changelog or repartition topics, or committing crafted offset metadata to its consumer group (Streams internal paths); writing a crafted record to any topic that a consumer reads with ListSerde (ListDeserializer); or, as a member of a Streams consumer group, returning crafted assignment data when elected leader (AssignmentInfo). Because a crafted record remains in its topic, the error can recur on restart. The record size limit (max.message.bytes) does not help, because the allocation is driven by a size field rather than by the input'
- Products
- Apache Kafka
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-111551
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 2 Nov 2026, 13:21 UTC · Revision 1
Source evidence
Apache Kafka: Denial of service in Kafka Streams and client deserializers via unbounded memory allocation
core-cve · Original sourcePublished 28 Oct 2026, 16:45 UTC
Several Kafka deserialization paths read a size or count field from input data and use it directly to allocate an array, collection, or byte buffer, with no check against the bytes actually available. A small crafted input can therefore declare a very large size and force a multi-gigabyte allocation. The affected paths are, in Kafka Streams, ProcessorRecordContext (header count), ChangedDeserializer (varint value length), CombinedKeySchema (foreign-key length, which could also produce a negative size), ProcessorMetadata (key length), and AssignmentInfo group-assignment decoding; and, in the clients library, ListDeserializer (used by ListSerde). Impact: An attacker can trigger the oversized allocation and raise an OutOfMemoryError that crashes the affected consumer or Kafka Streams thread; the broker and the rest of the cluster are unaffected. The reachable surface depends on the path: writing a crafted record to a Streams application's internal changelog or repartition topics, or committing crafted offset metadata to its consumer group (Streams internal paths); writing a crafted record to any topic that a consumer reads with ListSerde (ListDeserializer); or, as a member of a Streams consumer group, returning crafted assignment data when elected leader (AssignmentInfo). Because a crafted record remains in its topic, the error can recur on restart. The record size limit (max.message.bytes) does not help, because the allocation is driven by a size field rather than by the input'
cve:CVE-2026-111551
Apache Kafka
Fixed versions: Not specified
Apache Kafka
Fixed versions: Not specified
Complete source record
{
"id": "c884a9fd701a59df5255b2bd5cc40e68338c17569721236954825d13913bdf15",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-111551",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Apache Kafka: Denial of service in Kafka Streams and client deserializers via unbounded memory allocation",
"summary": "Several Kafka deserialization paths read a size or count field from input data and use it directly to allocate an array, collection, or byte buffer, with no check against the bytes actually available. A small crafted input can therefore declare a very large size and force a multi-gigabyte allocation. The affected paths are, in Kafka Streams, ProcessorRecordContext (header count), ChangedDeserializer (varint value length), CombinedKeySchema (foreign-key length, which could also produce a negative size), ProcessorMetadata (key length), and AssignmentInfo group-assignment decoding; and, in the clients library, ListDeserializer (used by ListSerde). Impact: An attacker can trigger the oversized allocation and raise an OutOfMemoryError that crashes the affected consumer or Kafka Streams thread; the broker and the rest of the cluster are unaffected. The reachable surface depends on the path: writing a crafted record to a Streams application's internal changelog or repartition topics, or committing crafted offset metadata to its consumer group (Streams internal paths); writing a crafted record to any topic that a consumer reads with ListSerde (ListDeserializer); or, as a member of a Streams consumer group, returning crafted assignment data when elected leader (AssignmentInfo). Because a crafted record remains in its topic, the error can recur on restart. The record size limit (max.message.bytes) does not help, because the allocation is driven by a size field rather than by the input'",
"evidence": "cve:CVE-2026-111551",
"products": [
{
"name": {
"value": "Apache Kafka",
"evidence": "/containers/cna/affected/0/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
},
{
"name": {
"value": "Apache Kafka",
"evidence": "/containers/cna/affected/1/product"
},
"prerequisites": [],
"fixed_versions": [],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CVE-2026-111551",
"aliases": [
"CVE-2026-111551"
],
"metrics": [
{
"other": {
"type": "Textual description of severity",
"content": {
"text": "important"
}
},
"scenarios": [
{
"lang": "en",
"value": "GENERAL"
}
]
}
],
"affected": [
{
"vendor": "Apache Software Foundation",
"product": "Apache Kafka",
"versions": [
{
"status": "affected",
"version": "0.10.0.0",
"versionType": "semver",
"lessThanOrEqual": "4.1.2"
},
{
"status": "affected",
"version": "4.2.0",
"versionType": "semver",
"lessThanOrEqual": "4.2.1"
},
{
"status": "affected",
"version": "4.3.0",
"versionType": "semver",
"lessThanOrEqual": "4.3.1"
}
],
"packageURL": "pkg:maven/org.apache.kafka/kafka-streams",
"packageName": "org.apache.kafka:kafka-streams",
"collectionURL": "https://repo.maven.apache.org/maven2",
"defaultStatus": "unaffected"
},
{
"vendor": "Apache Software Foundation",
"product": "Apache Kafka",
"versions": [
{
"status": "affected",
"version": "0.10.0.0",
"versionType": "semver",
"lessThanOrEqual": "4.1.2"
},
{
"status": "affected",
"version": "4.2.0",
"versionType": "semver",
"lessThanOrEqual": "4.2.1"
},
{
"status": "affected",
"version": "4.3.0",
"versionType": "semver",
"lessThanOrEqual": "4.3.1"
}
],
"packageURL": "pkg:maven/org.apache.kafka/kafka-clients",
"packageName": "org.apache.kafka:kafka-clients",
"collectionURL": "https://repo.maven.apache.org/maven2",
"defaultStatus": "unaffected"
}
],
"modified": "2026-10-28T20:06:57.172Z",
"provider": "cve",
"references": [
"https://kafka.apache.org/cve-list"
],
"provider_metadata": {
"adp": [
{
"title": "CVE Program Container",
"references": [
{
"url": "http://www.openwall.com/lists/oss-security/2026/10/28/13"
}
],
"providerMetadata": {
"orgId": "af854a3a-2127-422b-91ae-364da2661108",
"shortName": "CVE",
"dateUpdated": "2026-10-28T20:06:57.172Z"
}
}
],
"cna": {
"orgId": "f0158376-9dc2-43b6-827c-5f631a4d8d09",
"shortName": "apache",
"dateUpdated": "2026-10-28T16:45:25.163Z"
}
}
},
"related_cves": [
{
"value": "CVE-2026-111551",
"evidence": "/cveMetadata/cveId"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-cve",
"document_id": 484694,
"published_at": "2026-10-28T16:45:25.163+00:00"
}