+---
+* [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS <perlinger@ntp.org>
+ - applied fix as suggested by Matthew Van Gundy
+
---
(4.2.8p8) 2016/06/02 Released by Harlan Stenn <stenn@ntp.org>
* Statistic counters
*/
u_long timereset; /* time stat counters were reset */
- u_long timelastrec; /* last packet received time */
+ u_long timelastrec; /* last packet received time, incl. trash */
u_long timereceived; /* last (clean) packet received time */
u_long timereachable; /* last reachable/unreachable time */
++bail;
}
- /* too early? worth an error, too! */
+ /* too early? worth an error, too!
+ *
+ * [Bug 3113] Ensure that at least one poll
+ * interval has elapsed since the last **clean**
+ * packet was received. We limit the check to
+ * **clean** packets to prevent replayed packets
+ * and incorrectly authenticated packets, which
+ * we'll discard, from being used to create a
+ * denial of service condition.
+ */
deadband = (1u << pkt->ppoll);
if (FLAG_BC_VOL & peer->flags)
deadband -= 3; /* allow greater fuzz after volley */
- if ((current_time - peer->timelastrec) < deadband) {
+ if ((current_time - peer->timereceived) < deadband) {
msyslog(LOG_INFO, "receive: broadcast packet from %s arrived after %lu, not %lu seconds!",
stoa(&rbufp->recv_srcadr),
- (current_time - peer->timelastrec),
+ (current_time - peer->timereceived),
deadband);
++bail;
}