Problem and Patch: Multiple keys in ssh.com V2 agent
Ulrich Kiermayr
uk at ap.univie.ac.at
Thu Nov 30 21:06:13 EST 2000
Hello!
I recently discoverd a problem with ssh.com's ssh-agent2 and OpenSSH:
If I have more than one key in my agent, then the agent tries to
authenticicate me with every one of them at the OpenSSH server; but none
of them is a valid key for that server. The Problem is that the Server
increments the authctxt->attempt at every of that tries. So even if you
want to login with a password at that server, you have to disable the
agent first in order to get that chance. If the agent is running, you run
out of tries _before_ you are able to enter a password.
I have patched a little at auth2.c and auth.h [1], but I am absoluteley
not sure if that patch is 100% ok and does not cause any other Problems. For
me it works fine :)
The errors in the sshd:
debug1: userauth-request for user XXXXXX service ssh-connection method none
debug1: attempt #1
debug1: Starting up PAM with username "XXXXXX"
Failed none for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
debug1: userauth-request for user XXXXXX service ssh-connection method publickey
debug1: attempt #2
debug1: test whether pkalg/pkblob are acceptable
Failed publickey for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
debug1: userauth-request for user XXXXXX service ssh-connection method publickey
debug1: attempt #3
debug1: test whether pkalg/pkblob are acceptable
Failed publickey for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
debug1: userauth-request for user XXXXXX service ssh-connection method publickey
debug1: attempt #4
debug1: test whether pkalg/pkblob are acceptable
Failed publickey for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
debug1: userauth-request for user XXXXXX service ssh-connection method publickey
debug1: attempt #5
debug1: test whether pkalg/pkblob are acceptable
Failed publickey for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
debug1: userauth-request for user XXXXXX service ssh-connection method none
debug1: attempt #6
Failed none for XXXXXX from XXX.XXX.XXX.XXX port 34257 ssh2
Disconnecting: too many failed userauth_requests
debug1: Calling cleanup 0x12000c640(0x0)
debug1: Calling cleanup 0x120029180(0x0)
For the Record:
Client: ssh: SSH Secure Shell 2.3.0 (non-commercial version) on
i686-pc-linux-gnu
RedHat Linux 6.2 (i386)
Server: sshd version OpenSSH_2.3.0p1
RedHat Linux 6.2 (alpha)
[1] My crude solution is not to increment the counter, if method is
pubkey. I am not sure if this is a good idea, but at least i am able
to log into that machine again without 'ssh-add -L' before. The main
problem is that I have no way of testing that patch under other
Platforms than Linux.
P.S.: the same proble occurs if OpenSSH 2.1 under AIX is server.
P.P.S.: If this bug was addressed before, please tell me where to find a
fix and forget the rest :)
LL&P uk
--
---------------------------------------------------------------------------
Ulrich Kiermayr Zentraler Informatikdienst der Universitaet Wien
Security Team Boltzmanngasse 5, A-1090 Vienna, Austria
---------------------------------------------------------------------------
eMail: ulrich.kiermayr at univie.ac.at Tel: (+43 1) 4277 / 14104
Hotline: security.zid at univie.ac.at Fax: (+43 1) 4277 / 9141
Web: http://www.univie.ac.at/zid/security
---------------------------------------------------------------------------
GPG Key fingerprint = BF0D 5749 4DC1 ED74 AB67 7180 105F 491D A8D7 64D8
-------------- next part --------------
diff -ru openssh-2.3.0p1.orig/auth.h openssh-2.3.0p1/auth.h
--- openssh-2.3.0p1.orig/auth.h Thu Nov 30 08:59:39 2000
+++ openssh-2.3.0p1/auth.h Thu Nov 30 10:32:54 2000
@@ -45,8 +45,8 @@
int allowed_user(struct passwd * pw);
struct passwd * auth_get_user(void);
-#define AUTH_FAIL_MAX 6
-#define AUTH_FAIL_LOG (AUTH_FAIL_MAX/2)
+#define AUTH_FAIL_MAX 5
+#define AUTH_FAIL_LOG AUTH_FAIL_MAX
#define AUTH_FAIL_MSG "Too many authentication failures for %.100s"
#endif
diff -ru openssh-2.3.0p1.orig/auth2.c openssh-2.3.0p1/auth2.c
--- openssh-2.3.0p1.orig/auth2.c Thu Nov 30 08:59:39 2000
+++ openssh-2.3.0p1/auth2.c Thu Nov 30 10:37:56 2000
@@ -189,21 +189,14 @@
char *user, *service, *method;
int authenticated = 0;
+ authctxt->attempt++;
if (authctxt == NULL)
fatal("input_userauth_request: no authctxt");
- if (authctxt->attempt++ >= AUTH_FAIL_MAX) {
-#ifdef WITH_AIXAUTHENTICATE
- loginfailed(authctxt->user?authctxt->user:"NOUSER",
- get_canonical_hostname(), "ssh");
-#endif /* WITH_AIXAUTHENTICATE */
- packet_disconnect("too many failed userauth_requests");
- }
-
user = packet_get_string(NULL);
service = packet_get_string(NULL);
method = packet_get_string(NULL);
debug("userauth-request for user %s service %s method %s", user, service, method);
- debug("attempt #%d", authctxt->attempt);
+ debug("attempt #%d of %d", authctxt->attempt, AUTH_FAIL_MAX);
if (authctxt->attempt == 1) {
/* setup auth context */
@@ -254,6 +247,18 @@
if (authenticated && authctxt->user && !do_pam_account(authctxt->user, NULL))
authenticated = 0;
#endif /* USE_PAM */
+
+ if (authenticated == 0 && authctxt->attempt >= AUTH_FAIL_MAX) {
+#ifdef WITH_AIXAUTHENTICATE
+ loginfailed(authctxt->user?authctxt->user:"NOUSER",
+ get_canonical_hostname(), "ssh");
+#endif /* WITH_AIXAUTHENTICATE */
+ packet_disconnect("too many failed userauth_requests");
+ }
+ if ( strcmp(method,"publickey") == 0 ) {
+ authctxt->attempt--;
+ }
+
/* Log before sending the reply */
userauth_log(authctxt, authenticated, method);
More information about the openssh-unix-dev
mailing list