Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pam for openSUSE:Factory checked in 
at 2025-08-20 13:24:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pam (Old)
 and      /work/SRC/openSUSE:Factory/.pam.new.29662 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pam"

Wed Aug 20 13:24:34 2025 rev:146 rq:1300309 version:1.7.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/pam/pam.changes  2025-06-20 16:48:01.624825357 
+0200
+++ /work/SRC/openSUSE:Factory/.pam.new.29662/pam.changes       2025-08-20 
13:24:36.338583956 +0200
@@ -1,0 +2,8 @@
+Tue Aug 19 10:12:13 UTC 2025 - Valentin Lefebvre <valentin.lefeb...@suse.com>
+
+- Make sure that the buffer containing encrypted passwords get's erased,
+  before free.
+  [pam_modutil_get-overwrite-password-at-free.patch, bsc#1232234,
+   CVE-20244-10041]
+
+-------------------------------------------------------------------

New:
----
  pam_modutil_get-overwrite-password-at-free.patch

----------(New B)----------
  New:  before free.
  [pam_modutil_get-overwrite-password-at-free.patch, bsc#1232234,
   CVE-20244-10041]
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pam.spec ++++++
--- /var/tmp/diff_new_pack.ylHdck/_old  2025-08-20 13:24:38.670681021 +0200
+++ /var/tmp/diff_new_pack.ylHdck/_new  2025-08-20 13:24:38.674681187 +0200
@@ -93,6 +93,8 @@
 Source23:       postlogin-password.pamd
 Source24:       postlogin-session.pamd
 Patch1:         pam-limit-nproc.patch
+# PATCH-FIX-UPSTREAM
+Patch2:         pam_modutil_get-overwrite-password-at-free.patch
 BuildRequires:  audit-devel
 BuildRequires:  bison
 BuildRequires:  flex


