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: talloc-2.1.7~396 X-Git-Url: http://git.samba.org/samba.git/?a=commitdiff_plain;h=f65f618e9634d75f0074b2031f856f0ed605d705;p=sfrench%2Fsamba-autobuild%2F.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 2af5ada63e8..8addf8a3834 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 6247f88c19d..c416368ccc2 100644 --- a/lib/param/loadparm.c +++ b/lib/param/loadparm.c @@ -2656,6 +2656,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"); @@ -3345,6 +3346,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 5b7ceaa9cd7..a6573fbf4ec 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -899,6 +899,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 bcd3322c77a..a893c5db939 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -824,6 +824,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; @@ -4470,6 +4471,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;