From 7b3402b20731a7d1e916f5a13052aadbccbae4f3 Mon Sep 17 00:00:00 2001
From: Joe Testa <jtesta@positronsecurity.com>
Date: Fri, 15 Mar 2024 17:24:21 -0400
Subject: [PATCH] Added note that sntrup761x25519-sha512@openssh.com is the
 default OpenSSH kex since version 9.0.

---
 src/ssh_audit/ssh2_kexdb.py                              | 9 +++++----
 test/docker/expected_results/dropbear_2019.78_test1.json | 4 ++--
 test/docker/expected_results/dropbear_2019.78_test1.txt  | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test1.json    | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test1.txt     | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test2.json    | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test2.txt     | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test3.json    | 4 ++--
 test/docker/expected_results/openssh_8.0p1_test3.txt     | 4 ++--
 test/docker/expected_results/tinyssh_20190101_test1.json | 4 ++--
 test/docker/expected_results/tinyssh_20190101_test1.txt  | 4 ++--
 11 files changed, 25 insertions(+), 24 deletions(-)

diff --git a/src/ssh_audit/ssh2_kexdb.py b/src/ssh_audit/ssh2_kexdb.py
index 59fbfe5..94f628d 100644
--- a/src/ssh_audit/ssh2_kexdb.py
+++ b/src/ssh_audit/ssh2_kexdb.py
@@ -62,7 +62,8 @@ class SSH2_KexDB:  # pylint: disable=too-few-public-methods
     WARN_TAG_SIZE_96 = 'using small 96-bit tag size'
 
     INFO_DEFAULT_OPENSSH_CIPHER = 'default cipher since OpenSSH 6.9'
-    INFO_DEFAULT_OPENSSH_KEX = 'default key exchange since OpenSSH 6.4'
+    INFO_DEFAULT_OPENSSH_KEX_64_TO_89 = 'default key exchange from OpenSSH 6.4 to 8.9'
+    INFO_DEFAULT_OPENSSH_KEX_90 = 'default key exchange since OpenSSH 9.0'
     INFO_DEPRECATED_IN_OPENSSH88 = 'deprecated in OpenSSH 8.8: https://www.openssh.com/txt/release-8.8'
     INFO_DISABLED_IN_DBEAR67 = 'disabled in Dropbear SSH 2015.67'
     INFO_DISABLED_IN_OPENSSH70 = 'disabled in OpenSSH 7.0: https://www.openssh.com/txt/release-7.0'
@@ -81,8 +82,8 @@ class SSH2_KexDB:  # pylint: disable=too-few-public-methods
         # Format: 'algorithm_name': [['version_first_appeared_in'], [reason_for_failure1, reason_for_failure2, ...], [warning1, warning2, ...], [info1, info2, ...]]
         'kex': {
             'Curve25519SHA256': [[]],
-            'curve25519-sha256': [['7.4,d2018.76'], [], [], [INFO_DEFAULT_OPENSSH_KEX]],
-            'curve25519-sha256@libssh.org': [['6.4,d2013.62,l10.6.0'], [], [], [INFO_DEFAULT_OPENSSH_KEX]],
+            'curve25519-sha256': [['7.4,d2018.76'], [], [], [INFO_DEFAULT_OPENSSH_KEX_64_TO_89]],
+            'curve25519-sha256@libssh.org': [['6.4,d2013.62,l10.6.0'], [], [], [INFO_DEFAULT_OPENSSH_KEX_64_TO_89]],
             'curve448-sha512': [[]],
             'curve448-sha512@libssh.org': [[]],
             'diffie-hellman-group14-sha1': [['3.9,d0.53,l10.6.0'], [FAIL_SHA1], [WARN_2048BIT_MODULUS]],
@@ -191,7 +192,7 @@ class SSH2_KexDB:  # pylint: disable=too-few-public-methods
             'rsa2048-sha256': [[], [], [WARN_2048BIT_MODULUS]],
             'sm2kep-sha2-nistp256': [[], [FAIL_NSA_BACKDOORED_CURVE, FAIL_UNTRUSTED]],
             'sntrup4591761x25519-sha512@tinyssh.org': [['8.0', '8.4'], [], [WARN_EXPERIMENTAL], [INFO_WITHDRAWN_PQ_ALG]],
-            'sntrup761x25519-sha512@openssh.com': [['8.5'], [], []],
+            'sntrup761x25519-sha512@openssh.com': [['8.5'], [], [], [INFO_DEFAULT_OPENSSH_KEX_90]],
             'x25519-kyber-512r3-sha256-d00@amazon.com': [[]],
             'x25519-kyber512-sha512@aws.amazon.com': [[]],
         },
