Hi,

I've just read your message on [EMAIL PROTECTED]
mailing list archives:
http:[EMAIL PROTECTED]/msg02976.html

I just thought you'd like to know that there's an
extremely serious security problem, anyone can
download every single file from your server! And
that's not all, it's also possible to invoke any shell
command!

I'll explain it:

To download any file, you need to use PATH_INFO (and
remember that any cracker can use any PATH_INFO he
likes, he just needs to manually enter URL in his web
browser) containing something like
"../../../.htpasswd" or "../../../../../../etc/passwd"
(the cracker just has to experiment with number of
preceeding "../" strings) and your script will send
him ANY FILE!

Now with running any shell commands:

It's possible to use such PATH_INFO which after

$file = $ENV{PATH_INFO};
@pathitems = split("/",$file);
shift(@pathitems);
shift(@pathitems);
shift(@pathitems);
$file = join("/",@pathitems);

will give "| rm -rf / " stored in $file variable,
which after the command

open(OUT,"$file");

will start to delete every file in directories your
web server has write access to!

PATH_INFO has to be "a/b/c/| rm -rf / " and you have a
big problem. Any cracker can run ANY COMMAND he likes
on your server. He can read files, remove files, write
to files, alter logs, use your server to spam or
denial of service attacks - ANYTHING!

ALWAYS USE THE TAINT MODE !!!

Use the -T switch:

#!/usr/bin/perl -wT

and untaint the $file variable:

die 'INSECURE $file !!!' if $file =~ /\.\./;
if ($file =~ /^([-\w./]+)$/) { $file = $1 }
else { die 'INSECURE $file !!!' }

and now you can use it.

I'm sorry to say this, but I have fired four
people these year for MUCH less important security
holes.

But your code is like an example from the security
lesson on how NOT to write a CGI code. If I saw a code
like this in one of my servers, I'd make an
investigation, because it looks like a backdoor and
I'm affraid the man who did it could have more serious
concequences than just getting fired, especially if it
turns out that this hole was actually used by someone.
I would not believe that it was a mistake of anyone
who knows anything about the most fundamental rules of
CGI code security, so I would assume that it was a
backdoor and that he wanted to compromise my network.

Good advice: Fix it as soon as possible and never EVER
tell your boss about it. If your boss finds out about
it and he only fires you without further
investigation, than he's plain stupid.


__________________________________________________
Do You Yahoo!?
Yahoo! Sports - Coverage of the 2002 Olympic Games
http://sports.yahoo.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to