Tompkins, Michael
2015-Feb-02  16:19 UTC
[Samba] Can login with a bogus username which ends with a "/" or a "\"
We have noticed that if a username, that ends in a "\" or a
"/", tries to login, then the workspace becomes the user name ( up to
the "/" or "\" ) and then username is empty, allowing a
bogus user to authenticate and calls cli_session_setup_guest() to log in
anonymously. This is done in cli_session_setup():
                /* allow for workgroups as part of the username */
                if ((p=strchr_m(user2,'\\')) ||
(p=strchr_m(user2,'/')) ||
                    (p=strchr_m(user2,*lp_winbind_separator()))) {
                                *p = 0;
                                user = p+1;
                                if (!strupper_m(user2)) {
                                                return
NT_STATUS_INVALID_PARAMETER;
                                }
                                workgroup = user2;
                }
I'm guessing that this was intended for a "WORKSPACE/USERNAME"
construct and not for just "USERNAME/". We use smbclient to
authenticate users, for access to services on our machine, so letting bogus
users logon, is not a good thing.
In popt_common_credentials_callback() I added the code:
                case 'U':
                                {
                                                char *lp;
                                                char *puser = SMB_STRDUP(arg);
                                                if
((lp=strchr_m(puser,'%'))) {
                                                                size_t len;
                                                                *lp = 0;
                                                                len =
strlen(puser)-1;                                                                
// +++ added code
                                                                if (
(*(puser+len) == '\\') || (*(puser+len) == '/') )            //
+++ added code
                                                                               
*(puser+len) = 0;                                                             //
+++ added code
                                                               
set_cmdline_auth_info_username(auth_info,
                                                                                
puser);
                                                               
set_cmdline_auth_info_password(auth_info,
                                                                                
lp+1);
                                                                len =
strlen(lp+1);
                                                               
memset(strchr_m(arg,'%')+1,'X',len);
                                                } else {
                                                               
set_cmdline_auth_info_username(auth_info,
                                                                                
puser);
                                                }
                                                SAFE_FREE(puser);
                                }
                                break;
Are there use cases which we aren't thinking of, or does this modification
make sense. Please let us know.
Regards,
Mike
Tompkins, Michael
2015-Feb-09  13:22 UTC
[Samba] Can login with a bogus username which ends with a "/" or a "\"
Re-submitting question, hoping for a yay or nay on the change as to whether my
logic is correct or not ...
Thank you in advance,
- Mike
?                      ?
-----Original Message-----
From: samba-bounces at lists.samba.org [mailto:samba-bounces at lists.samba.org]
On Behalf Of Tompkins, Michael
Sent: Monday, February 02, 2015 11:19 AM
To: samba at lists.samba.org
Cc: USA Xerox Samba
Subject: [Samba] Can login with a bogus username which ends with a "/"
or a "\"
We have noticed that if a username, that ends in a "\" or a
"/", tries to login, then the workspace becomes the user name ( up to
the "/" or "\" ) and then username is empty, allowing a
bogus user to authenticate and calls cli_session_setup_guest() to log in
anonymously. This is done in cli_session_setup():
                /* allow for workgroups as part of the username */
                if ((p=strchr_m(user2,'\\')) ||
(p=strchr_m(user2,'/')) ||
                    (p=strchr_m(user2,*lp_winbind_separator()))) {
                                *p = 0;
                                user = p+1;
                                if (!strupper_m(user2)) {
                                                return
NT_STATUS_INVALID_PARAMETER;
                                }
                                workgroup = user2;
                }
I'm guessing that this was intended for a "WORKSPACE/USERNAME"
construct and not for just "USERNAME/". We use smbclient to
authenticate users, for access to services on our machine, so letting bogus
users logon, is not a good thing.
In popt_common_credentials_callback() I added the code:
                case 'U':
                                {
                                                char *lp;
                                                char *puser = SMB_STRDUP(arg);
                                                if
((lp=strchr_m(puser,'%'))) {
                                                                size_t len;
                                                                *lp = 0;
                                                                len =
strlen(puser)-1;                                                                
// +++ added code
                                                                if (
(*(puser+len) == '\\') || (*(puser+len) == '/') )            //
+++ added code
                                                                               
*(puser+len) = 0;                                                             //
+++ added code
                                                               
set_cmdline_auth_info_username(auth_info,
                                                                                
puser);
                                                               
set_cmdline_auth_info_password(auth_info,
                                                                                
lp+1);
                                                                len =
strlen(lp+1);
                                                               
memset(strchr_m(arg,'%')+1,'X',len);
                                                } else {
                                                               
set_cmdline_auth_info_username(auth_info,
                                                                                
puser);
                                                }
                                                SAFE_FREE(puser);
                                }
                                break;
Are there use cases which we aren't thinking of, or does this modification
make sense. Please let us know.
Regards,
Mike
-- 
To unsubscribe from this list go to the following URL and read the
instructions:  https://lists.samba.org/mailman/options/samba
Reasonably Related Threads
- Lookup sid with libsmbclient (invoked from c# on mono)
- Lookup sid with libsmbclient (invoked from c# on mono)
- bug in parsing the 'username map' in 3.0.5pre1
- FreeBSD, Libmd5, samba 4.9.4 & "smbclient -L" (using password) -> core dump
- [LLVMdev] The use iterator not working...