[RFC] SUNRPC: Add build option to disable support for insecure enctypes
diff mbox series

Message ID 20190115201835.6381.19527.stgit@manet.1015granger.net
State New
Headers show
Series
  • [RFC] SUNRPC: Add build option to disable support for insecure enctypes
Related show

Commit Message

Chuck Lever Jan. 15, 2019, 8:18 p.m. UTC
Enable distributions to enforce the rejection of ancient and
insecure Kerberos enctypes in the kernel's RPCSEC_GSS
implementation. These are the single-DES encryption types that
were deprecated in 2012 by RFC 6649.

Enctypes that were deprecated more recently (by RFC 8429) remain
fully supported for now because they are still likely to be widely
used.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
 include/linux/sunrpc/gss_krb5_enctypes.h |   42 +++++++++++++++++++++++++++++-
 net/sunrpc/Kconfig                       |   16 +++++++++++
 net/sunrpc/auth_gss/gss_krb5_mech.c      |    2 +
 3 files changed, 59 insertions(+), 1 deletion(-)

Comments

Simo Sorce Jan. 15, 2019, 8:27 p.m. UTC | #1
LGTM

Acked-by: Simo Sorce <simo@redhat.com>

On Tue, 2019-01-15 at 15:18 -0500, Chuck Lever wrote:
> Enable distributions to enforce the rejection of ancient and
> insecure Kerberos enctypes in the kernel's RPCSEC_GSS
> implementation. These are the single-DES encryption types that
> were deprecated in 2012 by RFC 6649.
> 
> Enctypes that were deprecated more recently (by RFC 8429) remain
> fully supported for now because they are still likely to be widely
> used.
> 
> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> ---
>  include/linux/sunrpc/gss_krb5_enctypes.h |   42 +++++++++++++++++++++++++++++-
>  net/sunrpc/Kconfig                       |   16 +++++++++++
>  net/sunrpc/auth_gss/gss_krb5_mech.c      |    2 +
>  3 files changed, 59 insertions(+), 1 deletion(-)
> 
> diff --git a/include/linux/sunrpc/gss_krb5_enctypes.h b/include/linux/sunrpc/gss_krb5_enctypes.h
> index ec6234e..788742d 100644
> --- a/include/linux/sunrpc/gss_krb5_enctypes.h
> +++ b/include/linux/sunrpc/gss_krb5_enctypes.h
> @@ -1,4 +1,44 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
>  /*
> - * Dumb way to share this static piece of information with nfsd
> + * Define the string that exports the set of kernel-supported
> + * Kerberos enctypes. This list is sent via upcall to gssd, and
> + * is also exposed via the nfsd /proc API. The consumers generally
> + * treat this as an ordered list, where the first item in the list
> + * is the most preferred.
> + */
> +
> +#ifndef _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H
> +#define _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H
> +
> +#ifdef CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
> +
> +/*
> + * NB: This list includes encryption types that were deprecated
> + * by RFC 8429 (DES3_CBC_SHA1 and ARCFOUR_HMAC).
> + *
> + * ENCTYPE_AES256_CTS_HMAC_SHA1_96
> + * ENCTYPE_AES128_CTS_HMAC_SHA1_96
> + * ENCTYPE_DES3_CBC_SHA1
> + * ENCTYPE_ARCFOUR_HMAC
> + */
> +#define KRB5_SUPPORTED_ENCTYPES "18,17,16,23"
> +
> +#else	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
> +
> +/*
> + * NB: This list includes encryption types that were deprecated
> + * by RFC 6649 and RFC 8429 (DES3_CBC_SHA1 and ARCFOUR_HMAC).
> + *
> + * ENCTYPE_AES256_CTS_HMAC_SHA1_96
> + * ENCTYPE_AES128_CTS_HMAC_SHA1_96
> + * ENCTYPE_DES3_CBC_SHA1
> + * ENCTYPE_ARCFOUR_HMAC
> + * ENCTYPE_DES_CBC_MD5
> + * ENCTYPE_DES_CBC_CRC
> + * ENCTYPE_DES_CBC_MD4
>   */
>  #define KRB5_SUPPORTED_ENCTYPES "18,17,16,23,3,1,2"
> +
> +#endif	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
> +
> +#endif	/* _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H */
> diff --git a/net/sunrpc/Kconfig b/net/sunrpc/Kconfig
> index ac09ca8..83f5617 100644
> --- a/net/sunrpc/Kconfig
> +++ b/net/sunrpc/Kconfig
> @@ -34,6 +34,22 @@ config RPCSEC_GSS_KRB5
>  
>  	  If unsure, say Y.
>  
> +config CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
> +	bool "Secure RPC: Disable insecure Kerberos encryption types"
> +	depends on RPCSEC_GSS_KRB5
> +	default n
> +	help
> +	  Choose Y here to disable the use of deprecated encryption types
> +	  with the Kerberos version 5 GSS-API mechanism (RFC 1964). The
> +	  deprecated encryption types include DES-CBC-MD5, DES-CBC-CRC,
> +	  and DES-CBC-MD4. These types were deprecated by RFC 6649 because
> +	  they were found to be insecure.
> +
> +	  N is the default because many sites have deployed KDCs and
> +	  keytabs that contain only these deprecated encryption types.
> +	  Choosing Y prevents the use of known-insecure encryption types
> +	  but might result in compatibility problems.
> +
>  config SUNRPC_DEBUG
>  	bool "RPC: Enable dprintk debugging"
>  	depends on SUNRPC && SYSCTL
> diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c
> index eab71fc..be31a58 100644
> --- a/net/sunrpc/auth_gss/gss_krb5_mech.c
> +++ b/net/sunrpc/auth_gss/gss_krb5_mech.c
> @@ -53,6 +53,7 @@
>  static struct gss_api_mech gss_kerberos_mech;	/* forward declaration */
>  
>  static const struct gss_krb5_enctype supported_gss_krb5_enctypes[] = {
> +#ifndef CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
>  	/*
>  	 * DES (All DES enctypes are mapped to the same gss functionality)
>  	 */
> @@ -74,6 +75,7 @@
>  	  .cksumlength = 8,
>  	  .keyed_cksum = 0,
>  	},
> +#endif	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
>  	/*
>  	 * RC4-HMAC
>  	 */
>

