Skip to main content

CoreDNS CVE-2026-33489

| EUVDEUVD-2026-27450 HIGH
Missing Authorization (CWE-862)
2026-04-28 https://github.com/coredns/coredns GHSA-h8mm-c463-wjq3
8.2
CVSS 4.0 · Vendor: https://github.com/coredns/coredns
Share

Severity by source

Vendor (https://github.com/coredns/coredns) PRIMARY
8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
5.9 MEDIUM

Network-reachable and unauthenticated (AV:N/PR:N), but AC:H because success requires a specific overlapping ACL config and favorable lexicographic ordering; confidentiality-only zone disclosure (C:H, I:N, A:N).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
SUSE
7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Red Hat
6.5 MEDIUM
qualitative

Primary rating from Vendor (https://github.com/coredns/coredns).

CVSS VectorVendor: https://github.com/coredns/coredns

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

6
Source Code Evidence Fetched
Jul 24, 2026 - 02:41 vuln.today
Analysis Generated
Jul 24, 2026 - 02:41 vuln.today
Patch available
May 05, 2026 - 21:02 EUVD
CVSS changed
May 05, 2026 - 20:22 NVD
7.5 (HIGH) 8.2 (HIGH)
CVE Published
Apr 28, 2026 - 22:44 github-advisory
HIGH 8.2
CVE Published
Apr 28, 2026 - 22:44 nvd
HIGH 7.5

DescriptionCVE.org

Summary

CoreDNS' transfer plugin can select the wrong ACL stanza when both a parent zone and a more-specific subzone are configured. A permissive parent-zone transfer rule can override a restrictive subzone rule (name-dependent), allowing an unauthorized client to perform AXFR/IXFR for the subzone and retrieve its zone contents.

Details

In plugin/transfer/transfer.go, stanza selection is implemented by longestMatch(), which is documented as "longest zone match wins", but it actually chooses the winner via a lexicographic string comparison:

  • zone := "" // longest zone match wins (plugin/transfer/transfer.go)
  • if z > zone { zone = z; x = xfr } (plugin/transfer/transfer.go)

So, a parent zone like example.org. can beat a child zone like a.example.org. purely due to lexicographic ordering ("example.org." > "a.example.org."), even though the child zone is the longer/more specific suffix match. The bypass is data-dependent (some child labels will win, some will lose), making it operationally non-intuitive.

PoC

  1. Adjust COREDNS_BIN in the PoC to point at right path (see the top-level const definitions for tunables as well)
  2. Run python3 ./acl-repro.py
  3. Expected output:

* Baseline (only subzone transfer rule) * axfr a.example.org.: rcode=5 ancount=0 (expected REFUSED=5)

* Candidate (add permissive parent transfer rule) * axfr a.example.org.: rcode=0 ancount=5 (expected NOERROR=0 with ancount>0)

* OK * Subzone transfer ACL bypass reproduced: adding a permissive parent-zone stanza can override a stricter child-zone stanza due to lexicographic zone selection.

Impact

Unauthorized zone transfer can expose full zone contents to a remote network client that was intended to be denied by a subzone-specific transfer policy.

AnalysisAI

Improper authorization in CoreDNS' transfer plugin (versions before 1.14.3) lets a remote client bypass a restrictive subzone AXFR/IXFR ACL and dump the subzone's full contents. The flaw stems from longestMatch() selecting the transfer stanza by lexicographic string comparison instead of true longest-suffix match, so a permissive parent-zone rule can override a stricter child-zone rule for certain zone names. Publicly available exploit code exists (author-provided PoC) but there is no evidence of active exploitation, and EPSS is very low at 0.04%.

Technical ContextAI

CoreDNS is a Go-based, plugin-driven DNS server widely used as the default cluster DNS in Kubernetes. The issue lives in plugin/transfer/transfer.go, where stanza selection for AXFR/IXFR requests is meant to pick the most specific matching zone ('longest zone match wins'). Instead, the code initializes zone := "" and applies if z > zone, a lexicographic string comparison, so example.org. can beat a.example.org. because 'e' sorts after 'a' - even though the child is the longer, more specific suffix. This maps to CWE-862 (Missing Authorization): the correct restrictive policy is present but never applied because the wrong stanza's ACL is consulted. The CPE/package identifier is pkg:go/github.com/coredns/coredns, and the behavior is data-dependent - some child labels win, some lose - making it operationally non-intuitive.

RemediationAI

Vendor-released patch: upgrade to CoreDNS 1.14.3 or later (https://github.com/coredns/coredns/releases/tag/v1.14.3), which corrects longestMatch() so stanza selection uses true longest-suffix matching. For Kubernetes and distro deployments, pull the corresponding rebuilt image or package from your vendor (SUSE/Red Hat). If you cannot patch immediately, the most effective compensating control is to eliminate the ambiguous overlap: avoid configuring a permissive parent-zone transfer stanza alongside a stricter subzone stanza, and instead scope transfer 'to' rules narrowly per zone so no parent rule is broader than any child rule (trade-off: more verbose, per-zone Corefile stanzas). Additionally restrict who can reach the transfer service at the network layer - firewall TCP/53 (and any DoT/DoH/QUIC/gRPC transfer transports) to only the specific secondary/replica IPs that legitimately need AXFR/IXFR, and where possible require TSIG on transfers (note v1.14.3 also expands TSIG verification across DoH/DoH3/QUIC/gRPC). These network and TSIG controls limit exposure but do not fix the underlying ACL-selection bug, so patching remains the primary action. Advisory: https://github.com/coredns/coredns/security/advisories/GHSA-h8mm-c463-wjq3.

Vendor StatusVendor

SUSE

Severity: High
Product Status
openSUSE Leap 16.0 Fixed

Share

CVE-2026-33489 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy