CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-82399

CVE-2026-82399: Resource Exhaustion Denial of Service in CoreDNS Custom Transports

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 18, 2026·7 min read·32 visits

Executive Summary (TL;DR)

CoreDNS custom transports (DoH, DoQ, gRPC) processed raw payloads without validating the DNS header, enabling unauthenticated remote attackers to trigger out-of-memory crashes via nested DNS name compression pointers.

CVE-2026-82399 is a resource management vulnerability in CoreDNS affecting custom DNS transport pathways. Prior to version 1.14.7, transports including DNS-over-HTTPS (DoH), DNS-over-QUIC (DoQ), and DNS-over-gRPC executed the resource-intensive unpack method of the underlying Go DNS library on raw, untrusted incoming payloads before validating the fixed 12-byte DNS header. An unauthenticated remote attacker can exploit this behavior by using nested DNS name compression pointers to trigger substantial heap allocations, leading to memory exhaustion and server termination.

Vulnerability Overview

CoreDNS is a highly configurable, Cloud Native Computing Foundation (CNCF) graduated DNS server written in Go. The architecture of CoreDNS relies on custom plugin chains to process requests and serve records. While standard UDP and TCP listeners leverage the validation routines of the underlying Go DNS library (github.com/miekg/dns), custom secure transport protocols are managed via independent implementations within the CoreDNS codebase.

These custom transport interfaces support modern, encrypted protocols: DNS-over-HTTPS (DoH), DNS-over-QUIC (DoQ), and DNS-over-gRPC. These pathways expose a distinct network-facing attack surface. Because these handlers bypass the initial protocol wrappers of standard DNS listeners, raw network bytes are ingested and handled directly by custom parsing routines.

The vulnerability, designated as CVE-2026-82399, represents a resource allocation flaw classified under CWE-770. Unauthenticated remote attackers can exploit this interface to trigger large, rapid heap allocations. The resulting memory exhaustion bypasses traditional security controls and induces an Out-of-Memory (OOM) termination of the active CoreDNS instance.

Root Cause Analysis

The core flaw lies in the sequencing of packet validation within the custom transport listeners. In standard TCP and UDP servers, the incoming wire format is subjected to header validation. The github.com/miekg/dns package implements dns.DefaultMsgAcceptFunc to evaluate the 12-byte fixed DNS header before parsing the payload body. If the header violates standard policy (such as containing multiple question counts), parsing is aborted immediately.

In CoreDNS versions prior to 1.14.7, the custom listeners (plugin/pkg/doh/doh.go, core/dnsserver/server_quic.go, and core/dnsserver/server_grpc.go) did not implement this header-level validation step. Instead, they read the raw payload bytes directly from the network stream and immediately initialized a new dns.Msg structure. The listeners then immediately invoked msg.Unpack(payload) to parse the entire packet.

By calling Unpack() directly, CoreDNS is forced to trust the section count variables defined in the packet's 12-byte header. These counts represent the number of entries in the Question, Answer, Authority, and Additional sections. The parser pre-allocates slice memory proportional to these declared counts. Additionally, when encountering DNS name compression pointers (RFC 1035 Section 4.1.4), the parser recursively resolves the pointers, resulting in a severe memory amplification factor. An attacker can use these nested offsets to force huge string allocations, consuming hundreds of megabytes of memory per request.

Code Analysis

Analyzing the patch commit 530b0a5ff2ad68cc0421f10dd93568945cc671c9 reveals how CoreDNS corrected the processing sequence. The primary fix introduces a new package plugin/pkg/dnsutil containing the UnpackRequest helper. This helper reads the 12-byte header explicitly, validates it via the official library policy, and rejects invalid structures before calling the resource-intensive Unpack method.

// plugin/pkg/dnsutil/message.go
package dnsutil
 
import (
	"encoding/binary"
	"errors"
	"github.com/miekg/dns"
)
 
var errRequestRejected = errors.New("dns request rejected")
 
// UnpackRequest unpacks a request after applying the default miekg/dns request policy.
func UnpackRequest(msg []byte) (*dns.Msg, error) {
	var header dns.Header
	// Safely decode only the first 12 bytes of the message to parse the header
	if _, err := binary.Decode(msg, binary.BigEndian, &header); err != nil {
		return nil, dns.ErrBuf
	}
	// Check if the header conforms to the standard DNS message policy
	if dns.DefaultMsgAcceptFunc(header) != dns.MsgAccept {
		return nil, errRequestRejected
	}
 
	request := new(dns.Msg)
	// Proceed to unpack the entire payload only after the header is validated
	return request, request.Unpack(msg)
}

The custom handlers were updated to integrate this check. For example, in core/dnsserver/server_quic.go, the unsafe invocation is replaced by the secure wrapper:

// Vulnerable implementation
req := &dns.Msg{}
err = req.Unpack(buf)
 
// Patched implementation
req, err := dnsutil.UnpackRequest(buf)

This structural modification ensures that any malformed message containing an excessive question count or nested pointers is rejected during the 12-byte header check. No significant heap allocation or recursive pointer decompression occurs for malformed requests.

Protocol Flow Sequence

To visualize the packet handling logic and the vulnerability's placement in the pipeline, refer to the sequence diagram below. This diagram illustrates how the omission of the header check allowed payloads to bypass initial filtering.

The sequence demonstrates that because heap allocation is triggered in the unpacking layer, subsequent processing blocks (such as security plugins) are never reached. Mitigations must occur at or before this deserialization phase to protect server resources.

Exploitation Analysis

Exploitation of CVE-2026-82399 relies on crafting a DNS packet containing highly compressed domain structures paired with an inflated question count. Because the transport endpoints do not validate the 12-byte header prior to unpacking, the parser is forced to process the entire query immediately. The attacker targets DoH (/dns-query), DoQ, or gRPC listeners.

An attack packet is structured with the QDCOUNT (Question Count) field configured to a high value, such as 0x2A7E (10,878 questions). The first question contains a standard domain string (e.g., \x07example\x03com\x00). Subsequent questions do not define new strings; instead, they consist of compression pointers referencing the first question's byte offset (0xC00C).

+-------------------------------------------------------------+
| DNS Header (12 bytes)                                       |
| ID: 0x1234 | Flags: 0x0100 | QDCOUNT: 0x2A7E (10,878 Qs)   |
+-------------------------------------------------------------+
| First Question:                                             |
| \x07example\x03com\x00 | Type: A (0x0001) | Class: IN (0x0001)     |
+-------------------------------------------------------------+
| Questions 2 - 10,878:                                       |
| Offset Pointer: 0xC00C | Type: A | Class: IN                 |
+-------------------------------------------------------------+

When the vulnerable CoreDNS server processes this payload, the parser attempts to reconstruct the domain name for each of the 10,878 references. This forces the Go runtime to pre-allocate massive internal slices on the heap and iteratively construct string representations. This decompression cycle achieves an allocation amplification factor exceeding 150x. Under concurrent load, several threads processing such payloads will trigger the Linux Out-Of-Memory (OOM) killer, terminating the DNS service.

Impact Assessment

The ultimate impact of successful exploitation is a complete Denial of Service (DoS) of the CoreDNS server. Because DNS is a foundation block of modern cloud infrastructure (especially inside Kubernetes clusters), the termination of CoreDNS has cascading effects. Microservices lose the ability to resolve external APIs, database endpoints, or internal cluster services, resulting in widespread service failure.

The vulnerability is rated 7.5 (High) under CVSS v3.1. The attack vector is Network, and the complexity is Low, requiring no special privileges or user interaction. Although it does not permit remote code execution (RCE) or data exfiltration, the impact on Availability is absolute.

Furthermore, because the crash occurs during packet parsing before the CoreDNS plugin architecture is initialized, traditional rate-limiting plugins (such as ratelimit) or access controls (such as acl) are bypassed. The server's memory is exhausted before any plugin can inspect or drop the malicious connection, making network-level filtering or application updates the only viable avenues of protection.

Remediation & Detection

The primary and recommended mitigation is upgrading CoreDNS to version 1.14.7 or higher. This version integrates the dnsutil.UnpackRequest wrapper across all custom secure listeners, ensuring malformed packet headers are rejected before allocation or decompression can take place.

If immediate upgrading is not feasible, several tactical workarounds can be deployed. For environments running DNS-over-HTTPS (DoH), a Web Application Firewall (WAF) or reverse proxy can be positioned in front of the CoreDNS instances. The WAF should be configured to inspect HTTP POST requests to /dns-query and block payloads where the DNS header bytes (specifically bytes 4-5 representing QDCOUNT) exceed a safe threshold (typically QDCOUNT <= 1).

Additionally, if DoH, DoQ, or DNS-over-gRPC are not required for network operations, these listeners should be disabled in the Corefile. Restricting DNS services solely to standard UDP and TCP listeners removes the vulnerable code paths from the active attack surface. Standard listeners natively utilize the underlying library's secure parsing routine and are not affected by this vulnerability.

Official Patches

corednsCoreDNS 1.14.7 Release Notes

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

CoreDNS deployments using custom transports (DoH, DoQ, gRPC)

Affected Versions Detail

Product
Affected Versions
Fixed Version
coredns
coredns
>= v1.10.1, < v1.14.7v1.14.7
AttributeDetail
CWE IDCWE-770
Attack VectorNetwork
CVSS v3.1 Score7.5 (High)
Exploit StatusProof-of-Concept
KEV StatusNot Listed
Vulnerability TypeDenial of Service (DoS)

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-770
Allocation of Resources Without Limits or Throttling

The software allocates memory or other resources based on user-controlled input without sufficient validation or limitation, allowing an attacker to cause resource exhaustion.

Known Exploits & Detection

GitHub Security AdvisoryDetails outlining packet structure and reproduction mechanism.

Vulnerability Timeline

Fix commit 530b0a5ff2ad68cc0421f10dd93568945cc671c9 authored by Ville Vesilehto
2026-07-16
CVE-2026-82399 registered and publicly disclosed
2026-09-16

