Flaw in empty password authentication in sshd
jayaraj at amritapuri.com
jayaraj at amritapuri.com
Wed Nov 7 21:01:04 EST 2001
The auth-pam.c of sshd server contains a small flaw that allows empty
password logins even if "PermitEmptyPasswords" option in the sshd config
file is set to "no". The scenario is as follows:
Using ssh the user tries to logon to the machine using an account that has
empty password. If the user presses enter on the password prompt (NULL
password) access is disallowed. However upon entry of any random string
the user is granted successful login.
In "auth_pam_password" function (auth_pam.c) the lines:
if(*password == '\0' && options.permit_empty_passwd == 0)
return 0;
disallows a login to an empty password account by providing empty
password.
However if the user provides a random non-empty password the user is able
to login to an account that has empty password. This is because the
"pam_authenticate" function which is called from "do_pam_authenticate" is
always called with "flags" set to "0".
If the system PAM authentication configuration is tightened this can be
disallowed. However, since users rely on the SSH configuration this
non-intuitive and buggy behaviour may be dangerous.
>How-To-Repeat:
The SSHD PAM configuration file must be the one that is shipped as a part
of ssh install. In the source package this file is
"contrib/redhat/sshd.pam-7.x".
Since this file relies on system-auth file, a copy of the system-auth file
in my system (standard Redhat 7.1) is pasted below:
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required /lib/security/pam_env.so
auth sufficient /lib/security/pam_unix.so likeauth nullok
auth required /lib/security/pam_deny.so
account required /lib/security/pam_unix.so
password required /lib/security/pam_cracklib.so retry=3
password sufficient /lib/security/pam_unix.so nullok use_authtok md5
shadow
password required /lib/security/pam_deny.so
session required /lib/security/pam_limits.so
session required /lib/security/pam_unix.so
(Note that this has nullok configuration)
Create an account that requires no password.
Using ssh logon to the machine using the empty password account name.
If the user presses enter on the password prompt (NULL password) access is
disallowed. However upon entry of any random string the user is allowed
to enter.
>Fix:
This problem can be overcome if "pam_authenticate" is called with
"PAM_DISALLOW_NULL_AUTHTOK" flag if empty passwords are not permitted.
A possible patch for the problem is given below:
*** auth-pam.c Tue Apr 24 00:08:37 2001
--- auth-amrita.c Tue Nov 6 22:58:46 2001
***************
*** 203,208 ****
--- 203,209 ----
{
extern ServerOptions options;
int pam_retval;
+ int flags=0;
do_pam_set_conv(&conv);
***************
*** 217,223 ****
__pampasswd = password;
pamstate = INITIAL_LOGIN;
! pam_retval = do_pam_authenticate(0);
if (pam_retval == PAM_SUCCESS) {
debug("PAM Password authentication accepted for "
"user \"%.100s\"", pw->pw_name);
--- 218,227 ----
__pampasswd = password;
pamstate = INITIAL_LOGIN;
! if ( options.permit_empty_passwd == 0 )
! flag = PAM_DISALLOW_NULL_AUTHTOK;
!
! pam_retval = do_pam_authenticate(flags);
if (pam_retval == PAM_SUCCESS) {
debug("PAM Password authentication accepted for "
"user \"%.100s\"", pw->pw_name);
---------------
Jayaraj
Amrita Institute of Computer Technology, Amritapuri
India
More information about the openssh-unix-dev
mailing list