summaryrefslogtreecommitdiff
path: root/networking/ntpd.c
diff options
context:
space:
mode:
authorMiroslav Lichvar2016-08-01 20:24:24 +0200
committerDenys Vlasenko2016-08-01 20:25:06 +0200
commit150dc7a2b483b8338a3e185c478b4b23ee884e71 (patch)
tree623634cfafbb14f5b46f89b8cf63167cdef66bdd /networking/ntpd.c
parent6b5abc95969caf270d269ae640bb64e6bf8a7996 (diff)
downloadbusybox-150dc7a2b483b8338a3e185c478b4b23ee884e71.zip
busybox-150dc7a2b483b8338a3e185c478b4b23ee884e71.tar.gz
ntpd: respond only to client and symmetric active packets
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>
Diffstat (limited to 'networking/ntpd.c')
-rw-r--r--networking/ntpd.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/networking/ntpd.c b/networking/ntpd.c
index 130cef0..8ca62cf 100644
--- a/networking/ntpd.c
+++ b/networking/ntpd.c
@@ -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;