svn commit: r325010 - head/lib/libpam/modules/pam_unix
Dag-Erling Smørgrav
des at FreeBSD.org
Thu Oct 26 13:23:14 UTC 2017
Author: des
Date: Thu Oct 26 13:23:13 2017
New Revision: 325010
URL: https://svnweb.freebsd.org/changeset/base/325010
Log:
If the user-provided password exceeds the maximum password length, don't
bother passing it to crypt(). It won't succeed and may allow an attacker
to confirm that the user exists.
Reported by: jkim@
MFC after: 1 week
Security: CVE-2016-6210
Modified:
head/lib/libpam/modules/pam_unix/pam_unix.c
Modified: head/lib/libpam/modules/pam_unix/pam_unix.c
==============================================================================
--- head/lib/libpam/modules/pam_unix/pam_unix.c Thu Oct 26 10:18:31 2017 (r325009)
+++ head/lib/libpam/modules/pam_unix/pam_unix.c Thu Oct 26 13:23:13 2017 (r325010)
@@ -111,6 +111,7 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags __un
if (!(flags & PAM_DISALLOW_NULL_AUTHTOK) &&
openpam_get_option(pamh, PAM_OPT_NULLOK))
return (PAM_SUCCESS);
+ PAM_LOG("Password is empty, using fake password");
realpw = "*";
}
lc = login_getpwclass(pwd);
@@ -125,6 +126,10 @@ pam_sm_authenticate(pam_handle_t *pamh, int flags __un
if (retval != PAM_SUCCESS)
return (retval);
PAM_LOG("Got password");
+ if (strnlen(pass, _PASSWORD_LEN + 1) > _PASSWORD_LEN) {
+ PAM_LOG("Password is too long, using fake password");
+ realpw = "*";
+ }
if (strcmp(crypt(pass, realpw), realpw) == 0)
return (PAM_SUCCESS);
More information about the svn-src-all
mailing list