Control: tag -1 - moreinfo On Mon, Jun 26, 2017 at 01:57:25PM +0200, Cyril Brulebois wrote: > Colin Watson <cjwat...@debian.org> (2017-06-26): > > I've committed this patch to master, but it isn't in unstable yet > > because I'm waiting for openssh-ssh1 to clear NEW before I upload > > openssh to unstable again, in order to avoid confusion with versions. > > However, point release dates are close enough that I wanted to seek > > approval for this sooner rather than later. > > I was surprised by the double ExecReload entry at first, but that seems > to be allowed. Moreover, that keeps sshd alive when a typo is willingly > introduced in sshd_config. > > (Granted: Tested on a jessie system only.) > > This looks good to me. I'll wait until the bug fix clears NEW, and until > you post a final debdiff, targetting stretch, to tag this request with > the "confirmed" tag.
I got kind of distracted and forgot about this, and in the meantime a few more bugs have become evident that ought to be fixed in stable, so here's an extended debdiff for approval. * #877800 causes current versions of WinSCP to be unable to connect due to overly-general version patterns in sshd's bug-compatibility code. * #873201 was implicated in a few CVEs a while back in packages using ssh; I'm not sure whether it *quite* counts as a security vulnerability in and of itself, but we should fix it anyway. (And yes, I'll deal with these in jessie too as necessary as soon as I summon the energy for oldstable updates.) A current version of git introduced a small amount of noise into the diff, but it's small enough that I don't think it's worth brutalising the tools to avoid it. diff -Nru openssh-7.4p1/debian/.git-dpm openssh-7.4p1/debian/.git-dpm --- openssh-7.4p1/debian/.git-dpm 2017-06-18 01:08:18.000000000 +0100 +++ openssh-7.4p1/debian/.git-dpm 2017-10-06 20:03:26.000000000 +0100 @@ -1,6 +1,6 @@ # see git-dpm(1) from git-dpm package -1fbd56e33d641c08a8f573406cf27f9adf667763 -1fbd56e33d641c08a8f573406cf27f9adf667763 +39d60bbd309be74d337685c2da524233652513f4 +39d60bbd309be74d337685c2da524233652513f4 971a7653746a6972b907dfe0ce139c06e4a6f482 971a7653746a6972b907dfe0ce139c06e4a6f482 openssh_7.4p1.orig.tar.gz diff -Nru openssh-7.4p1/debian/changelog openssh-7.4p1/debian/changelog --- openssh-7.4p1/debian/changelog 2017-06-18 01:11:26.000000000 +0100 +++ openssh-7.4p1/debian/changelog 2017-10-06 20:03:40.000000000 +0100 @@ -1,3 +1,15 @@ +openssh (1:7.4p1-10+deb9u2) stretch; urgency=medium + + * Test configuration before starting or reloading sshd under systemd + (closes: #865770). + * Adjust compatibility patterns for WinSCP to correctly identify versions + that implement only the legacy DH group exchange scheme (closes: + #877800). + * Make "--" before the hostname terminate argument processing after the + hostname too (closes: #873201). + + -- Colin Watson <cjwat...@debian.org> Fri, 06 Oct 2017 20:03:40 +0100 + openssh (1:7.4p1-10+deb9u1) stretch; urgency=medium * Fix incoming compression statistics (thanks, Russell Coker; closes: diff -Nru openssh-7.4p1/debian/openssh-server.ssh.service openssh-7.4p1/debian/openssh-server.ssh.service --- openssh-7.4p1/debian/openssh-server.ssh.service 2017-06-18 01:08:12.000000000 +0100 +++ openssh-7.4p1/debian/openssh-server.ssh.service 2017-10-06 20:03:26.000000000 +0100 @@ -5,7 +5,9 @@ [Service] EnvironmentFile=-/etc/default/ssh +ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS +ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure diff -Nru openssh-7.4p1/debian/patches/auth-log-verbosity.patch openssh-7.4p1/debian/patches/auth-log-verbosity.patch --- openssh-7.4p1/debian/patches/auth-log-verbosity.patch 2017-06-18 01:08:11.000000000 +0100 +++ openssh-7.4p1/debian/patches/auth-log-verbosity.patch 2017-10-06 20:03:26.000000000 +0100 @@ -18,7 +18,7 @@ index 57b49f7f..7eb87b35 100644 --- a/auth-options.c +++ b/auth-options.c -@@ -59,9 +59,20 @@ int forced_tun_device = -1; +@@ -59,8 +59,19 @@ int forced_tun_device = -1; /* "principals=" option. */ char *authorized_principals = NULL; @@ -28,17 +28,16 @@ + extern ServerOptions options; - void ++void +auth_start_parse_options(void) +{ + logged_from_hostip = 0; + logged_cert_hostip = 0; +} + -+void + void auth_clear_options(void) { - no_agent_forwarding_flag = 0; @@ -316,10 +327,13 @@ auth_parse_options(struct passwd *pw, char *opts, char *file, u_long linenum) /* FALLTHROUGH */ case 0: diff -Nru openssh-7.4p1/debian/patches/dash-dash-before-hostname.patch openssh-7.4p1/debian/patches/dash-dash-before-hostname.patch --- openssh-7.4p1/debian/patches/dash-dash-before-hostname.patch 1970-01-01 01:00:00.000000000 +0100 +++ openssh-7.4p1/debian/patches/dash-dash-before-hostname.patch 2017-10-06 20:03:26.000000000 +0100 @@ -0,0 +1,63 @@ +From 39d60bbd309be74d337685c2da524233652513f4 Mon Sep 17 00:00:00 2001 +From: "d...@openbsd.org" <d...@openbsd.org> +Date: Sat, 12 Aug 2017 06:46:01 +0000 +Subject: Make "--" before hostname end option processing + +make "--" before the hostname terminate command-line +option processing completely; previous behaviour would not prevent further +options appearing after the hostname (ssh has a supported options after the +hostname for >20 years, so that's too late to change). + +ok deraadt@ + +Upstream-ID: ef5ee50571b98ad94dcdf8282204e877ec88ad89 + +Origin: https://anongit.mindrot.org/openssh.git/commit/?id=643c2ad82910691b2240551ea8b14472f60b5078 +Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2766 +Bug-Debian: https://bugs.debian.org/873201 +Last-Update: 2017-10-06 + +Patch-Name: dash-dash-before-hostname.patch +--- + ssh.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/ssh.c b/ssh.c +index 39609e79..1ed44b6f 100644 +--- a/ssh.c ++++ b/ssh.c +@@ -511,13 +511,13 @@ int + main(int ac, char **av) + { + struct ssh *ssh = NULL; +- int i, r, opt, exit_status, use_syslog, direct, config_test = 0; ++ int i, r, opt, exit_status, use_syslog, direct, timeout_ms; ++ int config_test = 0, opt_terminated = 0; + char *p, *cp, *line, *argv0, buf[PATH_MAX], *host_arg, *logfile; + char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV]; + char cname[NI_MAXHOST], uidstr[32], *conn_hash_hex; + struct stat st; + struct passwd *pw; +- int timeout_ms; + extern int optind, optreset; + extern char *optarg; + struct Forward fwd; +@@ -936,6 +936,9 @@ main(int ac, char **av) + } + } + ++ if (optind > 1 && strcmp(av[optind - 1], "--") == 0) ++ opt_terminated = 1; ++ + ac -= optind; + av += optind; + +@@ -950,7 +953,7 @@ main(int ac, char **av) + host = xstrdup(++cp); + } else + host = xstrdup(*av); +- if (ac > 1) { ++ if (ac > 1 && !opt_terminated) { + optind = optreset = 1; + goto again; + } diff -Nru openssh-7.4p1/debian/patches/gssapi.patch openssh-7.4p1/debian/patches/gssapi.patch --- openssh-7.4p1/debian/patches/gssapi.patch 2017-06-18 01:08:11.000000000 +0100 +++ openssh-7.4p1/debian/patches/gssapi.patch 2017-10-06 20:03:26.000000000 +0100 @@ -266,10 +266,11 @@ return 1; break; case PERMIT_FORCED_ONLY: -@@ -795,99 +796,6 @@ fakepw(void) +@@ -794,99 +795,6 @@ fakepw(void) + return (&fake); } - /* +-/* - * Returns the remote DNS hostname as a string. The returned string must not - * be freed. NB. this will usually trigger a DNS query the first time it is - * called. @@ -362,10 +363,9 @@ - return strdup(name); -} - --/* + /* * Return the canonical name of the host in the other side of the current * connection. The host name is cached, so it is efficient to call this - * several times. diff --git a/auth2-gss.c b/auth2-gss.c index 1ca83577..3b5036df 100644 --- a/auth2-gss.c @@ -875,10 +875,11 @@ GSS_C_MUTUAL_FLAG | GSS_C_INTEG_FLAG | deleg_flag, 0, NULL, recv_tok, NULL, send_tok, flags, NULL); -@@ -228,8 +383,42 @@ ssh_gssapi_import_name(Gssctxt *ctx, const char *host) +@@ -227,9 +382,43 @@ ssh_gssapi_import_name(Gssctxt *ctx, const char *host) + return (ctx->major); } - OM_uint32 ++OM_uint32 +ssh_gssapi_client_identity(Gssctxt *ctx, const char *name) +{ + gss_buffer_desc gssbuf; @@ -909,7 +910,7 @@ + return(ctx->major); +} + -+OM_uint32 + OM_uint32 ssh_gssapi_sign(Gssctxt *ctx, gss_buffer_t buffer, gss_buffer_t hash) { + if (ctx == NULL) @@ -1199,10 +1200,11 @@ #ifdef KRB5 extern ssh_gssapi_mech gssapi_kerberos_mech; -@@ -142,6 +147,28 @@ ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid) +@@ -141,6 +146,28 @@ ssh_gssapi_server_ctx(Gssctxt **ctx, gss_OID oid) + return (ssh_gssapi_acquire_cred(*ctx)); } - /* Unprivileged */ ++/* Unprivileged */ +char * +ssh_gssapi_server_mechanisms(void) { + if (supported_oids == NULL) @@ -1224,10 +1226,9 @@ + return (res); +} + -+/* Unprivileged */ + /* Unprivileged */ void ssh_gssapi_supported_oids(gss_OID_set *oidset) - { @@ -151,7 +178,9 @@ ssh_gssapi_supported_oids(gss_OID_set *oidset) gss_OID_set supported; diff -Nru openssh-7.4p1/debian/patches/series openssh-7.4p1/debian/patches/series --- openssh-7.4p1/debian/patches/series 2017-06-18 01:08:18.000000000 +0100 +++ openssh-7.4p1/debian/patches/series 2017-10-06 20:03:26.000000000 +0100 @@ -35,3 +35,5 @@ ssh-keygen-null-deref.patch unbreak-unix-forwarding-for-root.patch fix-incoming-compression-statistics.patch +winscp-dhgex-compat.patch +dash-dash-before-hostname.patch diff -Nru openssh-7.4p1/debian/patches/winscp-dhgex-compat.patch openssh-7.4p1/debian/patches/winscp-dhgex-compat.patch --- openssh-7.4p1/debian/patches/winscp-dhgex-compat.patch 1970-01-01 01:00:00.000000000 +0100 +++ openssh-7.4p1/debian/patches/winscp-dhgex-compat.patch 2017-10-06 20:03:26.000000000 +0100 @@ -0,0 +1,40 @@ +From 2e0fa28e7b3a0fb1fdd28ecc636ba608e7ae9ebe Mon Sep 17 00:00:00 2001 +From: "dtuc...@openbsd.org" <dtuc...@openbsd.org> +Date: Tue, 25 Jul 2017 09:22:25 +0000 +Subject: Fix DH group exchange compat with current WinSCP + +Make WinSCP patterns for SSH_OLD_DHGEX more specific to +exclude WinSCP 5.10.x and up. bz#2748, from martin at winscp.net, ok djm@ + +Upstream-ID: 6fd7c32e99af3952db007aa180e73142ddbc741a + +Origin: https://anongit.mindrot.org/openssh.git/commit/?id=2985d4062ebf4204bbd373456a810d558698f9f5 +Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=2748 +Bug-Debian: https://bugs.debian.org/877800 +Last-Update: 2017-10-06 + +Patch-Name: winscp-dhgex-compat.patch +--- + compat.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/compat.c b/compat.c +index 69a104fb..58b63f7b 100644 +--- a/compat.c ++++ b/compat.c +@@ -192,9 +192,12 @@ compat_datafellows(const char *version) + "TTSSH/2.72*", SSH_BUG_HOSTKEYS }, + { "WinSCP_release_4*," + "WinSCP_release_5.0*," +- "WinSCP_release_5.1*," +- "WinSCP_release_5.5*," +- "WinSCP_release_5.6*," ++ "WinSCP_release_5.1," ++ "WinSCP_release_5.1.*," ++ "WinSCP_release_5.5," ++ "WinSCP_release_5.5.*," ++ "WinSCP_release_5.6," ++ "WinSCP_release_5.6.*," + "WinSCP_release_5.7," + "WinSCP_release_5.7.1," + "WinSCP_release_5.7.2," diff -Nru openssh-7.4p1/debian/systemd/ssh.service openssh-7.4p1/debian/systemd/ssh.service --- openssh-7.4p1/debian/systemd/ssh.service 2017-06-18 01:08:12.000000000 +0100 +++ openssh-7.4p1/debian/systemd/ssh.service 2017-10-06 20:03:26.000000000 +0100 @@ -5,7 +5,9 @@ [Service] EnvironmentFile=-/etc/default/ssh +ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS +ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure Thanks, -- Colin Watson [cjwat...@debian.org]