Antonio Larrosa
da2c6cc517
* No changes for askpass, see main package changelog for details. - Fix a dbus connection leaked in the logind patch that was missing a sd_bus_unref call (found by Matthias Gerstner): * logind_set_tty.patch - Add a patch that fixes a small memory leak when parsing the subsystem configuration option: * fix-memleak-in-process_server_config_line_depth.patch - Update to openssh 9.8p1: = Security * 1) Race condition in sshd(8) (bsc#1226642, CVE-2024-6387). A critical vulnerability in sshd(8) was present in Portable OpenSSH versions between 8.5p1 and 9.7p1 (inclusive) that may allow arbitrary code execution with root privileges. Successful exploitation has been demonstrated on 32-bit Linux/glibc systems with ASLR. Under lab conditions, the attack requires on average 6-8 hours of continuous connections up to the maximum the server will accept. Exploitation on 64-bit systems is believed to be possible but has not been demonstrated at this time. It's likely that these attacks will be improved upon. Exploitation on non-glibc systems is conceivable but has not been examined. Systems that lack ASLR or users of downstream Linux distributions that have modified OpenSSH to disable per-connection ASLR re-randomisation (yes - this is a thing, no - we don't understand why) may potentially have an easier path to exploitation. OpenBSD is not vulnerable. OBS-URL: https://build.opensuse.org/package/show/network/openssh?expand=0&rev=272
75 lines
1.7 KiB
Diff
75 lines
1.7 KiB
Diff
commit d281831d887044ede45d458c3dda74be9ae017e3
|
|
Author: Hans Petter Jansson <hpj@hpjansson.org>
|
|
Date: Fri Sep 25 23:26:58 2020 +0200
|
|
|
|
Use OpenSSL's FIPS approved RAND_bytes() to get randomness for Ed25519
|
|
|
|
diff --git a/ed25519.c b/ed25519.c
|
|
index 767ec24..5d506a9 100644
|
|
--- a/ed25519.c
|
|
+++ b/ed25519.c
|
|
@@ -9,6 +9,13 @@
|
|
|
|
#include "crypto_api.h"
|
|
|
|
+#ifdef WITH_OPENSSL
|
|
+#include <openssl/rand.h>
|
|
+#include <openssl/err.h>
|
|
+#endif
|
|
+
|
|
+#include "log.h"
|
|
+
|
|
#define int8 crypto_int8
|
|
#define uint8 crypto_uint8
|
|
#define int16 crypto_int16
|
|
@@ -33,7 +40,15 @@ int crypto_sign_ed25519_keypair(
|
|
sc25519 scsk;
|
|
ge25519 gepk;
|
|
|
|
+#ifdef WITH_OPENSSL
|
|
+ /* Use FIPS approved RNG */
|
|
+ if (RAND_bytes(sk, 32) <= 0)
|
|
+ fatal("Couldn't obtain random bytes (error 0x%lx)",
|
|
+ (unsigned long)ERR_get_error());
|
|
+#else
|
|
randombytes(sk,32);
|
|
+#endif
|
|
+
|
|
crypto_hash_sha512(az,sk,32);
|
|
az[0] &= 248;
|
|
az[31] &= 127;
|
|
diff --git a/kexc25519.c b/kexc25519.c
|
|
index f13d766..2604eda 100644
|
|
--- a/kexc25519.c
|
|
+++ b/kexc25519.c
|
|
@@ -33,6 +33,13 @@
|
|
#include <string.h>
|
|
#include <signal.h>
|
|
|
|
+#ifdef WITH_OPENSSL
|
|
+#include <openssl/rand.h>
|
|
+#include <openssl/err.h>
|
|
+#endif
|
|
+
|
|
+#include "log.h"
|
|
+
|
|
#include "sshkey.h"
|
|
#include "kex.h"
|
|
#include "sshbuf.h"
|
|
@@ -51,7 +58,15 @@ kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE])
|
|
{
|
|
static const u_char basepoint[CURVE25519_SIZE] = {9};
|
|
|
|
+#ifdef WITH_OPENSSL
|
|
+ /* Use FIPS approved RNG */
|
|
+ if (RAND_bytes(key, CURVE25519_SIZE) <= 0)
|
|
+ fatal("Couldn't obtain random bytes (error 0x%lx)",
|
|
+ (unsigned long)ERR_get_error());
|
|
+#else
|
|
arc4random_buf(key, CURVE25519_SIZE);
|
|
+#endif
|
|
+
|
|
crypto_scalarmult_curve25519(pub, key, basepoint);
|
|
}
|
|
|