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
disable monitor to /etc/ntp.conf and 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 kod nomodify notrap nopeer noquery and restrict -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 explicit restrict lines for your peer sources. Deploy alongside the disable monitor change.chrony where possible — chrony has never implemented monlist and defaults to cmdallow restricted to localhost. RHEL 7+ ships chrony by default. Long-term hygiene, not urgent.- 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
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 |
Sources.
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.
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