Blob Blame History Raw
diff -up ntpsec-1.2.1/libntp/authreadkeys.c.weakkeys ntpsec-1.2.1/libntp/authreadkeys.c
--- ntpsec-1.2.1/libntp/authreadkeys.c.weakkeys	2021-06-07 06:03:11.000000000 +0200
+++ ntpsec-1.2.1/libntp/authreadkeys.c	2021-06-17 12:19:41.555693047 +0200
@@ -249,6 +249,7 @@ authreadkeys(
 	char	namebuf[NAMEBUFSIZE];
 	size_t	len;
 	int	keys = 0;
+	char *	hashchr = NULL;
 
 	/*
 	 * Open file.  Complain and return if it can't be opened.
@@ -348,7 +349,7 @@ msyslog(LOG_ERR, "AUTH: authreadkeys: re
                         continue;
                 }
 
-
+		hashchr = strchr(line, '#');
 
 		/*
 		 * Finally, get key and insert it.
@@ -364,6 +365,15 @@ msyslog(LOG_ERR, "AUTH: authreadkeys: re
 		}
 		len = strlen(token);
 		if (len <= 20) {	/* Bug 2537 */
+			/* Detect weak keys generated by ntpkeygen
+			   (CVE-2021-22212). False positives are possible. */
+			if (token + len == hashchr) {
+				msyslog(LOG_ERR,
+					"AUTH: authreadkeys: key %u is followed by '#' (CVE-2021-22212)",
+					keyno);
+				exit(1);
+			}
+
 			len = check_key_length(keyno, type, name, upcased, len);
 			check_mac_length(keyno, type, name, upcased);
 			auth_setkey(keyno, type, name, (uint8_t *)token, len);