From bc0935a51a8a10e710a5601e300a4981612f9fc4 Mon Sep 17 00:00:00 2001 From: dmiller Date: Mon, 27 Aug 2018 15:02:48 +0000 Subject: [PATCH] Warn if no ciphers support FS. See #1309 --- nselib/tls.lua | 8 ++++++++ scripts/ssl-enum-ciphers.nse | 3 +++ 2 files changed, 11 insertions(+) diff --git a/nselib/tls.lua b/nselib/tls.lua index c3d441b40..9e4a0f468 100644 --- a/nselib/tls.lua +++ b/nselib/tls.lua @@ -897,6 +897,7 @@ KEX_ALGORITHMS.RSA_EXPORT1024 = KEX_ALGORITHMS.RSA_EXPORT KEX_ALGORITHMS.DHE_RSA={ pubkey="rsa", type = "dh", + pfs = true, server_key_exchange = function (blob, protocol) local pos local ret = {} @@ -909,17 +910,20 @@ KEX_ALGORITHMS.DHE_RSA_EXPORT={ export=true, pubkey="rsa", type = "dh", + pfs = true, server_key_exchange = KEX_ALGORITHMS.DHE_RSA.server_key_exchange } KEX_ALGORITHMS.DHE_DSS={ pubkey="dsa", type = "dh", + pfs = true, server_key_exchange = KEX_ALGORITHMS.DHE_RSA.server_key_exchange } KEX_ALGORITHMS.DHE_DSS_EXPORT={ export=true, pubkey="dsa", type = "dh", + pfs = true, server_key_exchange = KEX_ALGORITHMS.DHE_RSA.server_key_exchange } KEX_ALGORITHMS.DHE_DSS_EXPORT1024 = KEX_ALGORITHMS.DHE_DSS_EXPORT1024 @@ -942,6 +946,7 @@ KEX_ALGORITHMS.DH_RSA_EXPORT={ KEX_ALGORITHMS.ECDHE_RSA={ pubkey="rsa", type = "ec", + pfs = true, server_key_exchange = function (blob, protocol) local pos local ret = {} @@ -953,6 +958,7 @@ KEX_ALGORITHMS.ECDHE_RSA={ KEX_ALGORITHMS.ECDHE_ECDSA={ pubkey="ec", type = "ec", + pfs = true, server_key_exchange = KEX_ALGORITHMS.ECDHE_RSA.server_key_exchange } KEX_ALGORITHMS.ECDH_ECDSA={ @@ -995,6 +1001,7 @@ KEX_ALGORITHMS.RSA_PSK = { } KEX_ALGORITHMS.DHE_PSK = { type = "dh", + pfs = true, server_key_exchange = function (blob, protocol) local pos local ret = {} @@ -1009,6 +1016,7 @@ KEX_ALGORITHMS.PSK_DHE = KEX_ALGORITHMS.DHE_PSK --rfc5489 KEX_ALGORITHMS.ECDHE_PSK={ type = "ec", + pfs = true, server_key_exchange = function (blob, protocol) local pos local ret = {} diff --git a/scripts/ssl-enum-ciphers.nse b/scripts/ssl-enum-ciphers.nse index b84854239..c5a918028 100644 --- a/scripts/ssl-enum-ciphers.nse +++ b/scripts/ssl-enum-ciphers.nse @@ -675,6 +675,7 @@ local function find_ciphers_group(host, port, protocol, group, scores) scores.warnings["Broken cipher RC4 is deprecated by RFC 7465"] = true end local kex = tls.KEX_ALGORITHMS[info.kex] + scores.any_pfs_ciphers = kex.pfs or scores.any_pfs_ciphers local extra, kex_strength if kex.anon then kex_strength = 0 @@ -815,6 +816,8 @@ local function find_ciphers(host, port, protocol) end end if not next(results) then return nil end + scores.warnings["Forward Secrecy not supported by any cipher"] = (not scores.any_pfs_ciphers) or nil + scores.any_pfs_ciphers = nil return results, scores end