diff --git a/test/docker/expected_results/dropbear_2019.78_test1.json b/test/docker/expected_results/dropbear_2019.78_test1.json
index 55dd8b6..04d410a 100644
--- a/test/docker/expected_results/dropbear_2019.78_test1.json
+++ b/test/docker/expected_results/dropbear_2019.78_test1.json
@@ -96,7 +96,7 @@
             "algorithm": "curve25519-sha256",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 7.4, Dropbear SSH 2018.76"
                 ]
             }
@@ -105,7 +105,7 @@
             "algorithm": "curve25519-sha256@libssh.org",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 6.4, Dropbear SSH 2013.62"
                 ]
             }
diff --git a/test/docker/expected_results/dropbear_2019.78_test1.txt b/test/docker/expected_results/dropbear_2019.78_test1.txt
index c0d5dfc..c01a568 100644
--- a/test/docker/expected_results/dropbear_2019.78_test1.txt
+++ b/test/docker/expected_results/dropbear_2019.78_test1.txt
@@ -6,9 +6,9 @@
 
 # key exchange algorithms
 (kex) curve25519-sha256              -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
-                                     `- [info] default key exchange since OpenSSH 6.4
+                                     `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) curve25519-sha256@libssh.org   -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
-                                     `- [info] default key exchange since OpenSSH 6.4
+                                     `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) ecdh-sha2-nistp521             -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                      `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
 (kex) ecdh-sha2-nistp384             -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
diff --git a/test/docker/expected_results/openssh_8.0p1_test1.json b/test/docker/expected_results/openssh_8.0p1_test1.json
index 350af5e..809b9b5 100644
--- a/test/docker/expected_results/openssh_8.0p1_test1.json
+++ b/test/docker/expected_results/openssh_8.0p1_test1.json
@@ -115,7 +115,7 @@
             "algorithm": "curve25519-sha256",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 7.4, Dropbear SSH 2018.76"
                 ]
             }
@@ -124,7 +124,7 @@
             "algorithm": "curve25519-sha256@libssh.org",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 6.4, Dropbear SSH 2013.62"
                 ]
             }
diff --git a/test/docker/expected_results/openssh_8.0p1_test1.txt b/test/docker/expected_results/openssh_8.0p1_test1.txt
index cde69a5..f154b89 100644
--- a/test/docker/expected_results/openssh_8.0p1_test1.txt
+++ b/test/docker/expected_results/openssh_8.0p1_test1.txt
@@ -12,9 +12,9 @@
 
 # key exchange algorithms
 (kex) curve25519-sha256                     -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) ecdh-sha2-nistp256                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                             `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
 (kex) ecdh-sha2-nistp384                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
diff --git a/test/docker/expected_results/openssh_8.0p1_test2.json b/test/docker/expected_results/openssh_8.0p1_test2.json
index a05ae96..b434e6e 100644
--- a/test/docker/expected_results/openssh_8.0p1_test2.json
+++ b/test/docker/expected_results/openssh_8.0p1_test2.json
@@ -105,7 +105,7 @@
             "algorithm": "curve25519-sha256",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 7.4, Dropbear SSH 2018.76"
                 ]
             }
@@ -114,7 +114,7 @@
             "algorithm": "curve25519-sha256@libssh.org",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 6.4, Dropbear SSH 2013.62"
                 ]
             }