Patch
diff mbox series

diff --git a/include/linux/sunrpc/gss_krb5_enctypes.h b/include/linux/sunrpc/gss_krb5_enctypes.h
index ec6234e..788742d 100644
--- a/include/linux/sunrpc/gss_krb5_enctypes.h
+++ b/include/linux/sunrpc/gss_krb5_enctypes.h
@@ -1,4 +1,44 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
- * Dumb way to share this static piece of information with nfsd
+ * Define the string that exports the set of kernel-supported
+ * Kerberos enctypes. This list is sent via upcall to gssd, and
+ * is also exposed via the nfsd /proc API. The consumers generally
+ * treat this as an ordered list, where the first item in the list
+ * is the most preferred.
+ */
+
+#ifndef _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H
+#define _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H
+
+#ifdef CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
+
+/*
+ * NB: This list includes encryption types that were deprecated
+ * by RFC 8429 (DES3_CBC_SHA1 and ARCFOUR_HMAC).
+ *
+ * ENCTYPE_AES256_CTS_HMAC_SHA1_96
+ * ENCTYPE_AES128_CTS_HMAC_SHA1_96
+ * ENCTYPE_DES3_CBC_SHA1
+ * ENCTYPE_ARCFOUR_HMAC
+ */
+#define KRB5_SUPPORTED_ENCTYPES "18,17,16,23"
+
+#else	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
+
+/*
+ * NB: This list includes encryption types that were deprecated
+ * by RFC 6649 and RFC 8429 (DES3_CBC_SHA1 and ARCFOUR_HMAC).
+ *
+ * ENCTYPE_AES256_CTS_HMAC_SHA1_96
+ * ENCTYPE_AES128_CTS_HMAC_SHA1_96
+ * ENCTYPE_DES3_CBC_SHA1
+ * ENCTYPE_ARCFOUR_HMAC
+ * ENCTYPE_DES_CBC_MD5
+ * ENCTYPE_DES_CBC_CRC
+ * ENCTYPE_DES_CBC_MD4
  */
 #define KRB5_SUPPORTED_ENCTYPES "18,17,16,23,3,1,2"
+
+#endif	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
+
+#endif	/* _LINUX_SUNRPC_GSS_KRB5_ENCTYPES_H */
diff --git a/net/sunrpc/Kconfig b/net/sunrpc/Kconfig
index ac09ca8..83f5617 100644
--- a/net/sunrpc/Kconfig
+++ b/net/sunrpc/Kconfig
@@ -34,6 +34,22 @@  config RPCSEC_GSS_KRB5
 
 	  If unsure, say Y.
 
+config CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
+	bool "Secure RPC: Disable insecure Kerberos encryption types"
+	depends on RPCSEC_GSS_KRB5
+	default n
+	help
+	  Choose Y here to disable the use of deprecated encryption types
+	  with the Kerberos version 5 GSS-API mechanism (RFC 1964). The
+	  deprecated encryption types include DES-CBC-MD5, DES-CBC-CRC,
+	  and DES-CBC-MD4. These types were deprecated by RFC 6649 because
+	  they were found to be insecure.
+
+	  N is the default because many sites have deployed KDCs and
+	  keytabs that contain only these deprecated encryption types.
+	  Choosing Y prevents the use of known-insecure encryption types
+	  but might result in compatibility problems.
+
 config SUNRPC_DEBUG
 	bool "RPC: Enable dprintk debugging"
 	depends on SUNRPC && SYSCTL
diff --git a/net/sunrpc/auth_gss/gss_krb5_mech.c b/net/sunrpc/auth_gss/gss_krb5_mech.c
index eab71fc..be31a58 100644
--- a/net/sunrpc/auth_gss/gss_krb5_mech.c
+++ b/net/sunrpc/auth_gss/gss_krb5_mech.c
@@ -53,6 +53,7 @@ 
 static struct gss_api_mech gss_kerberos_mech;	/* forward declaration */
 
 static const struct gss_krb5_enctype supported_gss_krb5_enctypes[] = {
+#ifndef CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES
 	/*
 	 * DES (All DES enctypes are mapped to the same gss functionality)
 	 */
@@ -74,6 +75,7 @@ 
 	  .cksumlength = 8,
 	  .keyed_cksum = 0,
 	},
+#endif	/* CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES */
 	/*
 	 * RC4-HMAC
 	 */