Date: Thu, 11 Feb 1999 17:37:18 -0500
From: Gary Geisbert <gary@NEWSLETTERS.COM>
To: NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM
Subject: Using FSO in ASP to view just about anything


This active server page opens the FileSystemObject and streams the contents
of the file specified in the "file" parameter.  The problem with FSO is that
you can go 'outside' of the "\InetPub\wwwRoot\" directory using "../".

e.g.
http://www.server.foo/showfile.asp?file=../../global.asa

Another problem is that since the file is being read with a TextStream, ASP
code will not be executed.  So if the file specified is an ASP file, the
results will be similar to the ::$DATA exploit.

For example: If this file was placed on the server of a web hosting company
who allows ASP, a malicious user could use it not only to view the source of
*any* other user's ASP code, but also (with a small modification) stream
data into other users' ASP files.  This would essentially overwrite whatever
is currently there.


-------[ cut here: showfile.asp ]-------

<%
' grab the file from the URL
FileName = Request.QueryString("file")

' create the filesystemobject and open the file
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile(Server.MapPath(FileName))

' read the contents
ShowTheFreakinThing = ts.ReadAll

' display them
Response.Write ShowTheFreakinThing

' EOF
%>

-------[ cut here: showfile.asp ]-------

That's about it.  Email me if you have questions.

-Gary Geisbert (gary@newsletters.com)

--------------------------------------------------------------------

Date: Thu, 11 Feb 1999 16:25:46 -0700
From: Joel Maslak <jmaslak@WIND-RIVER.COM>
To: NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM
Subject: Re: Using FSO in ASP to view just about anything

At 05:37 p.m. 11/02/99 -0500, you wrote:
>This active server page opens the FileSystemObject and streams the contents
>of the file specified in the "file" parameter.  The problem with FSO is that
>you can go 'outside' of the "\InetPub\wwwRoot\" directory using "../".

Yes, this is a fairly well known bug.

Solution?  NTFS permissions.  Simply run each virtual web as a different
user, and make sure that user can't view each other's virtual webs, but
only it's own virtual web.  This feature is actually quite useful when you
need to "break out of the mold" of traditional design.

One thing that should be noted is ANY ActiveX server can be executed by a
user, by simply doing a server.CreateObject in the ASP file.  Obviously,
the security ramifications of this can be quite severe.  You can open up MS
Outlook, and using the mail object, send mail.  Neat feature for some
people, but scarry if you look at some the other interfaces in some of your
applications (think attachments!)...  Do your users really have a
legitimate purpose in starting up, say, Word (never tried this, but I bet
it would work).  This is a much bigger issue.  An example of this use is at:
        http://www.swynk.com/friends/datema/excelface.asp

It would be nice to have a way of limiting what objects can be created by
server.CreateObject (yes, I realize this is probably a big modification).

In addition to this feature, how about...

<!-- #include file="..\ANYDIR\ANYFILE.DAT" -->

You might be able to get access to any file stored on the server w/o
sufficient permissions (think credit card orders).



Joel Maslak
UPDATE -- Generate Web Traffic
http://www.permission-marketing.com/

--------------------------------------------------------------------

Date: Fri, 12 Feb 1999 10:51:07 -0500
From: Russ <Russ.Cooper@RC.ON.CA>
To: NTBUGTRAQ@LISTSERV.NTBUGTRAQ.COM
Subject: Re: Using FSO in ASP to view just about anything

Folks,

I would appreciate it if people would send their responses to Gary
(gary@newsletters.com) and I would ask Gary to summarize to the list.

I let Gary's message out not because it was a bug (and to that extent, I
should have asked Joel to change his message), but because it does
represent a reasonable vulnerability that could be easily overlooked.

In the meantime;

Phillip R. Paradis <paradis@exploremaine.com> said...
This exploit does not work in IIS4 if you deactivate the Allow Parent
Paths option in Internet Services Manager. Under the application root
properties, select configuration, app options, and deselect Allow Parent
Paths. This prevents MapPath from resolving anything with a .. in it.

Martin DEVERA <devik@cdi.cz> said...
>It would be nice to have a way of limiting what objects can be created
by
>server.CreateObject (yes, I realize this is probably a big
modification).

there is a way, you can set perms to a registry value
HKCR\Classes\{YourID} and so disallow particular user groups to read it.
It effectively disables user to create an object.

Cheers,
Russ - NTBugtraq moderator

