Date: Wed, 21 Aug 2002 21:40:05 -0700 (PDT) From: "Andrew L. Neporada" <andr@dgap.mipt.ru> To: freebsd-bugs@FreeBSD.org Subject: Re: bin/40266 telnet SRA sometimes fails at authentificating Message-ID: <200208220440.g7M4e5jv083347@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/40266; it has been noted by GNATS.
From: "Andrew L. Neporada" <andr@dgap.mipt.ru>
To: bug-followup@freebsd.org
Cc:
Subject: Re: bin/40266 telnet SRA sometimes fails at authentificating
Date: Thu, 22 Aug 2002 08:35:42 +0400
It take me some time to find out why our telnetd rejects right password
with probability (1 - 1/256)^(strlen(login) + strlen(password)) ;-)
The fix is quite simple, though:
Index: crypto/telnet/libtelnet/pk.c
===================================================================
RCS file: /home/ncvs/src/crypto/telnet/libtelnet/pk.c,v
retrieving revision 1.9
diff -u -r1.9 pk.c
--- crypto/telnet/libtelnet/pk.c 30 Nov 2001 21:06:34 -0000 1.9
+++ crypto/telnet/libtelnet/pk.c 22 Aug 2002 02:59:23 -0000
@@ -251,7 +251,7 @@
for (l=0,op=0;l<strlen(in)/2;l++,op+=2) {
if(in[op] == '0' && in[op+1] == '0') {
buf[l] = '\0';
- break;
+ continue;
}
if (in[op] > '9')
n1 = in[op] - 'A' + 10;
P.S. Attached test program will help you to observe the bug. Save it in /tmp
then run following commands
cd /tmp
cp /usr/src/crypto/telnet/libtelnet/pk.c .
cp /usr/src/crypto/telnet/libtelnet/pk.h .
cc -c pk.c
cc -c test_pk.c
cc -o tpk test_pk.o pk.o -lmp -lcrypto
./tpk
....
----- begin test_pk.c -----
#include <stdio.h>
#include <string.h>
#include "pk.h"
int
main(void)
{
char *user, *xuser, *pass, *xpass;
char pka[HEXKEYBYTES + 1], ska[HEXKEYBYTES + 1];
char pkb[HEXKEYBYTES + 1], skb[HEXKEYBYTES + 1];
DesData cl_ck, ser_ck;
IdeaData cl_ik, ser_ik;
int i;
user = (char *)malloc(256);
pass = (char *)malloc(256);
xuser = (char *)malloc(513);
xpass = (char *)malloc(513);
if (user == NULL || pass == NULL || xuser == NULL || xpass == NULL) {
fprintf(stderr, "malloc failed");
return (1);
}
for (i = 0; i < 1000; i++) {
genkeys(pka, ska);
genkeys(pkb, skb);
common_key(ska, pkb, &cl_ik, &cl_ck);
common_key(skb, pka, &ser_ik, &ser_ck);
memset(user, 0, 256);
memset(pass, 0, 256);
memset(xuser, 0, 513);
memset(xpass, 0, 513);
strcpy(user, "test1234");
strcpy(pass, "qwerty12");
printf("Encrypting...\n");
pk_encode(user, xuser, &cl_ck);
pk_encode(pass, xpass, &cl_ck);
printf("%s -> %s\n", user, xuser);
printf("%s -> %s\n", pass, xpass);
printf("Decrypting...\n");
memset(user, 0, 256);
memset(pass, 0, 256);
pk_decode(xuser, user, &ser_ck);
pk_decode(xpass, pass, &ser_ck);
printf("%s -> %s\n", xuser, user);
printf("%s -> %s\n", xpass, pass);
if (strcmp("test1234", user) || strcmp("qwerty12", pass)) {
printf("bang!\n");
break;
}
}
return(0);
}
----- end test_pk.c -----
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200208220440.g7M4e5jv083347>
