aboutsummaryrefslogtreecommitdiff
path: root/modules/pam_userdb
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2023-01-30 17:56:58 +0100
committerChristian Göttsche <cgzones@googlemail.com>2023-02-28 15:13:15 +0100
commitbcba17939e1b1a568cd4a764534cde74d37078cc (patch)
tree4f3630f53cd52c2afa59435f5d36db260c1bf4a1 /modules/pam_userdb
parent87ff7a12a55c38873905636eb8d29b4542d828f5 (diff)
downloadpam-bcba17939e1b1a568cd4a764534cde74d37078cc.tar.gz
pam-bcba17939e1b1a568cd4a764534cde74d37078cc.tar.bz2
pam-bcba17939e1b1a568cd4a764534cde74d37078cc.zip
modules: make use of secure memory erasure
Use empty initialization of structs to minimize the memset() usage, to reduce the amount of calls which are not sensitive. Non trivial changes: - pam_env: * erase environment variables where possible - pam_exec: * erase responce on error * erase auth token - pam_pwhistory: * erase buffers containing old passwords - pam_selinux: skip overwriting data structure consisting of only pointers to insensitive data, which also gets free'd afterwards (so it currently does not protect against double-free or use-after-free on the member pointers) - pam_unix: erase cipher data in more places - pam_userdb: erase password hashes
Diffstat (limited to 'modules/pam_userdb')
-rw-r--r--modules/pam_userdb/pam_userdb.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/modules/pam_userdb/pam_userdb.c b/modules/pam_userdb/pam_userdb.c
index f467ea4c..297403b0 100644
--- a/modules/pam_userdb/pam_userdb.c
+++ b/modules/pam_userdb/pam_userdb.c
@@ -62,7 +62,7 @@ obtain_authtok(pam_handle_t *pamh)
retval = pam_set_item(pamh, PAM_AUTHTOK, resp);
/* clean it up */
- _pam_overwrite(resp);
+ pam_overwrite_string(resp);
_pam_drop(resp);
if ( (retval != PAM_SUCCESS) ||
@@ -181,7 +181,7 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
if (key.dptr) {
data = dbm_fetch(dbm, key);
- memset(key.dptr, 0, key.dsize);
+ pam_overwrite_n(key.dptr, key.dsize);
free(key.dptr);
}
@@ -247,8 +247,11 @@ user_lookup (pam_handle_t *pamh, const char *database, const char *cryptmode,
free(cdata);
#endif
}
+ pam_overwrite_string(pwhash);
free(pwhash);
}
+
+ pam_overwrite_string(cryptpw);
} else {
/* Unknown password encryption method -