diff --git a/test/docker/expected_results/openssh_8.0p1_test2.txt b/test/docker/expected_results/openssh_8.0p1_test2.txt
index 8cbb69a..8c792e9 100644
--- a/test/docker/expected_results/openssh_8.0p1_test2.txt
+++ b/test/docker/expected_results/openssh_8.0p1_test2.txt
@@ -12,9 +12,9 @@
 
 # key exchange algorithms
 (kex) curve25519-sha256                     -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) ecdh-sha2-nistp256                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                             `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
 (kex) ecdh-sha2-nistp384                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
diff --git a/test/docker/expected_results/openssh_8.0p1_test3.json b/test/docker/expected_results/openssh_8.0p1_test3.json
index 13a8130..f5380e0 100644
--- a/test/docker/expected_results/openssh_8.0p1_test3.json
+++ b/test/docker/expected_results/openssh_8.0p1_test3.json
@@ -105,7 +105,7 @@
             "algorithm": "curve25519-sha256",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 7.4, Dropbear SSH 2018.76"
                 ]
             }
@@ -114,7 +114,7 @@
             "algorithm": "curve25519-sha256@libssh.org",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 6.4, Dropbear SSH 2013.62"
                 ]
             }
diff --git a/test/docker/expected_results/openssh_8.0p1_test3.txt b/test/docker/expected_results/openssh_8.0p1_test3.txt
index 27154b8..ad45556 100644
--- a/test/docker/expected_results/openssh_8.0p1_test3.txt
+++ b/test/docker/expected_results/openssh_8.0p1_test3.txt
@@ -12,9 +12,9 @@
 
 # key exchange algorithms
 (kex) curve25519-sha256                     -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
-                                            `- [info] default key exchange since OpenSSH 6.4
+                                            `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) diffie-hellman-group-exchange-sha256 (4096-bit) -- [info] available since OpenSSH 4.4
                                                       `- [info] OpenSSH's GEX fallback mechanism was triggered during testing. Very old SSH clients will still be able to create connections using a 2048-bit modulus, though modern clients will use 4096. This can only be disabled by recompiling the code (see https://github.com/openssh/openssh-portable/blob/V_9_4/dh.c#L477).
 
diff --git a/test/docker/expected_results/tinyssh_20190101_test1.json b/test/docker/expected_results/tinyssh_20190101_test1.json
index 7cc7629..40b00e9 100644
--- a/test/docker/expected_results/tinyssh_20190101_test1.json
+++ b/test/docker/expected_results/tinyssh_20190101_test1.json
@@ -43,7 +43,7 @@
             "algorithm": "curve25519-sha256",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 7.4, Dropbear SSH 2018.76"
                 ]
             }
@@ -52,7 +52,7 @@
             "algorithm": "curve25519-sha256@libssh.org",
             "notes": {
                 "info": [
-                    "default key exchange since OpenSSH 6.4",
+                    "default key exchange from OpenSSH 6.4 to 8.9",
                     "available since OpenSSH 6.4, Dropbear SSH 2013.62"
                 ]
             }
diff --git a/test/docker/expected_results/tinyssh_20190101_test1.txt b/test/docker/expected_results/tinyssh_20190101_test1.txt
index 7307169..db5678a 100644
--- a/test/docker/expected_results/tinyssh_20190101_test1.txt
+++ b/test/docker/expected_results/tinyssh_20190101_test1.txt
@@ -5,9 +5,9 @@
 
 # key exchange algorithms
 (kex) curve25519-sha256                       -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
-                                              `- [info] default key exchange since OpenSSH 6.4
+                                              `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) curve25519-sha256@libssh.org            -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
-                                              `- [info] default key exchange since OpenSSH 6.4
+                                              `- [info] default key exchange from OpenSSH 6.4 to 8.9
 (kex) sntrup4591761x25519-sha512@tinyssh.org  -- [warn] using experimental algorithm
                                               `- [info] available since OpenSSH 8.0
                                               `- [info] the sntrup4591761 algorithm was withdrawn, as it may not provide strong post-quantum security