ntpd: respond only to client and symmetric active packets
authorMiroslav Lichvar <mlichvar@redhat.com>
Mon, 1 Aug 2016 18:24:24 +0000 (20:24 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 1 Aug 2016 18:25:06 +0000 (20:25 +0200)
The busybox NTP implementation doesn't check the NTP mode of packets
received on the server port and responds to any packet with the right
size. This includes responses from another NTP server. An attacker can
send a packet with a spoofed source address in order to create an
infinite loop of responses between two busybox NTP servers. Adding
more packets to the loop increases the traffic between the servers
until one of them has a fully loaded CPU and/or network.

Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
networking/ntpd.c

index 130cef0af0bfc30cd70dff85e04f47254ae4a8d6..8ca62cf1b13929c309d583596ab34a0ddaf40087 100644 (file)
@@ -2051,6 +2051,13 @@ recv_and_process_client_pkt(void /*int fd*/)
                goto bail;
        }
 
+       /* Respond only to client and symmetric active packets */
+       if ((msg.m_status & MODE_MASK) != MODE_CLIENT
+        && (msg.m_status & MODE_MASK) != MODE_SYM_ACT
+       ) {
+               goto bail;
+       }
+
        query_status = msg.m_status;
        query_xmttime = msg.m_xmttime;