CVE-2026-33190: CoreDNS TSIG authentication bypass on encrypted DNS transports

Published Apr 28, 2026
·
Updated

Summary CoreDNS' tsig plugin can be bypassed on non-plain-DNS transports because it trusts the transport writer's TsigStatus() instead of performing verification itself. In the attached PoC, plain DNS/TCP correctly rejects an invalid TSIG (NOTAUTH), while the same invalid-TSIG request is accepted over DoT (tls://) and DoH (https://), allowing a client without the shared secret to satisfy require all. The same bug class affects DoH3, DoQ, and gRPC.

Details The tsig plugin decides whether an incoming TSIG was valid by consulting w.TsigStatus(): tsigStatus := w.TsigStatus(); if tsigStatus != nil { ... NOTAUTH ... } (plugin/tsig/tsig.go)

Two affected transports are shown directly in the PoC: - DoH: DoHWriter.TsigStatus() always returns nil (core/dnsserver/https.go), and the HTTP server passes unpacked DNS messages directly into the plugin chain. - DoT: the TLS server builds a dns.Server without setting TsigSecret (core/dnsserver/servertls.go), unlike plain DNS/TCP/UDP which sets TsigSecret: s.tsigSecret (core/dnsserver/server.go).

The same transport-family bug pattern also appears on other transports: - DoH3 reuses the DoH writer path (core/dnsserver/serverhttps3.go -> core/dnsserver/https.go), so it inherits the same TsigStatus() == nil behavior. - DoQ uses DoQWriter.TsigStatus() error { return nil } (core/dnsserver/quic.go). - gRPC uses gRPCresponse.TsigStatus() error { return nil } (core/dnsserver/servergrpc.go).

The attached PoC was kept deliberately small (baseline TCP+DoT+DoH only) for convenience.

PoC 1. Adjust COREDNSBIN in the PoC to point at right path (see the top-level const definitions for tunables as well) 2. Run python3 ./tsig-repro.py 3. Expected output: Start CoreDNS Corefile: /tmp/vh-f001-tsig-doh-dot-bypass/Corefile Log: /tmp/vh-f001-tsig-doh-dot-bypass/coredns.log

Baseline (plain TCP) notsig rcode=5 (expected REFUSED=5) invalidtsig rcode=9 (expected NOTAUTH=9)

Candidate (DoT) notsig rcode=5 (expected REFUSED=5) invalidtsig rcode=0 ancount=1 (expected NOERROR=0 and ancount>0)

Candidate (DoH) notsig http=200 rcode=5 (expected REFUSED=5) invalidtsig http=200 rcode=0 ancount=1 (expected NOERROR=0 and ancount>0)

OK TSIG bypass reproduced: plain TCP rejects invalid TSIG, while DoT and DoH accept it. Results: /tmp/vh-f001-tsig-doh-dot-bypass/results.json

Impact Unauthenticated remote clients can bypass TSIG-based authentication/authorization on first-class encrypted transports, enabling access to whatever the deployment intended to restrict behind tsig { require all } (e.g., zone data/privileged queries, etc.).

Other sources

CoreDNS is a DNS server that chains plugins. In versions prior to 1.14.3, the tsig plugin can be bypassed on non-plain-DNS transports (DoT, DoH, DoH3, DoQ, and gRPC) because it trusts the transport writer's TsigStatus() instead of performing verification itself. The DoH and DoH3 writer's TsigStatus() always returns nil, the DoT server does not set TsigSecret on the dns.Server, and the DoQ and gRPC writers also unconditionally return nil. This allows an unauthenticated remote client to bypass TSIG-based authentication and access resources intended to be restricted behind a tsig require all policy. Plain DNS over TCP and UDP are not affected. This issue has been fixed in version 1.14.3.

MITRE

CoreDNS TSIG authentication bypass on encrypted DNS transports

Microsoft

Affected Software

3 affected componentsFixes available
go/github.com/coredns/coredns<1.14.3
1.14.3
coredns.io CoreDNS<1.14.3
Microsoft azl3 coredns 1.11.4-15

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade go/github.com/coredns/coredns to a version that resolves this vulnerability.

    Fixed in 1.14.3
  2. Upgrade

    Upgrade coredns to a version that resolves this vulnerability.

    Fixed in 1.14.3
  3. Compensating control

    If you cannot upgrade to 1.14.3 immediately, restrict access to encrypted DNS transports (DoT tls:// and DoH https://; also DoH3, DoQ, and gRPC) at the network layer so that unauthenticated remote clients cannot reach the TSIG-protected zone/service endpoints.

Event History

Apr 28, 2026
Advisory Published
via GitHub·10:46 PM
Data Sourced
via GitHub·10:46 PM
DescriptionSeverityWeaknessAffected Software
May 5, 2026
CVE Published
via MITRE·07:02 PM
Data Sourced
via MITRE·07:02 PM
DescriptionWeakness
Data Sourced
via NVD·08:16 PM
DescriptionSeverityWeaknessAffected Software
May 7, 2026
Data Sourced
via Microsoft·08:02 AM
DescriptionSeverityWeakness
Data Sourced
via Microsoft·08:02 AM
Affected Software
Updated
via Microsoft·08:02 AM
DescriptionSeverity

Frequently Asked Questions

1

What is the severity of CVE-2026-33190?

CVE-2026-33190 is considered a medium severity vulnerability due to its potential to allow unauthorized access through TSIG bypass.

2

How do I fix CVE-2026-33190?

To fix CVE-2026-33190, upgrade to CoreDNS version 1.14.3 or later where the vulnerability is patched.

3

What systems are affected by CVE-2026-33190?

CVE-2026-33190 affects versions of CoreDNS prior to 1.14.3 that use the tsig plugin with non-plain-DNS transports.

4

What type of attack does CVE-2026-33190 enable?

CVE-2026-33190 could enable unauthorized DNS requests to be accepted, leading to potential data manipulation or spoofing.

5

Is the tsig plugin the only component affected by CVE-2026-33190?

Yes, the vulnerability specifically involves the tsig plugin in CoreDNS and its handling of transport writers' TsigStatus.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203