← Back to Feed CACHED · 2026-07-10 09:13:52 · CACHE_KEY tenable:71783
tenable:71783 · CWE-406 · Disclosed 2013-12-30

Network Time Protocol Daemon

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

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.

"Vendor called it MEDIUM. It's an unauthenticated, internet-facing UDP amplifier with EPSS at the 99th percentile. Fix it."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover exposed ntpd on UDP/123

Attacker mass-scans the internet for hosts responding to NTP mode 7 control queries. Shodan, Censys, and criminal amplification-list marketplaces maintain live indexes of vulnerable reflectors. No credentials, no session, no TCP handshake required — pure stateless UDP.
Conditions required:
  • ntpd bound to a public interface on UDP/123
  • no ingress filter blocking mode 6/7 queries
Where this breaks in practice:
  • Modern cloud provider default security groups block UDP/123 inbound
  • Enterprises rarely need to serve public NTP — only ISPs, universities, pool.ntp.org contributors
Detection/coverage: Tenable 71783, Qualys 38521, OpenVAS 1.3.6.1.4.1.25623.1.0.103652, Shodan port:123 monlist.
STEP 02

Probe monlist support

Attacker sends a single 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).
Conditions required:
  • ntpd < 4.2.7p26
  • disable monitor NOT set in ntp.conf
  • restrict default noquery NOT set
Where this breaks in practice:
  • Patched ntpd (4.2.7p26+) silently drops the request
  • Hardened ntp.conf with noquery on default restrict returns nothing
Detection/coverage: Zeek ntp.log, Suricata SID 2017919, Snort SID 30015.
STEP 03

Spoof victim source IP, floor the accelerator

Attacker sends forged UDP packets with the DDoS target's IP as source to thousands of confirmed reflectors simultaneously. Tools: saddam, ntpdos.py, UFOnet, and commodity booter/stresser services. Each 234-byte request generates up to 100 KB of response traffic sent to the victim.
Conditions required:
  • Upstream network permits egress with spoofed source IPs (no BCP38 / uRPF)
  • Fleet of controlled bots or hosting with lax egress
Where this breaks in practice:
  • ISPs with BCP38/uRPF filter spoofed egress at the edge — but adoption is still incomplete
  • Reflector's uplink saturates before it damages the victim
Detection/coverage: NetFlow anomaly on UDP/123 asymmetric byte ratio, upstream carrier scrubbing.
STEP 04

Victim uplink saturates; you're named in the abuse report

The attack floods the victim with gigabits of NTP responses. Your organization's IP shows up in the target's tcpdump, abuse ticket, and threat-intel blocklists. Real consequences: Spamhaus DROP listings, Cloudflare/AWS abuse notices, upstream ISP null-routing your prefix, contractual violation of hosting AUP.
Conditions required:
  • Sustained attack duration long enough to trigger victim's abuse desk
Where this breaks in practice:
  • None — this is the end state, not a barrier
Detection/coverage: Outbound NTP traffic volume alarms, ISP AbuseIX/AbuseHUB notifications.
03 · Intelligence Metadata

The supporting signals.

CVECVE-2013-5211
In-the-wild statusActively 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 availabilityMetasploit auxiliary/scanner/ntp/ntp_monlist, ntpdc -c monlist, saddam.py, nmap --script ntp-monlist, exploit-db 33073
CVSSCVSSv2 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)
Affectedntp.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 versionsntp 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 dataShodan 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
Disclosed2013-12-30 (US-CERT VU#348126); CISA alert TA14-013A on 2014-01-13
CreditUS-CERT / CERT/CC; NTP.org Bug 1532
04 · The Call

noisgate verdict.

Final Verdict
UPGRADED to HIGH (7.5/10)

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.

HIGH vulnerability identification and patch availability
HIGH exploitation is trivial and public
MEDIUM installed-base exposure inside a given enterprise (depends on how many ntpd hosts face the internet)

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.

05 · Compensating Control

What to do — in priority order.

  1. Add 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.
  2. Restrict default access: 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.
  3. 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).
  4. Migrate to 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.
  5. 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.
What doesn't work
  • 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; the disable monitor line is authoritative
  • Egress filtering on your side — this is a reflection attack; the malicious traffic *originates* from your ntpd as legitimate NTP responses
06 · Verification

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.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/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
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: pull the Tenable 71783 host list, cross-reference against your public IP inventory, and treat every internet-facing hit as urgent. Ship the 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

  1. Tenable Plugin 71783
  2. CISA TA14-013A: NTP Amplification Attacks
  3. NVD CVE-2013-5211
  4. Tenable CVE-2013-5211
  5. Red Hat CVE-2013-5211
  6. Juniper Junos SB 2014-07
  7. VulDB / NTP Bug 1532
  8. US-CERT VU#348126
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.