From: Stefan Metzmacher Date: Sat, 27 Feb 2016 02:43:58 +0000 (+0100) Subject: CVE-2016-2115: docs-xml: add "client ipc signing" option X-Git-Tag: samba-4.2.10~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d5d1d63a73d47c3959de114cd40cfedea6ac788e;p=thirdparty%2Fsamba.git CVE-2016-2115: docs-xml: add "client ipc signing" option BUG: https://bugzilla.samba.org/show_bug.cgi?id=11756 Signed-off-by: Stefan Metzmacher Reviewed-by: Ralph Boehme --- diff --git a/docs-xml/smbdotconf/security/clientipcsigning.xml b/docs-xml/smbdotconf/security/clientipcsigning.xml new file mode 100644 index 00000000000..d976f2dc00e --- /dev/null +++ b/docs-xml/smbdotconf/security/clientipcsigning.xml @@ -0,0 +1,35 @@ + + + This controls whether the client is allowed or required to use SMB signing for IPC$ + connections as DCERPC transport. Possible values + are auto, mandatory + and disabled. + + + The default value is the same as the effective value of + if the effective value of + is + NT1. In any other case the default value is + mandatory. + + Note that the default value will be changed to mandatory + in all cases for Samba 4.5 + + When the effective value of this option is mandatory, SMB signing is required. + + When set to auto, SMB signing is offered, but not enforced and if set + to disabled, SMB signing is not offered either. + + Connections from winbindd to Active Directory Domain Controllers + always enforce signing. + + +client signing + +default + diff --git a/docs-xml/smbdotconf/security/clientsigning.xml b/docs-xml/smbdotconf/security/clientsigning.xml index 3b5687f7691..354cc535248 100644 --- a/docs-xml/smbdotconf/security/clientsigning.xml +++ b/docs-xml/smbdotconf/security/clientsigning.xml @@ -9,14 +9,16 @@ and disabled. - When set to auto or default, SMB signing is offered, but not - enforced, except in winbindd, where it is enforced to Active - Directory Domain Controllers. + When set to auto or default, SMB signing is offered, but not enforced. When set to mandatory, SMB signing is required and if set - to disabled, SMB signing is not offered either. - + to disabled, SMB signing is not offered either. + + IPC$ connections for DCERPC e.g. in winbindd, are handled by the + option. +client ipc signing + default diff --git a/lib/param/loadparm.c b/lib/param/loadparm.c index 6fda6d6a737..13835f1a12b 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -2536,6 +2536,7 @@ struct loadparm_context *loadparm_init(TALLOC_CTX *mem_ctx) lpcfg_do_global_parameter(lp_ctx, "template homedir", "/home/%D/%U"); lpcfg_do_global_parameter(lp_ctx, "client signing", "default"); + lpcfg_do_global_parameter(lp_ctx, "client ipc signing", "default"); lpcfg_do_global_parameter(lp_ctx, "server signing", "default"); lpcfg_do_global_parameter(lp_ctx, "use spnego", "True"); @@ -3207,6 +3208,19 @@ int lpcfg_client_ipc_max_protocol(struct loadparm_context *lp_ctx) return client_ipc_max_protocol; } +int lpcfg_client_ipc_signing(struct loadparm_context *lp_ctx) +{ + int client_ipc_signing = lpcfg__client_ipc_signing(lp_ctx); + if (client_ipc_signing == SMB_SIGNING_DEFAULT) { + int ipc_min_protocol = lpcfg_client_ipc_min_protocol(lp_ctx); + if (ipc_min_protocol >= PROTOCOL_SMB2_02) { + return SMB_SIGNING_REQUIRED; + } + return lpcfg_client_signing(lp_ctx); + } + return client_ipc_signing; +} + bool lpcfg_server_signing_allowed(struct loadparm_context *lp_ctx, bool *mandatory) { bool allowed = true; diff --git a/source3/include/proto.h b/source3/include/proto.h index a78d3506601..f6052026529 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -947,6 +947,7 @@ int lp_client_max_protocol(void); int lp_winbindd_max_protocol(void); int lp_client_ipc_min_protocol(void); int lp_client_ipc_max_protocol(void); +int lp_client_ipc_signing(void); int lp_smb2_max_credits(void); int lp_cups_encrypt(void); bool lp_widelinks(int ); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 24c0141d7ca..1767488134a 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -789,6 +789,7 @@ static void init_globals(struct loadparm_context *lp_ctx, bool reinit_globals) Globals.client_use_spnego = true; Globals.client_signing = SMB_SIGNING_DEFAULT; + Globals._client_ipc_signing = SMB_SIGNING_DEFAULT; Globals.server_signing = SMB_SIGNING_DEFAULT; Globals.defer_sharing_violations = true; @@ -4366,6 +4367,19 @@ int lp_client_ipc_max_protocol(void) return client_ipc_max_protocol; } +int lp_client_ipc_signing(void) +{ + int client_ipc_signing = lp__client_ipc_signing(); + if (client_ipc_signing == SMB_SIGNING_DEFAULT) { + int ipc_min_protocol = lp_client_ipc_min_protocol(); + if (ipc_min_protocol >= PROTOCOL_SMB2_02) { + return SMB_SIGNING_REQUIRED; + } + return lp_client_signing(); + } + return client_ipc_signing; +} + struct loadparm_global * get_globals(void) { return &Globals;