public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/rest] f43: Fix CVE-2026-16615
@ 2026-08-26  1:40 Adrian Vovk
  0 siblings, 0 replies; only message in thread
From: Adrian Vovk @ 2026-08-26  1:40 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/rest
Branch : f43
Commit : 35c0961c7a4ce3b0d48c37632cb242a2fa082f97
Author : Adrian Vovk <avovk@redhat.com>
Date   : 2026-08-25T21:40:17-04:00
Stats  : +184/-0 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/rest/c/35c0961c7a4ce3b0d48c37632cb242a2fa082f97?branch=f43

Log:
Fix CVE-2026-16615

---
diff --git a/CVE-2026-16615.patch b/CVE-2026-16615.patch
new file mode 100644
index 0000000..749c97b
--- /dev/null
+++ b/CVE-2026-16615.patch
@@ -0,0 +1,182 @@
+From fe1e7672efdf22eeb5cbe30d6adc485bc55fa021 Mon Sep 17 00:00:00 2001
+From: Milan Crha <mcrha@redhat.com>
+Date: Thu, 23 Jul 2026 09:44:31 +0200
+Subject: [PATCH] utils: Replace GRand with cryptographically secure random
+ generator (CVE-2026-16615)
+
+The GRand is not supposed to be used for cryptography, replace it
+with a cryptographically secure random generator and require it
+to be available during the setup phase. The library will abort
+in case the runtime cannot create a random number (only for
+rare cases where the very last fallback to /dev/urandom fails
+to read from the device, which is used on some old platforms).
+
+Fixes https://gitlab.gnome.org/GNOME/librest/-/issues/25
+---
+ meson.build       | 29 ++++++++++++++++++++
+ rest/meson.build  |  2 +-
+ rest/rest-utils.c | 70 +++++++++++++++++++++++++++++++++++++++++++----
+ 3 files changed, 95 insertions(+), 6 deletions(-)
+
+diff --git a/meson.build b/meson.build
+index 4e2a272..2919fb6 100644
+--- a/meson.build
++++ b/meson.build
+@@ -60,6 +60,8 @@ libsoup_dep = dependency(libsoup_name, version: libsoup_req_version)
+ libjson_glib_dep = dependency('json-glib-1.0')
+ libxml_dep = dependency('libxml-2.0')
+ 
++cc = meson.get_compiler('c')
++
+ # config.h
+ conf = configuration_data()
+ conf.set_quoted('PACKAGE_NAME', meson.project_name())
+@@ -68,6 +70,33 @@ conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+ if get_option('ca_certificates')
+   conf.set_quoted('REST_SYSTEM_CA_FILE', ca_certificates_path)
+ endif
++
++# CSPRNG detection for secure random string generation (required)
++have_csprng = false
++if cc.has_function('arc4random_buf', prefix: '#include <stdlib.h>')
++  conf.set('HAVE_ARC4RANDOM_BUF', 1)
++  have_csprng = true
++endif
++if cc.has_function('getrandom', prefix: '#include <sys/random.h>')
++  conf.set('HAVE_GETRANDOM', 1)
++  have_csprng = true
++endif
++
++csprng_deps = []
++if host_machine.system() == 'windows'
++  bcrypt_lib = cc.find_library('bcrypt', required: false)
++  if bcrypt_lib.found()
++    csprng_deps += bcrypt_lib
++    conf.set('HAVE_BCRYPTGENRANDOM', 1)
++    have_csprng = true
++  endif
++endif
++
++if not have_csprng
++  error('No cryptographically secure random source found. ' +
++        'librest requires arc4random_buf(), getrandom(), or BCryptGenRandom().')
++endif
++
+ config_h = configure_file(output: 'config.h', configuration: conf)
+ root_inc = include_directories('.')
+ config_dep = declare_dependency(
+diff --git a/rest/meson.build b/rest/meson.build
+index bfecb9f..1c1cbd5 100644
+--- a/rest/meson.build
++++ b/rest/meson.build
+@@ -62,7 +62,7 @@ librest_deps = [
+   libjson_glib_dep,
+   libxml_dep,
+   config_dep,
+-]
++] + csprng_deps
+ 
+ librest_c_args = [
+   '-DG_LOG_DOMAIN="Rest"',
+diff --git a/rest/rest-utils.c b/rest/rest-utils.c
+index df283e0..346c83b 100644
+--- a/rest/rest-utils.c
++++ b/rest/rest-utils.c
+@@ -16,29 +16,89 @@
+  * Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
+  */
+ 
++#include "config.h"
+ #include "rest-utils.h"
+ 
++#ifdef HAVE_ARC4RANDOM_BUF
++#include <stdlib.h>
++#endif
++
++#ifdef HAVE_GETRANDOM
++#include <errno.h>
++#include <sys/random.h>
++#endif
++
++#ifdef HAVE_BCRYPTGENRANDOM
++#define WIN32_LEAN_AND_MEAN
++#include <windows.h>
++#include <bcrypt.h>
++#endif
++
++#if defined(HAVE_ARC4RANDOM_BUF)
++
++static void
++crypto_random_bytes (guchar *buffer,
++                     gsize   length)
++{
++  arc4random_buf (buffer, length);
++}
++
++#elif defined(HAVE_BCRYPTGENRANDOM)
++
++static void
++crypto_random_bytes (guchar *buffer,
++                     gsize   length)
++{
++  BCryptGenRandom (NULL, buffer, (ULONG) length,
++                   BCRYPT_USE_SYSTEM_PREFERRED_RNG);
++}
++
++#elif defined(HAVE_GETRANDOM)
++
++static void
++crypto_random_bytes (guchar *buffer,
++                     gsize   length)
++{
++  gsize pos = 0;
++
++  while (pos < length)
++    {
++      gssize ret = getrandom (buffer + pos, length - pos, 0);
++      if (ret < 0)
++        {
++          if (errno == EINTR)
++            continue;
++          g_error ("getrandom() failed: %s", g_strerror (errno));
++        }
++      pos += (gsize) ret;
++    }
++}
++
++#endif /* platform selection */
++
+ /**
+  * random_string:
+  * @length: the length of the random string
+  *
+- * Creates a random string from a given alphabeth with length @length
++ * Creates a random string from a given alphabet with length @length.
+  *
+  * Returns: (transfer full): a random string
+  */
+ gchar *
+ random_string (guint length)
+ {
+-  g_autoptr(GRand) rand = g_rand_new ();
+   gchar *buffer = g_malloc0 (sizeof (gchar) * length + 1);
+-  gchar alphabeth[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
++  gchar alphabet[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~";
++  guint alphabet_len = sizeof (alphabet) - 1;
++  g_autofree guchar *rand_bytes = g_malloc (length);
++
++  crypto_random_bytes (rand_bytes, length);
+ 
+   for (guint i = 0; i < length; i++)
+     {
+-      buffer[i] = alphabeth[g_rand_int (rand) % (sizeof (alphabeth) - 1)];
++      buffer[i] = alphabet[rand_bytes[i] % alphabet_len];
+     }
+   buffer[length] = '\0';
+ 
+   return buffer;
+ }
+-
+-- 
+GitLab
+

diff --git a/rest.spec b/rest.spec
index 5e3a581..c79877d 100644
--- a/rest.spec
+++ b/rest.spec
@@ -7,6 +7,8 @@ License:       LGPL-2.1-only
 URL:           https://gitlab.gnome.org/GNOME/librest
 Source0:       https://download.gnome.org/sources/librest/0.10/librest-%{version}.tar.xz
 
+Patch0: CVE-2026-16615.patch
+
 BuildRequires: meson
 BuildRequires: pkgconfig(glib-2.0)
 BuildRequires: pkgconfig(gio-2.0)

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-26  1:40 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-26  1:40 [rpms/rest] f43: Fix CVE-2026-16615 Adrian Vovk

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox