A resource-exhaustion flaw in a hobbyist-favorite DNS server that crashes the daemon when poked the right way
CVE-2026-36478 is a CWE-400 *uncontrolled resource consumption* bug in Technitium DNS Server v14.3 and earlier, residing in DnsServerApp.exe, DnsServerApp.dll, and TechnitiumLibrary.Net/Dns/DnsClient.cs. A remote attacker sends crafted DNS traffic that drives CPU/memory/socket exhaustion, knocking the resolver process over. No authentication, no user interaction — just network reachability to UDP/53 or TCP/53. Fixed in v15 (released April 2026).
Vendor severity of HIGH 7.5 is technically defensible under CVSS3.1 — pure availability impact, network-reachable, no auth. But CVSS over-weights every internet-reachable DoS. Reality check: Technitium is a niche self-hosted resolver (homelabs, small ISPs, privacy enthusiasts), not Knot/BIND/Unbound at carrier scale. For an enterprise fleet, the realistic blast radius is one or two boxes losing DNS until the watchdog restarts them. MEDIUM is the honest call.
4 steps from start to impact.
Locate a reachable Technitium resolver
- Network reachability to UDP/53 or TCP/53
- Target running Technitium ≤ v14.3
- Most enterprises run BIND/Unbound/Windows DNS, not Technitium
- Public-facing recursive resolvers are firewalled or rate-limited at the perimeter
http.title:"Technitium DNS" returns the exposed surface; internal exposure invisible to external scanners.Craft the malformed/abusive query stream
DnsClient.cs, the bug likely lives in recursive-client handling — malformed responses or amplification loops from attacker-controlled authoritative servers. PoC tooling would be a custom Python dnspython script or scapy packet generator. No public PoC has surfaced as of 2026-06-30.- Ability to send arbitrary DNS payloads
- Optionally: control of an authoritative nameserver to feed poisoned responses back
- Crafted payload details not yet public — exploitation requires reversing the v14.3 → v15 diff
- Egress filtering on outbound DNS limits poisoned-response paths
Trigger resource exhaustion
DnsServerApp daemon hangs or crashes. Systemd/Windows service manager may auto-restart, but during the restart window the resolver is offline.- Sustained query volume from attacker
- No upstream rate-limit / RRL
- Response Rate Limiting and per-source query caps blunt the flood
- Anycast or HA pairs mask single-node failure
Sustain the outage
hping3 / custom socket sender — no named exploit released.- Attacker bandwidth budget
- No effective filtering between source and resolver
- Most environments have ≥2 resolvers; clients silently fail over
- Cloud DNS (Route53, Cloudflare, Google 8.8.8.8) typically configured as secondary
The supporting signals.
| In-the-wild exploitation | None observed as of 2026-06-30. No vendor IR notes, no GreyNoise tag, no public incident reports. |
|---|---|
| Proof-of-concept | No public PoC. CVE published 2026-06-26 by MITRE; reporter unattributed in the public record. |
| EPSS | 0.00409 — bottom-quartile exploitation likelihood over next 30 days. |
| KEV | Not listed. CISA has not added this CVE to the Known Exploited Vulnerabilities catalog. |
| CVSS 3.1 vector | AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H — network, no auth, *availability-only impact*. Translation: it's a DoS, not RCE. |
| Affected versions | Technitium DNS Server ≤ v14.3, including the v14.x line. |
| Fixed version | v15.0 (blog post April 2026). Upgrade is in-place via the standard installer. |
| Exposure footprint | Shodan/Censys queries on the Technitium admin banner show a few thousand exposed installs globally — overwhelmingly homelabs and small VPS deployments, not enterprise fleets. |
| Disclosure | Reserved 2026-04-06, published 2026-06-26 by MITRE. CWE-400 Uncontrolled Resource Consumption. |
| Reporter | Not attributed in MITRE record; vendor changelog credits internal review for v15 hardening work. |
noisgate verdict.
The single most decisive factor is availability-only impact on a niche resolver with no high-value-role variant — there is no confidentiality/integrity exposure, no auth bypass, no fleet pivot, just a process that needs restarting. Technitium is not deployed in carrier-grade, AD-integrated, or identity-critical roles in any meaningful enterprise count, so even the worst plausible blast radius is one host losing DNS until watchdog recovery.
Why this verdict
- Availability-only: CVSS
C:N/I:N/A:H— no data theft, no code execution, no privilege escalation. Restart restores service. - Niche product: Technitium ranks well below BIND, Unbound, Windows DNS, and PowerDNS in enterprise installed base. The affected population in most Fortune 2000 fleets is zero or rounding error.
- No public PoC, no KEV, EPSS 0.41%: zero indicators of imminent mass exploitation.
- Role multiplier: Even in the high-value resolver role, the chain ends in *resolver unavailability* — not domain takeover, not cache poisoning, not RCE. Floor stays at MEDIUM because no documented variant escalates beyond DoS.
- Friction: Most deployments have a secondary resolver configured; failover masks single-node outage.
Why not higher?
HIGH (vendor's call) over-indexes on the AV:N/PR:N/AC:L surface and ignores deployment reality — Technitium is not in critical infrastructure rotations, and the impact ceiling is service restart, not breach. Without RCE, cache poisoning, or auth bypass, this doesn't clear the HIGH bar in operational terms.
Why not lower?
LOW would be wrong because the bug is genuinely unauthenticated and network-reachable, and for the operators who *do* run Technitium as their primary resolver, an outage hits user-visible browsing/email. The 365-day backlog window applies, but this isn't pure documentation-only hygiene.
What to do — in priority order.
- Inventory for Technitium installs — Run an internal scan for the Technitium admin banner on TCP/5380 and version.bind CHAOS queries against your DNS estate. If you find zero installs (the likely outcome), document and close — no mitigation SLA applies under MEDIUM.
- Upgrade to v15 where present — Run the in-place v15 installer on any Technitium host found. No mitigation SLA per noisgate MEDIUM bucket — fold into the 365-day remediation window unless the box is your primary resolver, in which case schedule within the next change window.
- Restrict DNS service surface — If Technitium must remain, firewall UDP/53 and TCP/53 to known client ranges only; never expose recursive DNS to the public internet. Enable Response Rate Limiting in the Technitium settings panel.
- Add resolver redundancy — Configure every endpoint with a secondary resolver (cloud DNS or a second internal box on a different stack — e.g., Unbound) so single-process DoS does not cause user-visible outage.
- WAF / reverse proxy — DNS is UDP/53, not HTTP; web-layer controls are irrelevant.
- EDR / antivirus signatures — no malicious binary lands on disk; this is a protocol-level resource exhaustion.
- DNSSEC — protects response integrity, not server availability against malformed-query floods.
- MFA on the admin panel — does nothing for the unauthenticated DNS port pathway.
Crowdsourced verification payload.
Run on each Linux host suspected of running Technitium DNS Server, or against a remote target you administer. Invoke as sudo ./check-technitium.sh [optional-host] — defaults to localhost. Requires dig and either local filesystem access or admin-panel reachability on TCP/5380.
#!/usr/bin/env bash
# noisgate verification — CVE-2026-36478 (Technitium DNS Server ≤ v14.3)
# Output: VULNERABLE / PATCHED / UNKNOWN
set -u
TARGET="${1:-127.0.0.1}"
FIXED_MAJOR=15
detect_version() {
# Try the admin API banner first
if command -v curl >/dev/null 2>&1; then
ver=$(curl -s --max-time 5 "http://${TARGET}:5380/api/user/session/get" 2>/dev/null \
| grep -oE '"version":"[0-9.]+"' | head -n1 | cut -d'"' -f4)
[ -n "${ver:-}" ] && { echo "$ver"; return 0; }
fi
# Fallback: local install dir
for p in /opt/technitium/dns /etc/dns; do
if [ -f "$p/config/version.txt" ]; then
cat "$p/config/version.txt"; return 0
fi
done
# Fallback: CHAOS query
if command -v dig >/dev/null 2>&1; then
v=$(dig @"$TARGET" version.bind CHAOS TXT +short +time=3 +tries=1 2>/dev/null | tr -d '"')
[ -n "$v" ] && { echo "$v"; return 0; }
fi
return 1
}
VER=$(detect_version) || { echo "UNKNOWN — Technitium not detected on ${TARGET}"; exit 2; }
MAJOR=$(echo "$VER" | cut -d. -f1)
if ! [[ "$MAJOR" =~ ^[0-9]+$ ]]; then
echo "UNKNOWN — could not parse version string: $VER"
exit 2
fi
if [ "$MAJOR" -lt "$FIXED_MAJOR" ]; then
echo "VULNERABLE — Technitium DNS Server v${VER} (≤ 14.3 affected; fix in v15+)"
exit 1
else
echo "PATCHED — Technitium DNS Server v${VER}"
exit 0
fi
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.