what you don't know can hurt you
Home Files News &[SERVICES_TAB]About Contact Add New

tmp-advisory.txt

tmp-advisory.txt
Posted Aug 17, 1999
Authored by mudge@l0pht.com

L0pht (mini)Advisory - Just about every OS out there is replete with programs that insecurely handle files in publicly accesible temporary directories.

tags | exploit
SHA-256 | 7c56fbb452a59b584cfe504fc6c4abd39f8bd034cb7ab418e773b2613b6d0607

tmp-advisory.txt

Change Mirror Download

L0pht Security Tool and (mini)Advisory

Advisory released Jan 8 1999

Application: A tool designed to monitor directory
activity, copy transient files based upon regular
expression matching, syslog upon seeing links created,
etc. etc.

Severity: Just about every OS out there is replete
with programs that insecurely handle files in
publicly accesible temporary directories.

Author: mudge@l0pht.com
http://www.l0pht.com/advisories.html


Overview :

One of the most overlooked areas of exploit attention seems to be the use
of public holding or scratch areas. This tool allows :

. The white-hat: to monitor various directories and optionally log
upon seeing suspicious activity.

. The grey-hat: to run and collect the information to find system state
and information about user trends or new suspicious programs

. The black hat: to ease copying of sensitive, potentially transient, data
and to aid in locating exploitable programs and creating said exploits

Needless to say. It's good to feel comfortable wearing any colour hat.

The tool is available at http://www.L0pht.com/advisories/l0pht-watch.tar.gz

Description :

A common shortcoming of programs is how they treat data and files in temporary
or holding areas. Many people have been silently exploiting many of these
problems for some time now. In a quick-throw-together way I decided to
write a program to both help analyze activity in these scratch areas.
The program is not the best way to do it for an individual architecture (which
would most likely be to hook in front of the system call entry points for
the appropriate file manipulation calls so as not to miss anything that
happens). This was done intentionally to allow quick porting to various
platforms at the loss of a small amount of accuracy.

The problems are of various types and severities. For example, people
calling open(2) while using O_CREAT without O_EXCL, mktemp(3C) being
too predictable, access(2) calls on files and trusting that the information
is still the same later on in ones code, stat(2) as opposed to fstat(2) or
lstat(2) in some situations. Other problems include placing sensitive data
in public places with incorrect permissions.

These problems happen not only in code written by novice coders but many times
by experienced security conscious programmers as well.

Ask Marcus Ranum about the time Casper Dik and I found problems with his
secure code examples in a public talk [side note: Marcus is a good security
conscious programmer - it simply became a case of staring at his own work
and not seeing the bugs that pop out to a new set of eyes. Much akin to
proofreading ones own papers].

Ask the l0phtcrack development team that recently had a temporary file problem
pointed out to them on the windows platform software [side note: the problem
was in the GUI portion of the code, which I did not write. This is not to
say that I haven't had problems with my code in the past, just that this
was not one of mine, which is contrary to what a couple of outspoken people
seem to have thought. ;) We were actually happy that we had the opportunity
to react to the report in the way we always wanted other companies to react
to similar reports. We hope we did alright by everyone. In addition, I
have chopped off another finger of the person who wrote the code - call
it our 'internal incentive program'].

The tool opens the directory specified (defaults to /tmp) and continuously
reads the contents. Upon first read it spits out the list that it has
built (it attempts an ls -l style output). From that point on it shows
any additions or deletions that it sees prefaced with '+' or '-' accordingly.
Other options are for copying files that it witnesses and match regular
expressions, and daemonizing itself and subsequently syslog(3)ing anytime
a symbolic link is created in the directory being watched. I have watched
many, many temp files and have not seen legitimate uses of symbolic links
being created in them other than for exploit purposes.

I suppose the best way to see how / why / what the tool does is a quick
example of some curious behaviour that it witnessed in Solaris 2.5 and
the subsequent silent fix that seems to have been implemented in Solaris
2.6 [note: I looked through Sun's website for references of a patch but
could not find one - it is possible that it is there and I missed it.
However, it seems more likely that Sun fixed the problem for 2.6 and instead
of announcing the problem and issuing a patch for previous versions let
the 2.6 modified version go by as a 'silent fix'. This would imply a
willingess to let users of 2.5 remain vulnerable. There are, hopefully,
other reasons why this would have happened.]

The programs to be examined are crontab(1) and cron(1M).

On Solaris 2.5 we see the following behaviour for crontab when it is
invoked multiple times with -e:

+ -rw------- 1 mudge other 0 Jan 8 00:32 /tmp/crontaba0074F
- -rw------- 1 mudge other 0 Jan 8 00:32 /tmp/crontaba0074F
+ -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074J
- -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074J
+ -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074N
- -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074N
+ -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074R
- -rw------- 1 mudge other 58 Jan 8 00:32 /tmp/crontaba0074R

As one can see, the random value that is created is far from random. In fact,
there are most likely 4 processes invoked throughout the life of crontab
and it's invocation of my EDITOR (vi). Hence the only dynamic value above,
which is the last character, is incremented by 4 each time.

On a Solaris 2.6 machine one notices the following behaviour:

+ -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontab0S0jWF
- -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontab0S0jWF
+ -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontabsp9ND_
- -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontabsp9ND_
+ -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontab0GdcDB
- -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontab0GdcDB
+ -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontabgQ349_
- -rw------- 1 mudge staff 0 Jan 8 08:17 /tmp/crontabgQ349_

The above 2.6 data looks much better than the 2.5 data.

Let us take a look at a situation where root has a recurring cron job that
runs every minute. We will see that cron(1M) will exhibit similar behaviour
as crontab(1) did above:

On the Solaris 2.5 machine:

+ -rw------- 1 root other 0 Jan 8 00:43 /tmp/croutTGEa0002o
- -rw------- 1 root other 0 Jan 8 00:43 /tmp/croutTGEa0002o
+ -rw------- 1 root other 0 Jan 8 00:44 /tmp/croutUGEa0002o
- -rw------- 1 root other 0 Jan 8 00:44 /tmp/croutUGEa0002o
+ -rw------- 1 root other 0 Jan 8 00:45 /tmp/croutWGEa0002o
- -rw------- 1 root other 0 Jan 8 00:45 /tmp/croutWGEa0002o
+ -rw------- 1 root other 0 Jan 8 00:46 /tmp/croutXGEa0002o
- -rw------- 1 root other 0 Jan 8 00:46 /tmp/croutXGEa0002o
+ -rw------- 1 root other 0 Jan 8 00:47 /tmp/croutYGEa0002o
- -rw------- 1 root other 0 Jan 8 00:47 /tmp/croutYGEa0002o

[it should be noted that with systems without a lot of cron activity (the
cron activity can easilly be determined by running temp-watch for a day or
so and looking at the crout activity) display the same problems between
larger time intervals]

As the reader can see, the only value being incremented in the above example
is the 11th digit. Completely predictable.

Let us again take a look at a Solaris 2.6 machine:

+ -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutZBA0M9pVP
- -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutZBA0M9pVP
+ -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutACAnHfw3_
- -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutACAnHfw3_
+ -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutBCA0Fy3q8
- -rw------- 1 root other 0 Jan 8 08:43 /tmp/croutBCA0Fy3q8
+ -rw------- 1 root other 0 Jan 8 08:44 /tmp/croutCCAl2fDT_
- -rw------- 1 root other 0 Jan 8 08:44 /tmp/croutCCAl2fDT_
+ -rw------- 1 root other 0 Jan 8 08:44 /tmp/croutDCA0FPrOc
- -rw------- 1 root other 0 Jan 8 08:44 /tmp/croutDCA0FPrOc

Again - this looks much better in comparison.

Why does any of this matter? What happens when the filename about to be
created is a symbolic link? In the above cases the link is followed and
the file created. What happens if the persons umask is less strict? The
programs above inherit it. If you cannot see where this is going then
you might think about slowly getting up from the desk and asking for
a job transfer if you are a Unix security person or systems administrator
with a security component.

Try running the tool for a day and look through the output. You will most
likely be surprised by the droppings that are created and how many different
programs do not even make a paultry attempt to check for file existence or
create a random program name [ ie strings /usr/sbin/rpcbind | grep tmp to
see what fun one can have when rpcbind catches a signal and dies creating
those files as root and following links, there are many easy rootin'
erobs people will find too ].

Anyway - the tool, and it's source are free. As people might be able to tell,
it's getting late here so this message is becoming even more thin near the
bottom as I try to wrap up and experience this thing called sleep that I
catch people talking about.

I hope people find it useful.

cheers,

mudge@l0pht.com
---------------
For more L0pht (that's L - zero - P - H - T) advisories check out:
http://www.l0pht.com/advisories.html
---------------
Login or Register to add favorites

File Archive:

September 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Sep 1st
    261 Files
  • 2
    Sep 2nd
    17 Files
  • 3
    Sep 3rd
    38 Files
  • 4
    Sep 4th
    52 Files
  • 5
    Sep 5th
    23 Files
  • 6
    Sep 6th
    27 Files
  • 7
    Sep 7th
    0 Files
  • 8
    Sep 8th
    1 Files
  • 9
    Sep 9th
    16 Files
  • 10
    Sep 10th
    38 Files
  • 11
    Sep 11th
    21 Files
  • 12
    Sep 12th
    40 Files
  • 13
    Sep 13th
    18 Files
  • 14
    Sep 14th
    0 Files
  • 15
    Sep 15th
    0 Files
  • 16
    Sep 16th
    21 Files
  • 17
    Sep 17th
    51 Files
  • 18
    Sep 18th
    23 Files
  • 19
    Sep 19th
    48 Files
  • 20
    Sep 20th
    36 Files
  • 21
    Sep 21st
    0 Files
  • 22
    Sep 22nd
    0 Files
  • 23
    Sep 23rd
    38 Files
  • 24
    Sep 24th
    65 Files
  • 25
    Sep 25th
    24 Files
  • 26
    Sep 26th
    26 Files
  • 27
    Sep 27th
    0 Files
  • 28
    Sep 28th
    0 Files
  • 29
    Sep 29th
    0 Files
  • 30
    Sep 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2024 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close