++++++ pam_modutil_get-overwrite-password-at-free.patch ++++++
>From e2fdc55d9d8d277c9395f96c3bf2938bacc84f62 Mon Sep 17 00:00:00 2001
From: Thorsten Kukuk <ku...@suse.com>
Date: Thu, 14 Aug 2025 12:01:25 +0200
Subject: [PATCH] pam_modutil_get*: overwrite password at free (#846)

Make sure that the buffer containing encrypted passwords (struct group,
passwd and shadow) get's erased before free, so that they are not
available anymore if the memory get allocated again.
---
 libpam/pam_modutil_cleanup.c  | 40 +++++++++++++++++++++++++++++++++++
 libpam/pam_modutil_getgrgid.c |  2 +-
 libpam/pam_modutil_getgrnam.c |  2 +-
 libpam/pam_modutil_getpwnam.c |  2 +-
 libpam/pam_modutil_getpwuid.c |  2 +-
 libpam/pam_modutil_getspnam.c |  2 +-
 libpam/pam_modutil_private.h  |  9 ++++++++
 7 files changed, 54 insertions(+), 5 deletions(-)

diff --git a/libpam/pam_modutil_cleanup.c b/libpam/pam_modutil_cleanup.c
index 2077cbd7..46233736 100644
--- a/libpam/pam_modutil_cleanup.c
+++ b/libpam/pam_modutil_cleanup.c
@@ -5,8 +5,12 @@
  */
 
 #include "pam_modutil_private.h"
+#include "pam_inline.h"
 
+#include <grp.h>
+#include <pwd.h>
 #include <stdlib.h>
+#include <shadow.h>
 
 void
 pam_modutil_cleanup (pam_handle_t *pamh UNUSED, void *data,
@@ -15,3 +19,39 @@ pam_modutil_cleanup (pam_handle_t *pamh UNUSED, void *data,
        /* junk it */
        free(data);
 }
+
+void
+pam_modutil_cleanup_group (pam_handle_t *pamh UNUSED, void *data,
+                          int error_status UNUSED)
+{
+       struct group *gr = data;
+
+       if (gr && gr->gr_passwd)
+               pam_overwrite_string(gr->gr_passwd);
+
+       free(data);
+}
+
+void
+pam_modutil_cleanup_passwd (pam_handle_t *pamh UNUSED, void *data,
+                           int error_status UNUSED)
+{
+       struct passwd *pw = data;
+
+       if (pw && pw->pw_passwd)
+               pam_overwrite_string(pw->pw_passwd);
+
+       free(data);
+}
+
+void
+pam_modutil_cleanup_shadow (pam_handle_t *pamh UNUSED, void *data,
+                           int error_status UNUSED)
+{
+       struct spwd *sp = data;
+
+       if (sp && sp->sp_pwdp)
+               pam_overwrite_string(sp->sp_pwdp);
+
+       free(data);
+}
diff --git a/libpam/pam_modutil_getgrgid.c b/libpam/pam_modutil_getgrgid.c
index 6c2bb31b..fa3436c5 100644
--- a/libpam/pam_modutil_getgrgid.c
+++ b/libpam/pam_modutil_getgrgid.c
@@ -62,7 +62,7 @@ pam_modutil_getgrgid(pam_handle_t *pamh, gid_t gid)
                    status = PAM_NO_MODULE_DATA;
                    if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
                        status = pam_set_data(pamh, data_name,
-                                             result, pam_modutil_cleanup);
+                                             result, 
pam_modutil_cleanup_group);
                    }
                    free(data_name);
                    if (status == PAM_SUCCESS) {
diff --git a/libpam/pam_modutil_getgrnam.c b/libpam/pam_modutil_getgrnam.c
index 418b9e47..533a8ce6 100644
--- a/libpam/pam_modutil_getgrnam.c
+++ b/libpam/pam_modutil_getgrnam.c
@@ -62,7 +62,7 @@ pam_modutil_getgrnam(pam_handle_t *pamh, const char *group)
                    status = PAM_NO_MODULE_DATA;
                    if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
                        status = pam_set_data(pamh, data_name,
-                                             result, pam_modutil_cleanup);
+                                             result, 
pam_modutil_cleanup_group);
                    }
                    free(data_name);
                    if (status == PAM_SUCCESS) {
diff --git a/libpam/pam_modutil_getpwnam.c b/libpam/pam_modutil_getpwnam.c
index 5701ba9c..de654aeb 100644
--- a/libpam/pam_modutil_getpwnam.c
+++ b/libpam/pam_modutil_getpwnam.c
@@ -62,7 +62,7 @@ pam_modutil_getpwnam(pam_handle_t *pamh, const char *user)
                    status = PAM_NO_MODULE_DATA;
                    if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
                        status = pam_set_data(pamh, data_name,
-                                             result, pam_modutil_cleanup);
+                                             result, 
pam_modutil_cleanup_passwd);
                    }
                    free(data_name);
                    if (status == PAM_SUCCESS) {
diff --git a/libpam/pam_modutil_getpwuid.c b/libpam/pam_modutil_getpwuid.c
index d3bb7231..6534958c 100644
--- a/libpam/pam_modutil_getpwuid.c
+++ b/libpam/pam_modutil_getpwuid.c
@@ -62,7 +62,7 @@ pam_modutil_getpwuid(pam_handle_t *pamh, uid_t uid)
                    status = PAM_NO_MODULE_DATA;
                    if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
                        status = pam_set_data(pamh, data_name,
-                                             result, pam_modutil_cleanup);
+                                             result, 
pam_modutil_cleanup_passwd);
                    }
                    free(data_name);
                    if (status == PAM_SUCCESS) {
diff --git a/libpam/pam_modutil_getspnam.c b/libpam/pam_modutil_getspnam.c
index 9aa6ac9a..9733eda0 100644
--- a/libpam/pam_modutil_getspnam.c
+++ b/libpam/pam_modutil_getspnam.c
@@ -62,7 +62,7 @@ pam_modutil_getspnam(pam_handle_t *pamh, const char *user)
                    status = PAM_NO_MODULE_DATA;
                    if (pam_get_data(pamh, data_name, &ignore) != PAM_SUCCESS) {
                        status = pam_set_data(pamh, data_name,
-                                             result, pam_modutil_cleanup);
+                                             result, 
pam_modutil_cleanup_shadow);
                    }
                    free(data_name);
                    if (status == PAM_SUCCESS) {
diff --git a/libpam/pam_modutil_private.h b/libpam/pam_modutil_private.h
index 98a30f68..611c7696 100644
--- a/libpam/pam_modutil_private.h
+++ b/libpam/pam_modutil_private.h
@@ -20,5 +20,14 @@
 extern void
 pam_modutil_cleanup(pam_handle_t *pamh, void *data,
                     int error_status);
+extern void
+pam_modutil_cleanup_group(pam_handle_t *pamh, void *data,
+                         int error_status);
+extern void
+pam_modutil_cleanup_passwd(pam_handle_t *pamh, void *data,
+                          int error_status);
+extern void
+pam_modutil_cleanup_shadow(pam_handle_t *pamh, void *data,
+                          int error_status);
 
 #endif /* PAMMODUTIL_PRIVATE_H */
-- 
2.50.1

Reply via email to