forked from pool/openssh
Accepting request 780476 from network
OBS-URL: https://build.opensuse.org/request/show/780476 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/openssh?expand=0&rev=138
This commit is contained in:
commit
1b216e5454
157
openssh-8.1p1-use-openssl-kdf.patch
Normal file
157
openssh-8.1p1-use-openssl-kdf.patch
Normal file
@ -0,0 +1,157 @@
|
|||||||
|
diff --git a/kex.c b/kex.c
|
||||||
|
index 96e44a5..7cd37d6 100644
|
||||||
|
--- a/kex.c
|
||||||
|
+++ b/kex.c
|
||||||
|
@@ -38,6 +38,7 @@
|
||||||
|
#ifdef WITH_OPENSSL
|
||||||
|
#include <openssl/crypto.h>
|
||||||
|
#include <openssl/dh.h>
|
||||||
|
+#include <openssl/kdf.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "ssh.h"
|
||||||
|
@@ -1109,8 +1110,92 @@ kex_choose_conf(struct ssh *ssh)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#ifdef WITH_OPENSSL
|
||||||
|
+
|
||||||
|
+static const EVP_MD *
|
||||||
|
+get_openssl_md_for_hash_alg (int hash_alg)
|
||||||
|
+{
|
||||||
|
+ if (hash_alg < 0 || hash_alg >= SSH_DIGEST_MAX)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ switch (hash_alg)
|
||||||
|
+ {
|
||||||
|
+ case SSH_DIGEST_MD5:
|
||||||
|
+ return EVP_md5();
|
||||||
|
+ case SSH_DIGEST_SHA1:
|
||||||
|
+ return EVP_sha1();
|
||||||
|
+ case SSH_DIGEST_SHA256:
|
||||||
|
+ return EVP_sha256();
|
||||||
|
+ case SSH_DIGEST_SHA384:
|
||||||
|
+ return EVP_sha384();
|
||||||
|
+ case SSH_DIGEST_SHA512:
|
||||||
|
+ return EVP_sha512();
|
||||||
|
+ default:
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int
|
||||||
|
-derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen,
|
||||||
|
+derive_key_via_openssl(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen,
|
||||||
|
+ const struct sshbuf *shared_secret, u_char **keyp)
|
||||||
|
+{
|
||||||
|
+ struct kex *kex = ssh->kex;
|
||||||
|
+ EVP_KDF_CTX *hashctx = NULL;
|
||||||
|
+ const EVP_MD *md = NULL;
|
||||||
|
+ u_char *digest = NULL;
|
||||||
|
+ int r = SSH_ERR_LIBCRYPTO_ERROR;
|
||||||
|
+
|
||||||
|
+ hashctx = EVP_KDF_CTX_new_id (EVP_KDF_SSHKDF);
|
||||||
|
+ if (!hashctx)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ md = get_openssl_md_for_hash_alg (kex->hash_alg);
|
||||||
|
+ if (!md)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ if (EVP_KDF_ctrl (hashctx, EVP_KDF_CTRL_SET_MD,
|
||||||
|
+ md) != 1
|
||||||
|
+ || EVP_KDF_ctrl (hashctx, EVP_KDF_CTRL_SET_KEY,
|
||||||
|
+ sshbuf_ptr(shared_secret), sshbuf_len(shared_secret)) != 1
|
||||||
|
+ || EVP_KDF_ctrl (hashctx, EVP_KDF_CTRL_SET_SSHKDF_TYPE,
|
||||||
|
+ (int) id) != 1
|
||||||
|
+ || EVP_KDF_ctrl (hashctx, EVP_KDF_CTRL_SET_SSHKDF_XCGHASH,
|
||||||
|
+ hash, (size_t) hashlen) != 1
|
||||||
|
+ || EVP_KDF_ctrl (hashctx, EVP_KDF_CTRL_SET_SSHKDF_SESSION_ID,
|
||||||
|
+ kex->session_id, (size_t) kex->session_id_len) != 1)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ digest = calloc (1, need);
|
||||||
|
+ if (!digest) {
|
||||||
|
+ r = SSH_ERR_ALLOC_FAIL;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (EVP_KDF_derive (hashctx, digest, need) != 1)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ *keyp = digest;
|
||||||
|
+ digest = NULL;
|
||||||
|
+ r = 0;
|
||||||
|
+
|
||||||
|
+ out:
|
||||||
|
+ if (hashctx)
|
||||||
|
+ EVP_KDF_CTX_free(hashctx);
|
||||||
|
+
|
||||||
|
+ if (digest)
|
||||||
|
+ free(digest);
|
||||||
|
+
|
||||||
|
+ return r;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+# error This version of openssh must be built with openssl to benefit from FIPS certification.
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
+derive_key_via_internal(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen,
|
||||||
|
const struct sshbuf *shared_secret, u_char **keyp)
|
||||||
|
{
|
||||||
|
struct kex *kex = ssh->kex;
|
||||||
|
@@ -1174,6 +1259,50 @@ derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen,
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
+/* Belt and suspenders; we want the output from openssl because it's FIPS certified. However,
|
||||||
|
+ * if there's a bug in the implementation, we should not proceed. Minimize risk by requiring
|
||||||
|
+ * the implementations agree. */
|
||||||
|
+static int
|
||||||
|
+derive_key(struct ssh *ssh, int id, u_int need, u_char *hash, u_int hashlen,
|
||||||
|
+ const struct sshbuf *shared_secret, u_char **keyp)
|
||||||
|
+{
|
||||||
|
+#ifdef WITH_OPENSSL
|
||||||
|
+
|
||||||
|
+ u_char *buf_openssl = NULL, *buf_internal = NULL;
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
+ r = derive_key_via_openssl (ssh, id, need, hash, hashlen, shared_secret, &buf_openssl);
|
||||||
|
+ if (r != 0)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ r = derive_key_via_internal (ssh, id, need, hash, hashlen, shared_secret, &buf_internal);
|
||||||
|
+ if (r != 0)
|
||||||
|
+ goto out;
|
||||||
|
+
|
||||||
|
+ if (memcmp (buf_openssl, buf_internal, need))
|
||||||
|
+ {
|
||||||
|
+ r = SSH_ERR_LIBCRYPTO_ERROR;
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *keyp = buf_openssl;
|
||||||
|
+ buf_openssl = NULL;
|
||||||
|
+
|
||||||
|
+ out:
|
||||||
|
+ if (buf_openssl)
|
||||||
|
+ free (buf_openssl);
|
||||||
|
+ if (buf_internal)
|
||||||
|
+ free (buf_internal);
|
||||||
|
+
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+#else
|
||||||
|
+
|
||||||
|
+ return derive_key_via_internal (ssh, id, need, hash, hashlen, shared_secret, keyp);
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#define NKEYS 6
|
||||||
|
int
|
||||||
|
kex_derive_keys(struct ssh *ssh, u_char *hash, u_int hashlen,
|
@ -1,3 +1,8 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Feb 28 16:15:06 UTC 2020 - Ludwig Nussel <lnussel@suse.de>
|
||||||
|
|
||||||
|
- Don't recommend xauth to avoid pulling in X.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Feb 18 14:47:36 UTC 2020 - Fabian Vogt <fvogt@suse.com>
|
Tue Feb 18 14:47:36 UTC 2020 - Fabian Vogt <fvogt@suse.com>
|
||||||
|
|
||||||
@ -6,6 +11,20 @@ Tue Feb 18 14:47:36 UTC 2020 - Fabian Vogt <fvogt@suse.com>
|
|||||||
* openssh-8.1p1-seccomp-clock_nanosleep_time64.patch
|
* openssh-8.1p1-seccomp-clock_nanosleep_time64.patch
|
||||||
* openssh-8.1p1-seccomp-clock_gettime64.patch
|
* openssh-8.1p1-seccomp-clock_gettime64.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Feb 11 02:20:32 UTC 2020 - Hans Petter Jansson <hpj@suse.com>
|
||||||
|
|
||||||
|
- Add openssh-8.1p1-use-openssl-kdf.patch (jsc#SLE-9443). This
|
||||||
|
performs key derivation using OpenSSL's SSHKDF facility, which
|
||||||
|
allows OpenSSH to benefit from the former's FIPS certification
|
||||||
|
status.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Nov 21 04:49:22 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
||||||
|
|
||||||
|
- Make sure ssh-keygen runs if SSHD_AUTO_KEYGEN variable is unset
|
||||||
|
or contains an unrecognized value (bsc#1157176).
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Nov 8 18:05:37 UTC 2019 - Cristian Rodríguez <crrodriguez@opensuse.org>
|
Fri Nov 8 18:05:37 UTC 2019 - Cristian Rodríguez <crrodriguez@opensuse.org>
|
||||||
|
|
||||||
@ -13,6 +32,14 @@ Fri Nov 8 18:05:37 UTC 2019 - Cristian Rodríguez <crrodriguez@opensuse.org>
|
|||||||
glibc master implements multiple functions using that syscall making
|
glibc master implements multiple functions using that syscall making
|
||||||
the privsep sandbox kill the preauth process.
|
the privsep sandbox kill the preauth process.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Oct 17 06:23:58 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
||||||
|
|
||||||
|
- Update openssh-7.7p1-audit.patch to fix crash (bsc#1152730). Fix
|
||||||
|
by Enzo Matsumiya (ematsumiya@suse.com). This was integrated in
|
||||||
|
a separate code stream merged with the Oct. 10 update; the patch
|
||||||
|
was also rebased and renamed to openssh-8.1p1-audit.patch.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Oct 14 23:58:39 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
Mon Oct 14 23:58:39 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
||||||
|
|
||||||
@ -20,7 +47,9 @@ Mon Oct 14 23:58:39 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
|||||||
This attempts to preserve the permissions of any existing
|
This attempts to preserve the permissions of any existing
|
||||||
known_hosts file when modified by ssh-keygen (for instance,
|
known_hosts file when modified by ssh-keygen (for instance,
|
||||||
with -R).
|
with -R).
|
||||||
- Add patch from upstream openssh-7.9p1-revert-new-qos-defaults.patch
|
- Added openssh-7.9p1-revert-new-qos-defaults.patch, which reverts
|
||||||
|
an upstream commit that caused compatibility issues with other
|
||||||
|
software (bsc#1136402).
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Oct 14 23:56:42 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
Mon Oct 14 23:56:42 UTC 2019 - Hans Petter Jansson <hpj@suse.com>
|
||||||
|
@ -102,6 +102,7 @@ Patch35: openssh-7.9p1-revert-new-qos-defaults.patch
|
|||||||
Patch36: openssh-8.1p1-seccomp-clock_nanosleep.patch
|
Patch36: openssh-8.1p1-seccomp-clock_nanosleep.patch
|
||||||
Patch37: openssh-8.1p1-seccomp-clock_nanosleep_time64.patch
|
Patch37: openssh-8.1p1-seccomp-clock_nanosleep_time64.patch
|
||||||
Patch38: openssh-8.1p1-seccomp-clock_gettime64.patch
|
Patch38: openssh-8.1p1-seccomp-clock_gettime64.patch
|
||||||
|
Patch39: openssh-8.1p1-use-openssl-kdf.patch
|
||||||
BuildRequires: audit-devel
|
BuildRequires: audit-devel
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: groff
|
BuildRequires: groff
|
||||||
@ -117,7 +118,6 @@ Requires(post): %fillup_prereq
|
|||||||
Requires(pre): pwdutils
|
Requires(pre): pwdutils
|
||||||
Recommends: %{name}-helpers = %{version}-%{release}
|
Recommends: %{name}-helpers = %{version}-%{release}
|
||||||
Recommends: audit
|
Recommends: audit
|
||||||
Recommends: xauth
|
|
||||||
Conflicts: %{name}-fips < %{version}-%{release}
|
Conflicts: %{name}-fips < %{version}-%{release}
|
||||||
Conflicts: %{name}-fips > %{version}-%{release}
|
Conflicts: %{name}-fips > %{version}-%{release}
|
||||||
Conflicts: nonfreessh
|
Conflicts: nonfreessh
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
. /etc/sysconfig/ssh
|
. /etc/sysconfig/ssh
|
||||||
|
|
||||||
if [ "$SSHD_AUTO_KEYGEN" = "yes" ]; then
|
if [ "x$SSHD_AUTO_KEYGEN" != "xno" ]; then
|
||||||
echo "Checking for missing server keys in /etc/ssh"
|
echo "Checking for missing server keys in /etc/ssh"
|
||||||
ssh-keygen -A
|
ssh-keygen -A
|
||||||
fi
|
fi
|
||||||
|
Loading…
Reference in New Issue
Block a user