<<< Date Index >>>     <<< Thread Index >>>

problems with database files in 'SignatureDB'




-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- -
 File: LynX-adv4_SignatureDB.txt
 Date: 15/02/2004
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - 

 o NAME: problems with database files in 'SignatureDB'

 o CLASS: denial of service (DOS)

 o PROGRAMM: SignatureDB [http://pldaniels.com/signaturedb/]
  - Affected versions: 0.1.1
  - Immune versions: -

 o OS: Linux and UNIX clones

 o VENDOR: Paul L Daniels <pldaniels@xxxxxxxxxxxxx>

 o DESCRIPTION:
   'SignatureDB' is actually two components, a signature database which is
  available on the internet, and a 'signatureID' program, which scans your 
files.
  You can in effect consider 'SDB/ID' in the same way you consider and use an
  'AntiVirus' program, but 'SDB/ID' are aimed at a slightly different sector of
  the industry. Its purpose is to provide signatures/fingerprints of common,
  annoying emails/files, not specifically viruses.
   
 o VULNERABILITY DESCRIPTION:
   'SignatureDB' package contain 'sdbscan' program, which scans files, in 
  according with specified database file. It is possible to create a big 'key'
  parameter in this file, that will reduce to 'Segmentation fault'. Function 
which
  work with contents of database files, are located in 'ringsearch.c' file. 
   After '#' - going my comments.
   
   Cut from file: 'ringsearch.h'
   ...
   33 struct _infonode {
   34  char key[20];
   35  char *comment;
   36  int major;
   37  int minor;
   38  int flags;
   39 };
   ...

   Cut from file: 'ringsearch.c'
   ...
   537 int RS_load_keys( struct _snode *parent, char *fname ){
                        /* # where 'fname' - database filename */
   ...
   541  char line[10240]; /* # allocating memory for 10240 bytes, and then use 
*/
                          /* # only 1024, maybe author was mistaken and last 0 
*/
                          /* # is unnecessary :) */
   ...
   562   while (fgets(line, 1023, f)){
   ...
   582    sprintf(info->key,"%s",key); /* # size of 'key' are not checking, its 
*/
                                       /* # can be =< 1018 bytes, and size of */
                                       /* # 'info->key' is equal 20 bytes, so */
                                       /* # 'info->key' can be overflowed */
   ...

   Its only first version of 'SignatureDB', so i think that in the next versions
  this problem will be fixed.
   P.S. Sorry, for my poor english :).

 o VULNERABILITY PREVENTION:
   Instead of using 'sprintf' function, will be more correct to use function
  'snprintf'.

 o EXPLOITING:
   It is possible to specify configuration file for 'sdbscan' program, in this
  file you may type path to your own database file, which contents can cause
  buffer overflow and then 'Segmentation fault'.
   
   Example of exploiting :
   
   [LynX@ /tmp]$ cat my.conf
   dbfile=/tmp/fake.db
   verbose=1
   fastscan=0
   fastexit=0
   [LynX@ /tmp]$ cat fake.db
   AAA ... '1000 x A' ... AAA:1:1:1:1:A:A
   [LynX@ /tmp]$ sdbscan --conf_file=my.conf
   Segmentation fault (core dumped) 
   [LynX@ /tmp]$
 
 o VENDOR RESPONSE:
   I sent notification mail to the Paul Daniels <pldaniels@xxxxxxxxxxxxx> and
  did not received an answer.

 o CREDITS:
  - Thanks: nob0dy, netc0de, Xarth
  - Greets: R00T T34M [http://rootteam.void.ru],
            void,
            LimpidByte,
 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- -
                                                                Discovered by 
LynX
                                                                     
<_LynX@xxxxx>
                                               / close your eyes & dream with 
me /
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - 


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iEYEARECAAYFAkAv8HMACgkQjvZ3gq5fCnGA8gCgnqItklxup0YzArOkT6nn+kNI
5BgAoOf+SFgV1vXH73RcdzIWXbdXa8NK
=iIIl
-----END PGP SIGNATURE-----