Casinos Not On GamstopNon Gamstop CasinosCasinos Not On GamstopOnline Casinos UKNon Gamstop Casino
22th Jun 2000 [SBWID-154]
COMMAND
	    libdes
SYSTEMS AFFECTED
	    Domestic US NetBSD-current between 19990624 and 20000622
PROBLEM
	    Following is based on NetBSD Security Advisory 2000-007.  On  June
	    24,  1999,   a  new   version  of   "libdes"  was   imported  into
	    NetBSD-current.  This version was  derived from version 4 of  Eric
	    Young's  libdes,  and  replaced  the  previous  version, which was
	    derived from version 2 of Eric Young's libdes.  Certain  functions
	    required  for  compatibility  with  the  DES library included with
	    MIT's  Kerberos  v4  distribution  were  not  included  in the new
	    version of Eric Young's libdes (which is also the version included
	    in SSLeay and OpenSSL).
	    Unfortunately, the replacement versions of these functions written
	    during the integration process have a serious bug. If /dev/urandom
	    is      not      present      and      functioning      correctly,
	    des_init_random_number_generator seeds the random number generator
	    with constant data, causing the generation of keys which are  easy
	    to determine.   The following programs  which are included  in the
	    NetBSD distribution are impacted by this bug:
	
	        - /usr/bin/telnet
	        - /usr/libexec/telnetd
	        - /usr/sbin/kadmin
	        - /usr/sbin/kdb_edit
	        - /usr/sbin/kdb_init
	        - /usr/sbin/kerberos
	        - /usr/sbin/ksrvutil
	
	    Other  programs  which  use  the  des_init_random_number_generator
	    function, such as some programs which use Kerberos version 4,  are
	    also impacted.   Kerberos service keys  which were generated  on a
	    system exhibiting this bug *must* be regenerated, or the  Kerberos
	    service principals in question will have no security.
	    The   functions   reimplemented    for   the   integration    were
	    des_set_random_generator_seed,       des_new_random_key,       and
	    des_init_random_number_generator.  The  API used by  many Kerberos
	    version 4 programs to obtain random DES keys is relatively simple.
	    des_init_random_number_generator  is  called  to  initialize   the
	    random number generator with a secret seed, such as a key obtained
	    from the KDC.   Environmental data is  used to permute  the secret
	    seed  so  that  multiple  callers  with  the  same  seed  will get
	    different output streams from the random number generator.   After
	    an     initial     use     of    des_init_random_number_generator,
	    des_new_random_key is called  to get 64  bits at a  time of random
	    data.
	    Unfortunately,  in  the  implementation  present  in  NetBSD  from
	    19990624 until 20000622, a misplaced "memset" call in the body  of
	    des_init_random_number_generator  zeroes  the  seed  data  before,
	    rather than  after, use.   While a  small amount  of environmental
	    data is mixed  in on each  call to des_new_random_key,  the output
	    will not be  sufficiently random to  provide reasonable levels  of
	    security.   Fortunately,  if  /dev/urandom  is  present and can be
	    read,  des_new_random_key  will  use  it  instead of the DES-based
	    random number generator, and is thus not vulnerable.
	    Credit  goes  to  Jason  Thorpe  for  noticing  the  problem while
	    integrating  libcrypto  into  the  main  NetBSD source tree, which
	    involved again replacing libdes.
SOLUTION
	    No formal releases of NetBSD are vulnerable.  NetBSD-current since
	    20000622 is not vulnerable.  Systems running NetBSD-current should
	    be upgraded  to a  source tree  later than  20000622.   You should
	    ensure that  you are  building libdes  as a  symlink to libcrypto,
	    from the  "lib/libdes" directory  in the  source tree  rather than
	    from "domestic" or "crypto-us", which are obsolete.
	    If  an  upgrade  is  not  possible,  a very quick workaround is to
	    ensure  that  /dev/urandom  is  present  and  functioning  on your
	    system.   It   is  important   to  confirm   not  just   that  the
	    /dev/urandom  device  node  exists,  but  is  also readable by all
	    users and kernel  random number driver  is in fact  present in the
	    running kernel.  To verify, as an unprivileged user, type:
	
	        dd if=/dev/urandom of=/dev/null bs=64 count=1
	
	    at a shell prompt.  If the output of dd starts with the following,
	    your system is not vulnerable:
	
	        1+0 records in
	        1+0 records out
	
	    If it is not possible to patch your source tree, it is  imperative
	    that  you  ensure  that  future  kernels always include the random
	    number  generator,  or  your  system  will become vulnerable; make
	    sure that
	
	        pseudo-device rnd
	
	    is  present  and  not  commented  out in your kernel configuration
	    file.  You then need  to rebuild, install the newly  built kernel,
	    and reboot. For more information on how to do this, see:
	
	        http://www.netbsd.org/Documentation/kernel/#building_a_kernel
	
	    If  neither  approach  is  feasible,  the  following  patch can be
	    applied  to  src/crypto-us/lib/libdes/rnd_keys.c  in  a vulnerable
	    source distribution of NetBSD to correct the problem:
	
	    --- rnd_keys.c  1999/07/30 19:41:06     1.5
	    +++ rnd_keys.c  2000/06/22 00:01:26
	    @@ -75,12 +75,12 @@
	       snprintf(accum, 512, "%ld%ld%d%s%d%qd", when.tv_sec, when.tv_usec,
	                                         getpid(), hname, getuid(), *seed);
	    -  memset(accum, 0, 512);
	    -
	       SHA1Update(&sha, (u_char *)accum, strlen(accum));
	       SHA1Final(results, &sha);
	    +  memset(accum, 0, 512);
	    +
	       des_random_seed(results);    /* XXX uses only first 8 bytes! */
	       memset(results, 0, 20);
	
	    Once the  patch is  applied, build  and install  a new  version of
	    libdes.    If   the   system   in   question   is   a  server  for
	    kerberos-authenticated  services,  you  should  change the service
	    keys  for  the  system  once  the  system  software is upgraded to
	    include  the  fixes  described  above;  you  can typically use the
	    ksrvutil command to do this.
	

Internet highlights