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-86003

CVE-2026-86003: Unintended Proxying of DNS UPDATE Requests via Alternative Transports in CoreDNS

Alon Barad
Alon Barad
Software Engineer

Sep 18, 2026·5 min read·3 visits

Executive Summary (TL;DR)

CoreDNS alternative transports failed to enforce default message acceptance policies on DNS headers, allowing remote attackers to send unauthorized DNS UPDATE queries that are forwarded to trusting upstream resolvers.

A protocol-level validation bypass in CoreDNS versions prior to 1.14.7 allows unauthenticated remote attackers to proxy unauthorized DNS UPDATE messages (Opcode 5) using modern alternative transport layers such as DoH, DoH3, DoQ, and gRPC. If upstream authoritative servers trust the CoreDNS server's source IP and do not enforce TSIG authentication, attackers can inject, alter, or delete DNS zone records, leading to potential zone takeover or traffic redirection.

Vulnerability Overview

CoreDNS is a modular DNS server widely deployed in cloud-native environments, including as the default name resolution service in Kubernetes clusters.\n\nThe vulnerability tracked as CVE-2026-86003 is an architectural validation bypass affecting alternative transport implementations within CoreDNS. These alternative transport endpoints include DNS-over-HTTPS (DoH), DNS-over-HTTP/3 (DoH3), DNS-over-QUIC (DoQ), and DNS-over-gRPC.\n\nWhile traditional UDP, TCP, and DNS-over-TLS (DoT) servers enforce strict message validation policies on incoming packets, the alternative transport listeners failed to invoke the default validation framework when parsing network frames. This allows unauthenticated remote attackers to send unauthorized dynamic DNS update queries that the server subsequently processes and forwards to upstream authoritative resolvers.

Root Cause Analysis

In CoreDNS, incoming DNS messages processed over standard UDP or TCP transports are routed through parsing wrappers that leverage the default message acceptance logic defined by the Go DNS library ('github.com/miekg/dns'). The central function 'dns.DefaultMsgAcceptFunc' validates header opcodes and flags, rejecting administrative opcodes like 'UPDATE' (Opcode 5) by default.\n\nIn affected CoreDNS versions prior to 1.14.7, alternative and encrypted transports handled payload extraction independently. Rather than passing the raw extracted byte payloads through the validated deserialization logic, these handlers directly invoked the library's raw 'Unpack()' method on the unpacked message instances.\n\nThe 'Unpack()' method deserializes wire bytes into a 'dns.Msg' structure but does not enforce the 'dns.DefaultMsgAcceptFunc' filtering. This allows any unauthenticated client to deliver high-privilege opcodes, such as RFC 2136 'UPDATE' payloads, without triggering the boundary access controls. The unpacked message is subsequently treated as a normal DNS query and routed into the core plugin architecture.

Architectural Traffic Flow

