Skip to main content

CoreDNS CVE-2026-62994

| EUVDEUVD-2026-45018 LOW
Uncaught Exception (CWE-248)
2026-07-16 GitHub_M GHSA-74w3-63xv-x9mv
3.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Identify CoreDNS instance with AXFR permitted
  2. Delivery
    Confirm k8s_external plugin active on target zone
  3. Exploit
    Craft AXFR DNS request for that zone
  4. Install
    Empty record batch generated from portless headless service
  5. C2
    Unchecked records[0] index panics Go runtime
  6. Execute
    CoreDNS process crashes
  7. Impact
    Kubernetes cluster DNS unavailable until pod restart

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
Exploitation Conditions

Three conditions must simultaneously hold: (1) CoreDNS must be configured with the k8s_external plugin specifically handling headless-service zone transfers - this is a non-default, operator-configured deployment mode; (2) the Kubernetes cluster must contain at least one headless service endpoint with no declared ports, which causes plugin/kubernetes/object/endpoint.go to generate Port: -1 internally; and (3) the attacker must have AXFR access permitted by the CoreDNS transfer plugin ACL from their network location - AXFR is not open by default and typically restricted to trusted secondaries. Exploitation is limited by: the AXFR ACL requirement (eliminates unauthenticated internet-facing exploitation in default configurations), the k8s_external plugin not being universally deployed, and the requirement for a specific Kubernetes resource state. Standard A, AAAA, and SRV queries do not traverse this code path.

Impact

The official CVSS 3.1 score of 3.7 (Low) with vector AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L accurately reflects a remotely triggerable but conditionally gated denial of service. AC:H captures the multi-condition prerequisite: k8s_external must be deployed, a portless headless service must exist in Kubernetes, and AXFR must be permitted from the attacker's source. EPSS data is absent from the input and cannot be assessed. CoreDNS is not listed in CISA KEV and no public exploit code has been identified, though the fix commit and advisory are publicly accessible. Despite the low base score, operational impact in a Kubernetes cluster is disproportionate - a CoreDNS panic disrupts all pod-to-pod DNS resolution until the process is restarted. Environments running k8s_external with any portless headless service should treat this as an elevated operational risk relative to the CVSS score alone. Environments not using the k8s_external plugin are not affected regardless of CoreDNS version.

Exploit ScenarioDerived

A network client permitted to send AXFR requests to a CoreDNS instance sends a zone transfer request for a zone managed by the k8s_external plugin. If the Kubernetes cluster contains any headless service with no declared ports - even an unused or test service - the transfer plugin encounters an empty DNS record batch and panics on the unchecked records[0] access, immediately crashing the CoreDNS process. In a Kubernetes cluster, this causes all pod DNS resolution to fail until Kubernetes restarts the CoreDNS pod.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Jul 16, 2026

Unhandled Go runtime panic in CoreDNS 1.9.4 through 1.14.4 allows a network-reachable DNS client with AXFR permission to crash the CoreDNS process via a zone transfer request, causing a denial of service against cluster DNS. The crash path is triggered only when the k8s_external plugin is configured for headless-service zone transfers and Kubernetes contains a headless service with no declared ports - a condition that causes an empty record batch to be forwarded to plugin/transfer/transfer.go, where an unchecked index access (records[0]) panics the Go runtime. No public exploit identified at time of analysis; the vendor fix is confirmed in v1.14.5.

RemediationAI

Upgrade CoreDNS to version 1.14.5, confirmed fixed per the vendor release at https://github.com/coredns/coredns/releases/tag/v1.14.5 and fix commit ab318db7b4a3a19273852ed627f54888198c8efb. If immediate upgrade is not possible, two compensating controls exist: (1) Restrict AXFR permissions in the CoreDNS transfer plugin configuration to only trusted sources - this removes the external attack surface but may break legitimate zone-transfer consumers such as secondary DNS servers or monitoring tools; (2) Audit Kubernetes headless services and ensure all declare at least one port - this eliminates the triggering Kubernetes state but cannot be enforced reliably in dynamic environments where new workloads may introduce portless services. The upstream fix PR is at https://github.com/coredns/coredns/pull/8207.

Affected VersionsENISA

coredns 1.9.4, < 1.14.5

Affected Packages

go github.com/coredns/coredns fix: 1.14.5
euvd coredns_1_9_4 fix: 1.14.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in go, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

CoreDNS is a Go-based DNS server that serves as the default cluster DNS in most Kubernetes deployments. The vulnerability arises from a missing bounds check across three plugin layers: plugin/kubernetes/object/endpoint.go synthesizes Port: -1 for Kubernetes headless service endpoints that declare no ports; plugin/k8s_external/msg_to_dns.go skips such services during DNS record construction, emitting an empty []dns.RR slice into the transfer channel; plugin/k8s_external/transfer.go forwards that empty batch without sanitization; and plugin/transfer/transfer.go dereferences records[0] before verifying the slice is non-empty, triggering a Go index-out-of-bounds panic. CWE-248 (Uncaught Exception) is the root cause class - the runtime panic is unrecovered. The fix (PR #8207, commit ab318db) inserts a single guard (if len(records) == 0 { continue }) at the indexing site. Affected CPE: cpe:2.3:a:coredns:coredns:*:*:*:*:*:*:*:* versions 1.9.4 through 1.14.4.

Know when Coredns gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 3.7 LOW
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
vuln.today AI 3.7 LOW

AXFR request is network-delivered with no auth, AC:H reflects multi-condition prerequisite; A:L as Kubernetes restarts CoreDNS pod; no confidentiality or integrity impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
Low

Lifecycle Timeline

2
Patch available
Jul 16, 2026 - 22:19 EUVD
CVE Published
Jul 16, 2026 - 19:39 cve.org
LOW 3.7

DescriptionCVE.org

CoreDNS is a DNS server written in Go. From 1.9.4 until 1.14.5, a network DNS client allowed to request AXFR for a CoreDNS zone can trigger a panic when CoreDNS is configured with k8s_external headless-service zone transfers and Kubernetes contains a headless service endpoint with no declared ports; plugin/kubernetes/object/endpoint.go creates Port: -1, plugin/k8s_external/msg_to_dns.go skips that service, plugin/k8s_external/transfer.go sends an empty []dns.RR batch, and plugin/transfer/transfer.go indexes records[0] without checking the batch is non-empty. This issue is fixed in version 1.14.5.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
High
default cluster DNS in most Kubernetes deployments worldwide
Threat Intel
1
1 sources
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

18
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +18
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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