Version 1.2.5
The NTPsec Project is pleased to announce the tagging of version 1.2.5
Note: Python 2 and OpenSSL 1.1.0 support will be removed in the next release.
-
A new
ntskelogstatistic file has been added to the stats file collection. NTS-KE transactions are now routed here to reduce clutter in the main system log. -
Link-Time Optimization (LTO) is now enabled by default on Linux and FreeBSD when
--disable-debug-gdbis configured. It remains disabled on NetBSD due to upstream toolchain breakages. -
The
poolconfiguration command now natively supports thentssecurity flag (pool <server> nts). -
The server counting logic for
maxclock(tos maxclock) has been corrected to skip dynamicPOOLslots as well as any remote servers configured with thenoselectflag. -
The HPGPS reference clock driver received a major update, featuring a new configuration option for listen mode, a fix for the Z3801A GPS Week Number Rollover (WNRO) glitch, the removal of the raw
scpi >string fromclockstats, and the addition of several new internal tracking variables toclockstats.
Security Fixes:
-
Fixed a buffer overflow in the Zyfer reference clock driver that could occur when processing continuation chunks (CVE-2026-18321).
-
Fixed a NULL-pointer dereference crash in the NTS-KE client when
SSL_new()fails. -
ntpdnow uses a cryptographically strong RNG instead of the weak libcrandom()for association IDs, poll-time dispersal, and mode6 response padding. -
Fixed an off-by-one boundary error in
ntp_RAND_bytes()that could cause an out-of-bounds read. -
Fixed an out-of-bounds read in NTS client extension parsing caused by unchecked nonce/ciphertext lengths.
-
Fixed NTS pool peers losing their NTS-KE hostname and NTS configuration on cookie renewal, which caused certificate validation to run against the peer’s bare IP address instead of its configured hostname.
Administrative and Scripting Changes:
-
The
ntpleapfetchtool has been hardened with parameter quoting to prevent potential shell execution vulnerabilities. -
The statistics directory argument (
-s PATH) has been fixed and its default behavior adjusted. -
ntpdnow explicitly logs a syslog entry when searching for supplemental configuration files inside/etc/ntpsec/ntp.d. -
ntpdnow logs an explicit message when extra pool servers are actively dropped. -
ntpleapfetchnow correctly parses theleapfiledirective with quoted paths and tab/space-delimited values (NTPsec/ntpsec#883). -
waf has been upgraded to 2.1.9, fixing a bug where
libntpc.sowas installed to the default library path instead of the location given via--libdir(NTPsec/ntpsec#870). -
Added missing i386 time64 and mDNS/DNS-SD syscalls to the seccomp sandbox allow-list, fixing potential sandbox kills on i386 and mDNS-enabled builds.
-
Added missing
clock_nanosleep,readlink, andreadlinkatsyscalls to the AMD64 seccomp sandbox allow-list, fixing SIGSYS crashes.
NTS and NTS-KE Fixes:
-
NTS-KE requests and responses split across multiple TCP/TLS reads are now correctly reassembled instead of failing on the first partial chunk (NTPsec/ntpsec#858).
-
Fixed the NTS client failing to reset cookie length when switching to a new cookie length from a key-exchange response (NTPsec/ntpsec#877).
-
The NTS-KE client now sets the TLS SNI field during the handshake, improving compatibility with name-based TLS proxies and load balancers.
-
Fixed NTS-KE hostname parsing to strip brackets from IPv6 literal addresses before certificate hostname validation.
-
Fixed an NTS-KE response containing more cookies than the client can store being misparsed and the entire response rejected, instead of just discarding the extras.
-
Fixed an NTS-KE connection that completes synchronously (rather than asynchronously) being wrongly treated as a connection failure.
-
NTS-KE certificate hostname/IP validation now uses the non-deprecated OpenSSL 4.0 APIs (
SSL_set1_ipaddr/SSL_set1_dnsname). -
The NTS-KE client no longer rejects a server response solely for an unrecognized non-critical record type.
-
ntpdnow validates theaeadparameter in both per-server and global NTS configuration and logs an error instead of silently accepting an invalid value (NTPsec/ntpsec#880). -
NTS-KE client logging has been improved to emit one detailed message per connection attempt; the client now parses bracketed IPv6 literal addresses, applies a send timeout in addition to the existing receive timeout, and skips already-tried addresses from multi-homed NTS-KE servers.
-
Fixed a bug where a failed DNS-lookup thread creation or join could leave a peer’s DNS/NTS resolution permanently stuck, blocking further lookups.
Bug Fixes and Protocol Refinements:
-
Fixed a critical issue where NTPsec failed to declare itself out of sync under specific error and drift conditions.
-
Fixed a state machine bug (NTPsec/ntpsec#848) where the
STA_UNSYNCflag was prematurely cleared at system startup. -
Fixed an interactive interface crash in
ntpmontriggered by hitting the minus (-) key. -
Added native
.webpimage encoding support to thentpvizgraphing tool. -
Fixed
ntpdsilently ignoring mode 1 (symmetric active) requests, e.g. from Windows clients; they are now answered like ordinary client requests. -
Fixed a regression where
ntpdfailed to clear peer state on interface change, delaying resynchronization after network changes. -
Fixed NTP extension-field parsing to stop treating unrecognized non-critical fields as fatal; they are now ignored instead of causing packet rejection.
-
socktoa()no longer formatsAF_UNSPECaddresses as IPv4, correcting address display inntpqandntpmon. -
mode6 control protocol responses now omit peer addresses that are empty or otherwise unprintable instead of emitting malformed data.
-
Fixed
ntpdigto build a fresh request packet (timestamp/MAC) for each destination address tried, instead of resending the same packet. -
Fixed
ntpdigcrashing with an unhandledUnicodeErrorwhen a configured server name with non-ASCII characters fails DNS resolution. -
Fixed a crash in
ntpq’s interactive `noflakecommand (NTPsec/ntpsec#863). -
Fixed a crash (
NameError) inntpqunder Python 2 caused by referencing the Python-3-onlyBrokenPipeError. -
Fixed a crash in
ntpqandntpmonwhen a peer’s source address is empty, e.g. NXDOMAIN or a POOL association. -
sys_var_listis no longer marked as a default variable, so it is excluded fromntpq’s default `rv(readvar) output.
Removed:
-
Removed the undocumented
-s/--srcnameand-S/--srcnumberdisplay options, and thehostname/hostnumarguments to ntpq’shostnamescommand, fromntpqandntpmon. This shipped in 1.2.4 but was never documented in NEWS and has now been fully reverted.
For other changes since the previous release, please consult the project NEWS.adoc file at https://gitlab.com/NTPsec/ntpsec/-/blob/master/NEWS.adoc
Getting this release
You can clone the git repo from https://gitlab.com/NTPsec/ntpsec.git and you can download the release tarballs with sums and signatures from https://ftp.ntpsec.org/pub/releases/
This release is signed with the GPG key id E57235D22764129FA4F2F4D17F52608ED0E49D76