To visualize the propagation of unauthorized payloads, consider the network path of the exploit from the attacker to the internal DNS infrastructure.\n\nmermaid\ngraph LR\n Attacker[\"Untrusted Attacker\"]\n CoreDNS[\"CoreDNS Server (Vulnerable Listener)\"]\n Upstream[\"Upstream Authoritative DNS Server\"]\n\n Attacker -- \"DoH POST /dns-query<br>(Opcode 5: UPDATE)\" --> CoreDNS\n CoreDNS -- \"Raw DNS Update (Opcode 5)<br>(CoreDNS Source IP)\" --> Upstream\n Upstream -- \"Processes Update\" --> Upstream\n\n\nWhen CoreDNS forwards the unpacked message via the 'forward' or 'proxy' plugins, the packet arrives at the upstream authoritative nameserver with the source IP of the CoreDNS pod or server. Because many environments establish trusted zones based on internal IP allowlists, the upstream server assumes the request is legitimate and executes the record update.

Code-Level Patch Analysis

The vulnerability was addressed in commit '530b0a5ff2ad68cc0421f10dd93568945cc671c9' by introducing a standardized request parsing helper under 'plugin/pkg/dnsutil/message.go'.\n\nThis utility, 'UnpackRequest', explicitly decodes the DNS header structure and runs validation prior to performing full deserialization. This prevents raw 'UPDATE' operations from propagating further.\n\ngo\npackage dnsutil\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\n\t\"github.com/miekg/dns\"\n)\n\nvar errRequestRejected = errors.New(\"dns request rejected\")\n\n// UnpackRequest unpacks a request after applying the default miekg/dns request policy.\nfunc UnpackRequest(msg []byte) (*dns.Msg, error) {\n\tvar header dns.Header\n\t// Partially decode the wire packet header\n\tif _, err := binary.Decode(msg, binary.BigEndian, &header); err != nil {\n\t\treturn nil, dns.ErrBuf\n\t}\n\t// Validate the header flags using the standard acceptance function\n\tif dns.DefaultMsgAcceptFunc(header) != dns.MsgAccept {\n\t\treturn nil, errRequestRejected\n\t}\n\n\trequest := new(dns.Msg)\n\treturn request, request.Unpack(msg)\n}\n\n\nThe alternative listeners, such as the gRPC listener ('core/dnsserver/server_grpc.go'), were then modified to utilize 'dnsutil.UnpackRequest' instead of direct unpacking:\n\ndiff\n-msg := new(dns.Msg)\n-err := msg.Unpack(in.GetMsg())\n+msg, err := dnsutil.UnpackRequest(in.GetMsg())\n if err != nil {\n \treturn nil, err\n }\n

Exploitation and Attack Vectors

An attacker targeting this vulnerability must identify a CoreDNS instance exposing an alternative transport mechanism, such as a DNS-over-HTTPS (DoH) endpoint. The attacker does not require credentials or access to the internal network if the DoH server is exposed externally.\n\nThe attacker crafts a binary-encoded RFC 2136 DNS UPDATE query. This message specifies the targeted domain zone (e.g., 'internal.zone') and includes Resource Record modification directives (e.g., adding an 'A' record pointing to a rogue IP address).\n\nThe payload is then encapsulated inside an HTTP POST request to the '/dns-query' path, utilizing the 'application/dns-message' content type. Because the DoH handler does not validate the header opcode, the CoreDNS server treats it as a legitimate request, matches the zone against the 'forward' plugin, and forwards it to the upstream nameserver under its own trusted IP footprint.

Impact Assessment and Mitigation

The impact of a successful exploitation is a complete compromise of integrity for DNS records handled by the trusted upstream server. Attackers can hijack internal domain resolution, route traffic to malicious servers, manipulate MX records to intercept corporate mail, or delete existing host entries to disrupt services.\n\nOrganizations should immediately upgrade CoreDNS deployments to version 1.14.7 or later. This release enforces validation across all transport pathways.\n\nFor systems where immediate upgrades are unfeasible, defensive actions include disabling the 'doh', 'grpc', or 'quic' plugins in the active 'Corefile' configuration. Furthermore, upstream servers must be reconfigured to require cryptographic Transaction Signatures (TSIG) for any zone modification commands, neutralizing source-IP based authorization mechanisms.

Technical Appendix

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

Affected Systems

CoreDNS
AttributeDetail
CWE IDCWE-441
Attack VectorNetwork (AV:N)
CVSS Score7.5 (High)
Exploit Statuspoc
KEV StatusNot Listed
ImpactHigh Integrity Impact (Zone manipulation)
CWE-441
Unintended Proxy or Intermediary ('Confused Deputy')

Vulnerability Timeline

Mitigation commit 530b0a5ff2ad68cc0421f10dd93568945cc671c9 merged
2026-07-16
CVE-2026-86003 published and GHSA-9gm5-9rfh-m6vx released
2026-09-16
CoreDNS v1.14.7 released with the patch
2026-09-16
NVD record updated
2026-09-17

References & Sources

  • [1]GitHub Security Advisory GHSA-9gm5-9rfh-m6vx
  • [2]NVD - CVE-2026-86003
  • [3]CVE.org Record for CVE-2026-86003
  • [4]CoreDNS Bug Fix Commit
  • [5]CoreDNS Release v1.14.7

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

•39 minutes ago•CVE-2026-86000
5.3

CVE-2026-86000: Polynomial-Time Regular Expression Denial of Service in Soup Sieve Selector Parser

A regular expression denial of service (ReDoS) vulnerability in Soup Sieve prior to version 2.9 allows remote attackers to cause CPU exhaustion and service disruption. The issue lies within the definition of the IDENTIFIER and VALUE selector sub-patterns in the CSS parser component, which uses overlapping adjacent quantified groups. When parsing long, crafted, or unclosed CSS selectors, backtracking-based regular expression engines experience quadratic performance degradation. User-controlled selectors can reach this path through soupsieve.compile(), soupsieve.select(), or BeautifulSoup.select(), while applications using only hard-coded selectors are unaffected.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 3 hours ago•CVE-2026-72695
8.1

CVE-2026-72695: Authenticated Path Traversal and Arbitrary File Deletion in Grav CMS MediaUploadTrait

A path traversal vulnerability exists in Grav CMS versions prior to 2.0.16. The flaw occurs within the file validation mechanisms of the MediaUploadTrait, enabling authenticated users with media management privileges to bypass sandbox limitations. This allows the deletion of arbitrary files on the filesystem, which can result in denial of service or remote code execution.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 4 hours ago•CVE-2026-74907
5.9

CVE-2026-74907: Directory Traversal in Grav CMS Pre-Boot Static Asset Server

An unauthenticated directory traversal vulnerability exists in Grav CMS prior to version 2.0.15. Due to an insecure string-based containment check (str_starts_with) in the pre-boot static asset server, attackers can read files in sibling directories sharing a prefix with the configured asset path when plugin-asset-map.php is enabled.

Amit Schendel
Amit Schendel
5 views•7 min read
•about 5 hours ago•CVE-2026-75828
9.3

CVE-2026-75828: Stored Cross-Site Scripting (XSS) via Security Filter Bypass in Grav CMS

CVE-2026-75828 is a critical stored cross-site scripting (XSS) vulnerability in the getgrav Grav CMS before version 2.0.15. The vulnerability resides in the detectXss() security filter mechanism, where parser-differential mismatches between the regular-expression-based server-side validation and browser HTML5 tokenization allow authenticated editors to bypass event-handler detection and inject arbitrary JavaScript execution vectors.

Amit Schendel
Amit Schendel
6 views•4 min read
•about 6 hours ago•CVE-2026-75827
8.8

CVE-2026-75827: Grav Arbitrary File Write & Remote Code Execution

An arbitrary file write and remote code execution vulnerability exists in Grav CMS before version 2.0.15. The vulnerability is caused by using an incomplete denylist validation approach for bare PHP functions in the Blueprint dynamic-data compiler, allowing authenticated users with page-editing or blueprint-configuration privileges to execute arbitrary functions such as error_log.

Alon Barad
Alon Barad
6 views•4 min read
•about 7 hours ago•CVE-2026-75834
5.4

CVE-2026-75834: Input Sanitization Bypass leading to Stored XSS in Grav CMS

CVE-2026-75834 is a stored Cross-Site Scripting (XSS) vulnerability in Grav CMS core, caused by a design flaw in its input validation wrapper Security::detectXss(). Regular expressions using the PCRE UTF-8 /u modifier fail-open when encountering invalid UTF-8 sequences or when the PCRE JIT stack limit is exhausted, allowing authenticated users with page-editing privileges to save malicious HTML and scripts.

Alon Barad
Alon Barad
6 views•6 min read