References & Sources

  • [1]GitHub Security Advisory GHSA-mrg3-qvqr-jw29
  • [2]NVD CVE-2026-82399 Detail

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-118777
4.8

CVE-2026-118777: Prototype Pollution in Forge HTTP Client Cookie Management

CVE-2026-118777 is a prototype pollution vulnerability (CWE-1321) in the Forge JavaScript cryptography and networking library (distributed on npm as node-forge) prior to version 1.4.1. The flaw resides in the forge.http client subsystem, where incoming HTTP cookie names and paths parsed from Set-Cookie response headers are stored directly into standard JavaScript objects without key validation or property isolation. By returning crafted Set-Cookie headers containing keys such as __proto__ or constructor, a malicious HTTP server can inject arbitrary properties into Object.prototype, attach attributes to the global Object constructor, or delete built-in prototype methods to cause an application-wide denial of service.

Amit Schendel
Amit Schendel
7 views•10 min read
•1 day ago•CVE-2026-118775
3.7

CVE-2026-118775: ASN.1 OID First Arc Truncation and Ambiguity in node-forge

CVE-2026-118775 (GHSA-4642-5mcj-2rqw) is an integer overflow and validation flaw in the ASN.1 serialization module of Forge (node-forge) prior to version 1.4.1. The asn1.oidToDer() function fails to validate the range of the first two arcs of an Object Identifier (OID) and truncates the packed initial subidentifier to a single 8-bit integer. Applications that perform policy checks on untrusted OID strings before encoding them into Distinguished Encoding Rules (DER) format can be tricked into emitting DER bytes that correspond to a completely different, restricted OID.

Amit Schendel
Amit Schendel
8 views•10 min read
•1 day ago•CVE-2026-119194
7.5

CVE-2026-119194: Algorithmic Complexity Denial of Service in pyasn1 Schemaless ASN.1 Decoder

CVE-2026-119194 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting versions 0.3.3 through 0.6.4. The flaw resides in the schemaless decoding routine ConstructedPayloadDecoderBase._decodeComponentsSchemaless used across BER, CER, and DER codecs. By sending an ASN.1 container populated with child components whose tag identifiers are separated by multiples of CPython's integer hash modulus (sys.hash_info.modulus), an unauthenticated attacker can force worst-case hash collisions in an unbounded Python set, degrading decoding performance from O(N) to O(N^2) and causing a Denial of Service (DoS).

Alon Barad
Alon Barad
7 views•9 min read
•1 day ago•CVE-2026-119195
7.5

CVE-2026-119195: Quadratic-Time Denial of Service in pyasn1 BER/CER/DER Decoders

CVE-2026-119195 is an algorithmic complexity vulnerability (CWE-407) in the pyasn1 library for Python, affecting all versions prior to 0.6.5. When decoding constructed strings or indefinite-length ANY types across BER, CER, and certain DER code paths, the payload decoders repeatedly concatenate incoming fragments onto an immutable bytes object using the += operator. Because Python bytes objects cannot be resized in-place, each fragment iteration allocates a new buffer and copies all previously accumulated bytes, resulting in quadratic O(N^2) time and memory copy complexity. An unauthenticated remote attacker can supply a highly fragmented ASN.1 stream to exhaust CPU cycles and stall application worker threads.

Amit Schendel
Amit Schendel
8 views•10 min read
•1 day ago•CVE-2026-119197
7.5

CVE-2026-119197: Quadratic Algorithmic Complexity Denial of Service in pyasn1 REAL Mantissa Decoder

An algorithmic complexity vulnerability (CWE-407) in pyasn1 versions prior to 0.6.5 allows unauthenticated attackers to cause a Denial of Service (DoS) via crafted ASN.1 payloads. The flaw resides in the binary-encoded ASN.1 REAL mantissa deserialization routine within RealPayloadDecoder.valueDecoder. By performing iterative byte-string slicing and repeated bitwise shifts on a growing arbitrary-precision integer, the decoder exhibits quadratic time and memory allocation complexity relative to the mantissa length. Supplying a BER-, CER-, or DER-encoded payload with a large REAL mantissa causes excessive CPU consumption and blocks application worker processes.

Amit Schendel
Amit Schendel
7 views•10 min read
•1 day ago•CVE-2026-119196
7.5

CVE-2026-119196: Quadratic CPU Consumption in pyasn1 Constructed BIT STRING Decoding

A vulnerability classified under CWE-407 (Inefficient Algorithmic Complexity) exists in the pyasn1 library prior to version 0.6.5. When parsing constructed ASN.1 BIT STRING payloads under BER, CER, or schema-driven DER encoding rules, the BitStringPayloadDecoder repeatedly shifts and copies the entire accumulated bit value for each incoming fragment. Processing inputs with a large number of small constructed fragments induces quadratic CPU consumption, allowing unauthenticated remote attackers to cause a denial of service via resource exhaustion during the initial decoding phase.

Alon Barad
Alon Barad
8 views•10 min read