You're not the DoS victim — you're the loaded gun pointed at someone else
The monlist (aka MON_GETLIST) command in ntpd returns the last 600 hosts that queried the service. Because the request is a small UDP packet and the response is dozens of full packets, an attacker who spoofs the source IP of a victim can point your NTP server at that victim and get a ~200x–500x bandwidth amplification. This affects ntp.org ntpd before 4.2.7p26 (which disabled monlist by default) — meaning every stock ntpd on RHEL/CentOS 5/6, older Debian/Ubuntu LTS, older Junos, older Cisco IOS with NTP enabled, embedded devices, and any appliance that hasn't been rebuilt since ~2014.
Tenable rates this MEDIUM based on CVSSv2=5.0 (Availability: Partial, no confidentiality or integrity impact to *your* host). That framing is wrong for enterprise defenders. The CVSSv3 rescore is 7.5 (HIGH) and CISA issued TA14-013A in January 2014 specifically because this bug fueled the largest DDoS attacks on record at the time (400+ Gbps against CloudFlare/Spamhaus). EPSS is ~0.92 (99th percentile) — it is actively, continuously scanned and abused. Vendor MEDIUM does not match reality.
4 steps from start to impact.
Discover exposed ntpd on UDP/123
- ntpd bound to a public interface on UDP/123
- no ingress filter blocking mode 6/7 queries
- Modern cloud provider default security groups block UDP/123 inbound
- Enterprises rarely need to serve public NTP — only ISPs, universities, pool.ntp.org contributors
port:123 monlist.Probe monlist support
ntpdc -c monlist <target> (or the equivalent raw mode 7 REQ_MON_GETLIST_1 packet crafted with Metasploit auxiliary/scanner/ntp/ntp_monlist or saddam.py). If the server replies with a list of prior peers, the reflector is confirmed viable. Amplification factor is measured (typically 200x–556x per US-CERT).- ntpd < 4.2.7p26
disable monitorNOT set in ntp.confrestrict default noqueryNOT set
- Patched ntpd (4.2.7p26+) silently drops the request
- Hardened ntp.conf with
noqueryon default restrict returns nothing
ntp.log, Suricata SID 2017919, Snort SID 30015.Spoof victim source IP, floor the accelerator
- Upstream network permits egress with spoofed source IPs (no BCP38 / uRPF)
- Fleet of controlled bots or hosting with lax egress
- ISPs with BCP38/uRPF filter spoofed egress at the edge — but adoption is still incomplete
- Reflector's uplink saturates before it damages the victim
Victim uplink saturates; you're named in the abuse report
- Sustained attack duration long enough to trigger victim's abuse desk
- None — this is the end state, not a barrier
The supporting signals.
| CVE | CVE-2013-5211 |
|---|---|
| In-the-wild status | Actively exploited since Dec 2013. Fueled the 400 Gbps Cloudflare DDoS (Feb 2014) and NTP-reflection campaigns tracked by Arbor/Netscout ATLAS through 2026. Not on CISA KEV (KEV requires evidence of exploitation *against* the vulnerable host; this bug weaponizes it against third parties). |
| EPSS | ~0.921 (99th percentile) — one of the most-scanned bugs in the FIRST dataset |
| PoC availability | Metasploit auxiliary/scanner/ntp/ntp_monlist, ntpdc -c monlist, saddam.py, nmap --script ntp-monlist, exploit-db 33073 |
| CVSS | CVSSv2 5.0 AV:N/AC:L/Au:N/C:N/I:N/A:P (vendor MEDIUM) — CVSSv3.0 7.5 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H (HIGH) |
| Affected | ntp.org ntpd < 4.2.7p26; RHEL/CentOS 5 & 6 ntp < 4.2.6p5-2, Junos before 2014-07 SB, older Cisco IOS, IP cameras, printers, NAS, embedded stacks |
| Fixed versions | ntp 4.2.7p26+ (monlist removed); RHEL ntp-4.2.6p5-2.el6_5 backport; Junos advisory 2014-07; Cisco ntp disable-auth + ACL; or simply disable monitor in ntp.conf |
| Exposure data | Shodan currently indexes ~1.3M ntpd instances on public IPv4; the OpenNTPProject.org scan (still-maintained legacy dataset) shows monlist-responsive hosts dropped from ~4.6M in 2014 to ~40k in 2026 — mostly embedded/legacy |
| Disclosed | 2013-12-30 (US-CERT VU#348126); CISA alert TA14-013A on 2014-01-13 |
| Credit | US-CERT / CERT/CC; NTP.org Bug 1532 |
noisgate verdict.
The single decisive factor is third-party liability at internet scale: an unauthenticated UDP packet turns your host into a 200x DDoS amplifier, an EPSS-99th-percentile probe target, and a name on abuse blocklists. The vendor's MEDIUM only counts DoS *against your host* — it ignores the harm your host does to everyone else and the outbound-abuse contractual/reputational risk that CVSSv3 correctly captures as HIGH.
Why this verdict
- Trivial exploitation, no auth, no chain: a single UDP packet is the entire attack. There is no friction stack to walk down.
- EPSS 0.921 / 99th percentile: this is one of the most-probed services on the internet. If you are exposed, you *are* being tested continuously.
- Role multiplier — NTP servers are typically member hosts, not fleet-critical: chain does NOT lead to domain compromise, data egress, or supply-chain pivot. Blast radius is *bandwidth abuse of your uplink* + *reputational damage of participating in someone else's DDoS*. That caps the verdict at HIGH — this is not CRITICAL floor territory (no identity, hypervisor, PKI, backup, or edge-appliance role).
- Friction audit: internet-facing exposure is the only prerequisite; internal ntpd hosts behind a firewall that blocks inbound UDP/123 are effectively unreachable and could be argued down to MEDIUM. But the plugin fires precisely because Tenable saw a response — so at scan time the host is reachable from the scanner's vantage.
Why not higher?
The bug never yields code execution, data disclosure, or credentials on your host. Your ntpd is a weapon, not a foothold. There is no lateral-movement or privilege-escalation vector, and NTP servers are not canonical identity/hypervisor/PAM/backup roles, so the CRITICAL floor does not apply.
Why not lower?
MEDIUM is what the vendor gave it and it's demonstrably wrong: CVSSv3 rescores at 7.5, EPSS is at the 99th percentile, CISA issued a nation-scale alert (TA14-013A), and the bug enables measurable financial and reputational third-party harm. Calling this MEDIUM tells patch teams it can wait — it can't.
What to do — in priority order.
- Add
disable monitorto/etc/ntp.confand restart ntpd — Kills the monlist feature at runtime without upgrading the package. Push via config management (Ansible/Puppet/Salt) as your first move — deploy within 30 days per the noisgate mitigation SLA for HIGH, but realistically you can ship this fleet-wide in one change window. - Restrict default access:
restrict default kod nomodify notrap nopeer noqueryandrestrict -6 default kod nomodify notrap nopeer noquery— Blocks all mode 6/7 control queries by default. Only NTP clients — not query tools — can talk to the daemon. Combine with explicitrestrictlines for your peer sources. Deploy alongside thedisable monitorchange. - Firewall UDP/123 inbound at the perimeter and cloud SG — The only legitimate inbound NTP-facing hosts are stratum-1/2 public providers. Everyone else should serve NTP *only* to internal ranges. Push an ingress deny rule on edge firewalls and cloud security groups within the noisgate HIGH mitigation window (≤ 30 days).
- Migrate to
chronywhere possible — chrony has never implemented monlist and defaults tocmdallowrestricted to localhost. RHEL 7+ ships chrony by default. Long-term hygiene, not urgent. - Enable BCP38/uRPF egress filtering with your ISP — Prevents spoofed source packets from reaching your reflector in the first place, and prevents your network from being used to spoof others. Independently valuable.
- Rate-limiting UDP/123 at the host — the amplification factor means even trickle traffic to the reflector produces damaging traffic to the victim
- IDS/IPS signatures alone — mode 7 packets look like legitimate NTP; blocking mid-stream is too late once the reflection is airborne
- Patching only the ntpd version without config change — some backports fix
read_mru_list()variants but leave monlist behavior configurable; thedisable monitorline is authoritative - Egress filtering on your side — this is a reflection attack; the malicious traffic *originates* from your ntpd as legitimate NTP responses
Crowdsourced verification payload.
Run from an auditor workstation (not the target host) so you're testing what the internet sees. Requires ntpdc (deprecated but present in most distros; install ntp package) or nmap. Invoke: ./check_ntp_monlist.sh 203.0.113.10. No privileges required.
#!/usr/bin/env bash
# noisgate: CVE-2013-5211 / Tenable 71783 monlist reflection check
# Usage: ./check_ntp_monlist.sh <target-ip-or-host>
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
set -u
TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
echo "Usage: $0 <target-ip-or-host>" >&2
exit 2
fi
# Method 1: ntpdc monlist (works even with modern OpenNTPD/legacy ntpd)
if command -v ntpdc >/dev/null 2>&1; then
RESP=$(timeout 5 ntpdc -n -c monlist "$TARGET" 2>&1)
if echo "$RESP" | grep -qiE 'remote address|client|mode'; then
echo "VULNERABLE: $TARGET responded to monlist with peer data"
echo "$RESP" | head -5
exit 1
fi
if echo "$RESP" | grep -qiE 'timed out|no server|Connection refused|not found'; then
:
else
# ntpdc responded but returned no rows - could be empty monlist (still vulnerable) or refused
if echo "$RESP" | grep -qiE 'authentication|access denied|no data'; then
echo "PATCHED: $TARGET refused monlist (access denied / disabled)"
exit 0
fi
fi
fi
# Method 2: nmap NSE fallback
if command -v nmap >/dev/null 2>&1; then
NRESP=$(timeout 15 nmap -sU -pU:123 -Pn --script=ntp-monlist "$TARGET" 2>&1)
if echo "$NRESP" | grep -qi 'Public Servers\|Other Associations\|ntp-monlist:'; then
if echo "$NRESP" | grep -A2 'ntp-monlist' | grep -qE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'; then
echo "VULNERABLE: $TARGET nmap ntp-monlist returned peer entries"
exit 1
fi
fi
if echo "$NRESP" | grep -qi '123/udp open'; then
echo "PATCHED (or hardened): UDP/123 open but monlist did not return peer data"
exit 0
fi
fi
echo "UNKNOWN: could not conclusively probe $TARGET (host unreachable, UDP/123 filtered, or tools missing)"
exit 2
If you remember one thing.
disable monitor + restrict default … noquery config change fleet-wide within ≤ 30 days per the noisgate mitigation SLA for HIGH — this is a one-line Ansible play, there is no excuse to slip it. Firewall UDP/123 inbound at the perimeter in the same window. Full package remediation (upgrade to a patched ntpd ≥ 4.2.7p26, or migrate to chrony) belongs in the standard change process with ≤ 180 days per the noisgate remediation SLA. Internal-only ntpd hosts unreachable from the internet can ride the 180-day track without the mitigation urgency. Do NOT let the vendor MEDIUM label push this into a 365-day backlog — EPSS 0.921 and CISA TA14-013A say otherwise.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.