|
Q1:
How do I set the file permissions of my server and document
roots?
Q2:
I'm running a server that provides a whole bunch of optional
features. Are any of them security risks?
Q3:
I hear that running the server as "root" is a bad idea. Is
this true?
Q4:
I want to share the same document tree between my ftp and
Web servers. Is there any problem with this idea?
Q5:
Can I make my site completely safe by running the server in
a "chroot" environment?
Q6:
My local network runs behind a firewall. Can I use it to increase
my Web site's security?
To maximize security, you should adopt a strict "need to know"
policy for both the document root (where HTML documents are
stored) and the server root (where log and configuration files
are kept). It's most important to get permissions right in the
server root because it is here that CGI scripts and the sensitive
contents of the log and configuration files are kept.
You need to protect the server from the prying eyes of both
local and remote users. The simplest strategy is to create
a "www" user for the Web administration/webmaster and a "www"
group for all the users on your system who need to author
HTML documents. On Unix systems edit the /etc/passwd file
to make the server root the home directory for the www user.
Edit /etc/group to add all authors to the www group.
The server root should be set up so that only the www user
can write to the configuration and log directories and to
their contents. It's up to you whether you want these directories
to also be readable by the www group. They should _not_ be
world readable. The cgi-bin directory and its contents should
be world executable and readable, but not writable (if you
trust them, you could give local web authors write permission
for this directory). Following are the permissions for a sample
server root:
drwxr-xr-x 5 www www 1024 Aug 8 00:01 cgi-bin/
drwxr-x--- 2 www www 1024 Jun 11 17:21 conf/
-rwx------ 1 www www 109674 May 8 23:58 httpd
drwxrwxr-x 2 www www 1024 Aug 8 00:01 htdocs/
drwxrwxr-x 2 www www 1024 Jun 3 21:15 icons/
drwxr-x--- 2 www www 1024 May 4 22:23 logs/
The document root has different requirements. All files
that you want to serve on the Internet must be readable by
the server while it is running under the permissions of user
"nobody". You'll also usually want local Web authors to be
able to add files to the document root freely. Therefore you
should make the document root directory and its subdirectories
owned by user and group "www", world readable, and group writable:
drwxrwxr-x 3 www www 1024 Jul 1 03:54 contents
drwxrwxr-x 10 www www 1024 Aug 23 19:32 examples
-rw-rw-r-- 1 www www 1488 Jun 13 23:30 index.html
-rw-rw-r-- 1 lstein www 39294 Jun 11 23:00 resource_guide.html
Many servers allow you to restrict access to parts of the
document tree to Internet browsers with certain IP addresses
or to remote users who can provide a correct password (see
below). However, some Web administrators may be worried about
unauthorized _local_ users gaining access to restricted documents
present in the document root. This is a problem when the document
root is world readable.
One solution to this problem is to run the server as something
other than "nobody", for example as another unprivileged user
ID that belongs to the "www" group. You can now make the restricted
documents group- but not world-readable (don't make them group-writable
unless you want the server to be able to overwrite its documents!).
The documents can now be protected for prying eyes both locally
and globally. Remember set the read and execute permissions
for any restricted server scripts as well.
The CERN server generalizes this solution by allowing the
server to execute under different user and group privileges
for each part of a restricted document tree. See the CERN
documentation for details on how to set this up.
If your server starts up as root but runs as
another user, then it's especially important that the
logs directory not be writable by the user that the server
runs as. For example, both the Netscape FastTrack and SuiteSpot
servers come with the logs directory writable by the user
that the server runs as (i.e. as "nobody" if you choose the
default configuration values). This can make the effect of
some CGI bugs much worse than they would normally be. For
example if a CGI bug enables a remote user to run arbitrary
commands on the server, then the remote user can also gain
root access to the server by exploiting the bug to replace
a log file with a symlink to /etc/passwd. When the server
restarts, the symlink will result in /etc/passwd being chown'd
to the server user. The remote user can now exploit the CGI
bug again to add an entry to /etc/passwd. The suggested workaround
is to change the ownership of the logs directory so that it's
not writable by the server user, and then create empty log
and pid files that are owned by the server user (the server
won't start up if it can't open these files.) Although this
solution is less than optimal, because it allows crackers
to tamper with the log files, it is much better than the default
configuration. This bug may also be present in other commercial
servers. (Thanks to Laura Pearlman
for this information.)
Yes. Many features that increase the convenience of using and
running the server also increase the chances of a security breach.
Here is a list of potentially dangerous features. If you don't
absolutely need them turn them off.
- Automatic directory listings
- Knowledge is power and the more the remote hacker can
figure out about your system the more chance for him to
find loopholes. The automatic directory listings that the
CERN, NCSA, Netscape, Apache, and other servers offer are
convenient, but have the potential to give the hacker access
to sensitive information. This information can include:
Emacs backup files containing the source code to CGI scripts,
source-code control logs, symbolic links that you once created
for your convenience and forgot to remove, directories containing
temporary files, etc.
Of course, turning off automatic directory listings
doesn't prevent people from fetching files whose names
they guess at. It also doesn't avoid the pitfall of an
automatic text keyword search program that inadvertently
adds the "hidden" file to its index. To be safe, you should
remove unwanted files from your document root entirely.
- Symbolic link following
- Some servers allow you to extend the document tree with
symbolic links. This is convenient, but can lead to security
breaches when someone accidentally creates a link to a sensitive
area of the system, for example /etc. A safer way to extend
the directory tree is to include an explicit entry in the
server's configuration file (this involves a PathAlias directive
in NCSA-style servers, and a Pass rule in the CERN server).
The NCSA and Apache servers allows you to turn symbolic
link following off completely. Another option allows you
to enable symbolic link following only if the owner of
the link matches the owner of the link's target (i.e.
you can compromise the security of a part of the document
tree that you own, but not someone else's part).
- Server side includes
- The "exec" form of server side includes are a major security
hole. Their use should be restricted to trusted users or
turned off completely. In NCSA httpd and Apache, you can
turn off the exec form of includes in a directory by placing
this statement in the appropriate directory control section
of access.conf:
Options IncludesNoExec
- User-maintained directories
- Allowing any user on the host system to add documents
to your Web site is a wonderfully democratic system. However,
you do have to trust your users not to open up security
holes. This can include their publishing files that contain
sensitive system information, as well as creating CGI scripts,
server side includes, or symbolic links that open up security
holes. Unless you really need this feature, it's best to
turn it off. When a user needs to create a home page, it's
probably best to give him his own piece of the document
root to work in, and to make sure that he understands what
he's doing. Whether home pages are located in user's home
directories or in a piece of the document root, it's best
to disallow server-side includes and CGI scripts in this
area.
This has been the source of some misunderstanding and disagreement
on the Net. Most servers are launched as root so that they can
open up the low numbered port 80 (the standard HTTP port) and
write to the log files. They then wait for an incoming connection
on port 80. As soon as they receive this connection, they fork
a child process to handle the request and go back to listening.
The child process, meanwhile, changes its effective user ID
to the user "nobody" and then proceeds to process the remote
request. All actions taken in response to the request, such
as executing CGI scripts or parsing server-side includes, are
done as the unprivileged "nobody" user.
This is not the scenario that people warn about when they
talk about "running the server as root". This warning is about
servers that have been configured to run their _child processes_
as root, (e.g. by specifying "User root" in the server configuration
file). This is a whopping security hole because every CGI
script that gets launched with root permissions will have
access to every nook and cranny in your system.
Some people will say that it's better not to start the server
as root at all, warning that we don't know what bugs may lurk
in the portion of the server code that controls its behavior
between the time it starts up and the time it forks a child.
This is quite true, although the source code to all the public
domain servers is freely available and there don't _seem_
to be any bugs in these portions of the code. Running the
server as an ordinary unprivileged user may be safer. Many
sites launch the server as user "nobody", "daemon" or "www".
However you should be aware of two potential problems with
this approach:
- You won't be able to open port 80 (at least not on Unix
systems). You'll have to tell the server to listen to another
port, such as 8000 or 8080.
- You'll have to make the configuration files readable
by the same user ID you run the server under. This opens
up the possibility of an errant CGI script reading the server
configuration files. Similarly, you'll have to make the
log files both readable and writable by this user ID, making
it possible for a subverted server or CGI script to alter
the log. See the discussion of file permissions above.
Many sites like to share directories between the FTP daemon
and the Web daemon. This is OK so long as there's no way that
a remote user can upload files that can later be read or executed
by the Web daemon.
Consider this scenario: the WWW server that has been configured
to execute any file ending with the extension ".cgi". Using
your ftp daemon, a remote hacker uploads a perl script to
your ftp site and gives it the .cgi extension. He then uses
his browser to request the newly-uploaded file from your Web
server. Bingo! he's fooled your system into executing the
commands of his choice.
You can overlap the ftp and Web server hierarchies, but
be sure to limit ftp uploads to an "incoming" directory that
can't be read by the "nobody" user.
You can't make your server completely safe, but you can increase
its security significantly in a Unix environment by running
it in a chroot environment. The chroot system command places
the server in a "silver bubble" in such a way that it can't
see any part of the file system beyond a directory tree that
you have set aside for it. The directory you designate becomes
the server's new root "/" directory. Anything above this directory
is inaccessible.
In order to run a server in a chroot environment, you have
to create a whole miniature root file system that contains
everything the server needs access to. This includes special
device files and shared libraries. You also need to adjust
all the path names in the server's configuration files so
that they are relative to the new root directory. To start
the server in this environment, place a shell script around
it that invokes the chroot command in this way:
chroot /path/to/new/root /server_root/httpd
Setting up the new root directory can be tricky and is beyond
the scope of this document. See the author's book (above), for
details. You should be aware that a chroot environment is most
effective when the new root directory is as barren as possible.
There shouldn't be any interpreters, shells, or configuration
files (including /etc/passwd!) in the new root
directory. Unfortunately this means that CGI scripts that rely
on Perl or shells won't run in the chroot environment. You can
add these interpreters back in, but you lose some of the benefits
of chroot.
Also be aware that chroot only protects files; it's not
a panacea. It doesn't prevent hackers from breaking into your
system in other ways, such as grabbing system maps from the
NIS network information service, or playing games with NFS.
You can use a firewall to enhance your site's security in a
number of ways. The most straightforward use of a firewall is
to create "internal site", one that is accessible only to computers
within your own local area network. If this is what you want
to do,then all you need to do is to place the server INSIDE
the firewall:
other hosts
\
server <-----> FIREWALL <------> OUTSIDE
/
other hosts
However, if you want to make the server available to the
rest of the world, you'll need to place it somewhere outside
the firewall. From the standpoint of security of your organization
as a whole, the safest place to put it is completely outside
the local area network:
other hosts
\
other hosts <----> FIREWALL <---> server <----> OUTSIDE
/
other hosts
This is called a "sacrificial lamb" configuration. The server
is at risk of being broken into, but at least when it's broken
into it doesn't breach the security of the inner network.
It's _not_ a good idea to run the WWW server on the firewall
machine. Now any bug in the server will compromise the security
of the entire organization.
There are a number of variations on this basic setup, including
architectures that use paired "inner" and "outer" servers
to give the world access to public information while giving
the internal network access to private documents. See the
author's book for the gory details.
You can, but if you do this you are opening up a security hole
in the firewall. It's far better to make the server a "sacrificial
lamb" as described above. Some firewall architectures, however,
don't give you the option of placing the host outside the firewall.
In this case, you have no choice but to open up a hole in the
firewall. There are two options:
- If you are using a "screened host" type of firewall,
you can selectively allow the firewall to pass requests
for port 80 that are bound to or returning from the WWW
server machine. This has the effect of poking a small hole
in the dike through which the rest of the world can send
and receive requests to the WWW server machine.
- If you are using a "dual homed gateway" type of firewall,
you'll need to install a proxy on the firewall machine.
A proxy is a small program that can see both sides of the
firewall. Requests for information from the Web server are
intercepted by the proxy, forwarded to the server machine,
and the response forwarded back to the requester. A small
and reliable HTTP proxy is available from TIS systems at:
ftp://ftp.tis.com/pub/firewalls/toolkit/
The CERN server can also be configured to act as a proxy.
I feel much less comfortable recommending it, however, because
it is a large and complex piece of software that may contain
unknown security holes.
More information about firewalls is available in the books
Firewalls and Internet Security by
William Cheswick and Steven Bellovin, and Building
Internet Firewalls by D. Brent Chapman and Elizabeth D.
Zwicky.
For Unix systems, the tripwire program periodically scans your
system and detects if any system files or programs have been
modified. It is available at
ftp://ftp.cerias.purdue.edu/pub/tools/unix/ids/tripwire/
You should also check your access and error log files periodically
for suspicious activity. Look for accesses involving system
commands such as "rm", "login", "/bin/sh" and "perl", or extremely
long lines in URL requests (the former indicate an attempt
to trick a CGI script into invoking a system command; the
latter an attempt to overrun a program's input buffer). Also
look for repeated unsuccessful attempts to access a password
protected document. These could be symptomatic of someone
trying to guess a password.
Windows NT Servers
Q9: Are there
any known security problems with the Netscape Communications
Server for NT?
Server-Side Include Source Code Vulnerable, June 25, 1998
Programmers at San Diego Source,
the online news service of the San Diego Daily Transcript
have discovered that by appending certain characters to the
end of the URL that refers to a server-side include file, a
remote user can recover the source code for the file, disclosing
proprietary information, copyrighted source code, and even user
names and passwords used to log into databases. In addition
to affecting server-side includes, this bug affects such popular
products as Allaire Cold Fusion, Microsoft Active Server Pages,
and PHP.
Details of the exploit have not been published, but you can
find a longer description in the original article at http://www.sddt.com/files/library/98/06/25/tbc.html.
Netscape is reportedly working on a fix. Please visit the
Netscape site for possible
patches. If you use server-side includes, you are urged to
upgrade as soon as a patch becomes available.
O'Reilly's WebSite and WebSite Professional
servers are also vulnerable to this bug. Microsoft IIS
servers do not appear to be.
Back Door Access to Protected Files, January 8, 1998
Netscape Enterprise Server 3.0 and FastTrack 3.01 both contain
a bug that allows unauthorized remote users to fetch documents
that are protected by IP address and password. This bug affects
any file that does not use the standard DOS 8.3 naming
convention. For example, if the document is named somelongfile.htm,
then the unscrupulous user can ask for the file SOMEF~1.HTM,
which is the mangled DOS equivalent of the file name. Even though
the document may be password protected, this fetch will succeed.
This bug is fixed in Enterprise Server 3.5.1 or higher (see
this
technical note). It is unclear whether there is a patch
available for the FastTrack server, however, which was still
at version 3.01 as of June 30, 1998.
The same bug is present in the Microsoft
IIS server. O'Reilly's WebSite Professional are reportedly
free of the problem
Perl CGI Scripts are Often Misconfigured, 1997
The Netscape server does not use the NT File Manager's associations
between file extensions and applications. Thus, even though
you may have associated the extension .pl with the perl interpreter,
perl scripts aren't recognized as such when placed in the cgi-bin
directory. Until very recently, a Netscape technical note recommended
placing perl.exe into cgi-bin and referring to your scripts
as /cgi-bin/perl.exe?&my_script.pl.
Unfortunately this technique allows anyone on the Internet
to execute an arbitrary set of Perl commands on your server
by invoking such scripts as /cgi-bin/perl.exe?&-e+unlink+%3C*%3E
(when run, this URL removes every file in the server's current
directory). This is not a good idea. A current Netscape
technical note suggests encapsulating your Perl scripts in
a .bat file. However, because of a related problem with batch
scripts, this is no safer.
Because the EMWACS, Purveyor and WebSite NT servers all use
the File Manager extension associations, you can execute perl
scripts on these servers without placing perl.exe into cgi-bin.
They are safe from this bug.
DOS .bat files are Insecure, February,
1996
Older versions the Netscape servers (both the Netscape
Communications Server version 1.12 and the Netscape
Commerce Server version 1.0) have two problems involving
the handling of CGI scripts. One of these problems is also shared
by the WebSite Server.
Ian Redfern (redferni@logica.com)
has discovered that a similar hole exists in the processing
of CGI scripts implemented as .bat files. The following is
excerpted from his e-mail describing the problem:
Consider test.bat:
@echo off
echo Content-type: text/plain
echo
echo Hello World!
If this is called as "/cgi-bin/test.bat?&dir" you get the output
of the CGI program, followed by a directory listing.
It appears that the server is doing system("test.bat &dir") which
the command interpreter is handling (not unreasonably) in the
same way /bin/sh would - execute it, and if things go OK,
execute the dir command.
Q10: Are there
any known security problems with the O'Reilly WebSite server
for Windows NT/95?
Server-Side Include Source Code Vulnerable, June 25, 1998
Programmers at San Diego Source,
the online news service of the San Diego Daily Transcript
have discovered that by appending certain characters to the
end of the URL that refers to a server-side include file, a
remote user can recover the source code for the file, disclosing
proprietary information, copyrighted source code, and even user
names and passwords used to log into databases. In addition
to affecting server-side includes, this bug affects such popular
products as Allaire Cold Fusion, Microsoft Active Server Pages
(using a 3d party ASP interpreter), and PHP.
Details of the exploit have not been published, but you can
find a longer description in the original article at http://www.sddt.com/files/library/98/06/25/tbc.html.
O'Reilly has announced that a fix will be available in WebSite
and WebSite Professional version 2.3. If you use server-side
includes, you should strongly consider upgrading.
Windows-based Netscape servers are
also vulnerable to this bug. Microsoft IIS servers do not
appear to be.
.BAT Scripts Vulnerable (1996)
WebSite versions 1.1b
and earlier have the same problem with DOS
.bat files that Netscape does. However because WebSite supports
three different types of CGI scripting interfaces (native Windows,
Standard CGI for Perl scripts, and the rarely used DOS .bat
file interface), the recommended action is to turn off the server's
support for DOS CGI scripts. This will not affect the server's
ability to run Visual Basic, Perl, or C scripts.
This hole has been fixed in version 1.1c. You should
upgrade to this version with the patch provided at the WebSite
home page.
Detailed information on the actions necessary to close the
WebSite .bat file security hole can be found at this
page provided by WebSite's developer.
Q11: Are there
any known security problems with the Purveyor Server for Windows
NT?
The Purveyor Web server, all versions, is vulnerable to the
same bug that allows the source code for server-side include
files to be revealed. See the description of this bug in the
section on Netscape Enterprise Server
for more details. Support for Purveyor was discontinued in 1997,
so no fix or upgrade is available. Your choices are to avoid
using server-side includes, or to change server software completely.
Q12: Are there
any known security problems with the Microsoft's IIS Web Server?
Back Door Access to Protected Files, January 8, 1998
Microsoft Internet Information Server and Personal Web Server
versions 4.0 and earlier contain a bug that allows unauthorized
remote users to fetch documents that are restricted by IP address
or SSL use. This bug affects any file that does not use
the standard DOS 8.3 naming convention. For example, if the
document is named somelongfile.htm, then the unscrupulous
user can ask for the file SOMEF~1.HTM, which is the mangled
DOS equivalent of the file name. Even though the document may
be restricted, this fetch will succeed. Password protection,
which is accomplished through file system access control lists,
is not affected by this bug, although other file-specific settings,
such as PICS rating, are.
A patch is available on Microsoft's
security pages. Newer versions of IIS are free of the
problem.
The same bug is present in the Netscape
Enterprise and Commerce servers. Recent versions of WebSite
Professional are reportedly free of the problem
.BAT CGI Script Hole, March 1996
Versions of the Microsoft IIS server downloaded prior to 3/5/96
contain the same .BAT file bug that appears in other NT-based
servers. In fact the problem is worse than on other servers
because .BAT CGI scripts doesn't even have to be installed on
the server for a malicious remote user to invoke any arbitrary
set of DOS commands on your server!
Microsoft has released a patch for this bug, available at
http://www.microsoft.com/infoserv/.
In addition, all copies of the IIS server downloaded after
3/5/96 should be free of this bug. If you use this server,
you should check the creation date of your server binary and
upgrade it if necessary.
Versions of Microsoft IIS through 3.0 are vulnerable to a
bug that allows remote users to download and read the contents
of executable scripts, potentially learning sensitive information
about the local network configuration, the name of databases,
or the algorithm used to calculate vendor discounts. This
bug appears whenever a script-mapped file is placed in a directory
that has both execute and read permissions. Remote users can
download the script itself simply by placing additional periods
at the end of its URL. To avoid this bug, turn off read permissions
in any directory that contains scripts. Alternatively, download
the patch provided by Microsoft at:
ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40/hotfixes-postsp2/iis-fix
June 25, 1997 -- denial of service attack
IIS version 3.0 is vulnerable to a simple denial of service
attack. By sending a long URL of a particular length to an IIS
server, anyone on the Internet can cause the Web server to crash.
The server will need to be restarted manually in order to resume
Web services. A variety of Perl and Java programs that exploit
this bug are floating around the Internet, and actual attacks
have been reported.
The exact length of the URL that is required to cause the
crash varies from server to server, and depends on such issues
as memory usage. The magic length is generally around 8192
characters in length, suggesting that the problem is a memory
buffer overflow. In the past such problems have often been
exploited by knowledgeable hackers to execute remote commands
on the server, so this bug is potentially more than annoyance.
A patch is available from Microsoft at ftp://ftp.microsoft.com/bussys/winnt/winnt-public/fixes/usa/nt40/hotfixes-postSP3/iis-fix
Q13: Are there
any known security problems with Sun Microsystem's JavaWebServer
for Windows NT?
Servlet Source Code Vulnerable to Disclosure, June 29,
1998
The JavaWebServer is able to compile and execute Java class
files in a manner similar to CGI scripts (but much more efficiently).
These small Java programs are called "servlets."
The Windows NT version of JavaWebServer
is vulnerable to a bug that allows the source code for Java
servlets to be downloaded by remote users. This bug is similar
to ones identified for Windows NT versions of O'Reilly
WebSite Professional and Netscape Enterprise
Server. By appending certain characters to the end of
a servlet's URL, a remote user can fool the server into sending
him the compiled servlet, which can then be decompiled by
a product such as Mocha. Since servlets may contain proprietary
code, trade secrets or even database access passwords, this
is a significant problem.
Sun has not yet announced a fix for this problem. Check their
Web site for details. More information can be found at http://www.sddt.com/files/library/98/06/29/tbd.html
Q14: Are there
any known security problems with the MetaInfo MetaWeb Server?
Physical Path not Protected, June 30, 1998
MetaInfo (www.metainfo.com)
produces a number of NT products, including a port of the Unix
Sendmail program and a DHCP/DNS server. It provides a Web server,
called MetaWeb, as a user-friendly front end to its administration
tools for these products. At the time this was written, MetaWeb
was at version 3.1.
According to Jeff Forristal, who discovered the bug, MetaWeb
is vulnerable to the "double-dot" problem that plagued early
versions of the Microsoft IIS server. By including ".." pairs
in the URL path, the server can be tricked into giving access
to directories outside the Web document root, including documents
in the Windows system directory. This allows password files
and other confidential information to be retrieved. Worse,
a variant of this attack also gives remote users the ability
to run any executable binary that happens to be installed
on the server machine.
MetaWeb has not yet made an upgrade or patch available. You
are urged to upgrade when a fix does become available. A good
short-term solution is to disable remote administration via
the Web interface.
More information about the MetaInfo bug may be posted Jeff
Forristal's site.
Unix Servers
Q15: Are there
any known security problems with NCSA httpd?
Versions of NCSA
httpd prior to 1.4 contain a serious security hole relating
to a fixed-size string buffer. Remote users could break into
systems running this server by requesting an extremely long
URL. Although this bug has been well publicized for more than
a year, many sites are still running unsafe versions of the
server. The current version of the software, version 1.5, does
not suffer from this bug and is available at the link given
at the beginning of this paragraph.
Recently it has come to light that example
C code (cgi_src/util.c) long distributed with the
NCSA httpd as an example of how to write safe CGI scripts
ommitted the newline character from the list of characters
that are shouldn't be passed to shells. This ommission introduces
a serious bug into any CGI scripts that were built on top
of this example code: a remote user can exploit this bug to
force the CGI script to execute any arbitrary Unix command.
This is another example of the dangers
of executing shell commands from CGI scripts.
In addition, the NCSA server source code tree itself contains
the same bug (versions 1.5a and earlier). The faulty subroutine
is identical, but in this case is found in the file src/util.c
as opposed to cgi_src/util.c. After looking through
the server source code, I haven't found a place where a user-provided
string is passed to a shell after being processed by this
subroutine, so I don't think this represents a actual
security hole. However, it's best to apply the patch shown
below to be safe.
The Apache server, versions 1.02 and earlier, also contains
this hole in both its cgi_src and src/ subdirectories.
It's not unlikely that the same problem is present in other
derivatives of the NCSA source code.
The patch to fix the holes in the two util.c files
is simple. "phf" and any CGI scripts that use this library
should be recompiled after applying this patch (the GNU patch
program can be found at ftp://prep.ai.mit.edu/pub/gnu/patch-2.1.tar.gz).
You should apply this patch twice, once while inside the cgi_src/
subdirectory, and once within the src/ directory itself:
tulip% cd ~www/ncsa/cgi_src
tulip% patch -f < ../util.patch
tulip% cd ../src
tulip% patch -f < ../util.patch
---------------------------------- cut here ----------------------------------
*** ./util.c.old Tue Nov 14 11:38:40 1995
--- ./util.c Thu Feb 22 20:37:07 1996
***************
*** 139,145 ****
l=strlen(cmd);
for(x=0;cmd[x];x++) {
! if(ind("&;`'\"|*?~<>^()[]{}$\\",cmd[x]) != -1){
for(y=l+1;y>x;y--)
cmd[y] = cmd[y-1];
l++; /* length has been increased */
--- 139,145 ----
l=strlen(cmd);
for(x=0;cmd[x];x++) {
! if(ind("&;`'\"|*?~<>^()[]{}$\\\n",cmd[x]) != -1){
for(y=l+1;y>x;y--)
cmd[y] = cmd[y-1];
l++; /* length has been increased */
---------------------------------- cut here ----------------------------------
Q16: Are there
any known security problems with Apache httpd?
Authentication Headers, Directory Listing Bugs - 28 February
2001
Versions prior to v1.3.20 contain server programming errors
that present moderate to serious security risks. Under the
right circumstances, authentication headers would not be provided
to the client. The default configuration would lead two modules
to present directory listings instead of presenting the default
index.html file, if the URL retrieved was artificially long
and contained many slashes.
NetWare Paths - 31 January 2001
The NetWare functions created a bug whereby directives for
path settings were not interpreted correctly.
mod_rewrite Globbing - 14 Oct 2000
The mod_rewrite module, if the result of filename rewrites
caused a file to include $0 or other such references, could
result in server configuration information being presented
to a browser.
Other
Versions of Apache httpd prior to 1.2.5 contain several
programming errors that present moderate security risks. Users
who have local access to the server machine (e.g. Web authors),
can carefully craft HTML files which, when fetched, will give
the user the ability to execute Unix commands with Web server
user permissions. Since local users usually already have as
much, if not more, access to the system as the Web server,
this does not present a major risk, but it may be of concern
to ISP's who provide Web hosting services to untrusted authors.
Apache version 1.2.5 is free of these bugs; upgrade at your
earliest convenience. If you are using a 1.3 beta version
of Apache, you may apply a patch located atthe Apache site,
or await the release of 1.3b4.
Apache servers prior to 1.1.3 contain two security holes
which are of far more concern. The first hole affects servers
compiled with the "mod_cookies" module. Servers compiled with
this module contain a vulnerability that allows remote users
to send the server extremely long cookies and overrun the
program stack, potentially allowing arbitrary commands to
be executed. Because this gives remote users access to the
server host, it is a far greater vulnerability than the holes
discussed above, which only can be exploited by local users.
The second problem with 1.1.1 affects automatic directory
listings. Ordinarily, a remote user cannot obtain a directory
listing if the directory contains a "welcome page", such as
"index.html". A bug causes this check to fail under certain
circumstances, allowing the remote user to see the contents
of the directory even if the welcome page is present. This
hole is less serious than the first one, but is still a potential
information leak.
More information and current Apache binaries can be found
at:
http://www.apache.org/
Q17: Are there
any known security problems with the Netscape Servers?
Netscape Enterprise server versions 3.6sp2 and earlier, as well
as FastTrack server versions 3.01 and earlier contain a buffer
overflow bug that can allow a remote user to gain shell access
to the server machine. More information on this problem, as
well as pointers to patches, can be found at http://www.ciac.org/ciac/bulletins/j-062.shtml.
There have also been two well-publicized recent episodes
in which the system used by the Netscape
Secure Commerce Server to encrypt sensitive communications
was cracked. In the first episode, a single message encrypted
with Netscape's less secure 40-bit encryption key was cracked
by brute force using a network of workstations. The 128-bit
key used for communications within the U.S. and Canada is
considered immune from this type of attack.
In the second episode, it was found that the random number
generator used within the server to generate encryption keys
was relatively predictable, allowing a cracking program to
quickly guess at the correct key. This hole has been closed
in the recent releases of the software, and you should upgrade
to the current version if you rely on encryption for secure
communications. Both the server and the browser need
to be upgraded in order to completely close this hole. See
http://home.netscape.com/newsref/std/random_seed_security.html
for details.
Q18: Are there
any known security problems with the Lotus Domino Go Server?
Bill Jones <sneex@mac.com>
reports that older versions of Lotus Domino Go, formerly known
as IBM Internet Connection Server (ICS), contained a security
hole in directory browsing. When directory browsing is set to
"fancy", a potential hacker can browse backward through the
directory tree all the way up to root ("/"). Thus, private system
files and other documents are exposed to interception. This
bug was present in versions 1.0 through 2.0 of ICS, and affected
both the AIX and OS/2 Warp versions.
According to Richard L. Gray (rlgray@us.ibm.com>)
of IBM, all known problems have been fixed in versions 4.2.1.3
and higher. Lotus Domino Go also now runs on Windows 95, Windows
NT, OS/390, HPUX and Solaris systems.
Q19: Are there
any known security problems with the WN Server?
The WN server is free
of any known security holes. As explained in Q6
it contains several features that lessen the chance that security
will be breached by improper server configuration.
Macintosh Servers
Q20: Are there
any known security problems with WebStar?
There is a gaping hole in WebSTAR's handling of log files. If
you install WebSTAR using the default configuration, the server's
log file will be located within the document tree. Anyone on
the Internet can download the entire server log and review all
remote accesses to the server simply by requesting the URL "http://your.site/WebSTAR%20LOG
". As discussed in Server Logs and Privacy,
this is a violation of users' expectation to privacy. Use WebSTAR's
administrative tool to change the location of the log file to
some place outside the document tree.
As far as the security of the WebSTAR server itself goes,
there is reason to think that WebSTAR is more secure than
its Unix and Windows counterparts. Because the Macintosh does
not have a command shell, and because it does not allow remote
logins, it is reasonable to expect that the Mac is inherently
more secure than the other platforms. In fact this expectation
has been borne out so far: no specific security problems are
known in either WebStar or its shareware ancestor MacHTTP.
In early 1996 a consortium of Macintosh Internet software
development companies, including StarNine, the developer of
WebStar, posted a $10,000 reward to anyone who could read
a password-protected Web page on a Macintosh running WebStar
software. As described in an article about the challenge in
Tidbits#317/04-Mar-96,
after 45 days no one had stepped forward to claim the prize.
Although one cannot easily "break in" to a Macintosh host
in the conventional way, potential security holes do exist:
- Exploiting holes in the server to read files outside
the official document tree.
- Finding a way to crash the server.
- Exploiting holes in CGI scripts to execute AppleScript
commands. This particularly of concern for Perl scripts.
All the caveats and warnings about safe
scripting apply.
In fact, a repeat "Crack-a-Mac" challenge in 1997, sponsored
by a Swedish consulting company, was not so fortunate. In this
case, a cracker was able to break into the server and steal
the protected page by exploiting bugs in two server remote administration
and editing add-ons. This emphasizes the risk that you runs
whenever you add CGI scripts, server modules, and other extensions
to Web servers. Details on the successful break-in, along with
links to patched server extensions, can be found at http://hacke.infinit.se/
Q21: Are there
any known security problems with MacHTTP?
MacHTTP shares WebSTAR's problem with log files. See the discussion
above.
Q22: Are there
any known security problems with Quid Pro Quo?
The Quid Pro Quo server saves its default log file inside the
document root, at URL http://site.name/server%20logfile.
A knowledgeable remote user can find out every access that anyone's
made to your server!
(This information provided by Paul DuBois <dubois@primate.wisc.edu>).
Other Servers
Q23: Are there
any known security problems with Novell WebServer?
If you are running Novell Webserver version 3.x and have the
Web Server Examples Toolkit v.2 installed, you have a major
security hole. Users can view any file on your system and download
directory listings, possibly gaining information needed to break
into your system. The hole is in the example CGI Perl script
files.pl. Remove it from your /perl directory (typically located
in SYS:INW_WEB\SHARED\DOCS\LCGI\PERL5. Better yet, remove all
CGI scripts that are not essential for the operation of your
site.
(Thanks to Bob Bagwill
who contributed many of the Q&A's in this section)
Most servers log every access. The log usually includes the
IP address and/or host name, the time of the download, the
user's name (if known by user authentication or obtained by
the identd protocol), the URL requested (including the values
of any variables from a form submitted using the GET method),
the status of the request, and the size of the data transmitted.
Some browsers also provide the client the reader is using,
the URL that the client came from, and the user's e-mail address.
Servers can log this information as well, or make it available
to CGI scripts. Most WWW clients are probably run from single-user
machines, thus a download can be attributed to an individual.
Revealing any of those datums could be potentially damaging
to a reader.
For example, XYZ.com downloading financial reports on ABC.com
could signal a corporate takeover. The accesses to a internal
job posting reveals who might be interested in changing jobs.
The time a cartoon was downloaded reveals that the reader
is misusing company resources. A referral log entry might
contain something like:
file://prez.xyz.com/hotlists/stocks2sellshort.html -> http://www.xyz.com/
The pattern of accesses made by an individual can reveal
how they intend to use the information. And the input to searches
can be particularly revealing.
Another way Web usage can be revealed locally is via browser
history, hotlists, and cache. If someone has access to the
reader's machine, they can check the contents of those databases.
An obvious example is shared machines in an open lab or public
library.
Proxy servers used for access to Web services outside an
organization's firewall are in a particularly sensitive position.
A proxy server will log every access to the outside Web made
by every member of the organization and track both the IP
number of the host making the request and the requested URL.
A carelessly managed proxy server can therefore represent
a significant invasion of privacy.
Yes. One of the requirements of responsible net citizenship
is respecting the privacy of others. Just as you don't forward
or post private email without the author's consent, in general
you shouldn't use or post Web usage statistics that can be attributed
to an individual.
If you are a government site, you may be required by law
to protect the privacy of your readers. For example, U.S.
Federal agencies are not allowed to collect or publish many
types of data about their clients.
In most U.S. states, it is illegal for libraries and video
stores to sell or otherwise distribute records of the materials
that patrons have checked out. While the courts have yet to
apply the same legal standard to be applied to electronic
information services, it is not unreasonable for users to
have the same expectation of privacy on the Web. In other
countries, for example Germany, the law explicitly forbids
the disclosure of online access lists. If your site chooses
to use the Web logs to populate your mailing lists or to resell
to other businesses, make sure you clearly advertise that
fact.
One of the requirements of your Web site may be to collect statistics
on usage to provide data to the organization and to justify
Web site resources. In general, collecting information about
accesses by individuals is probably not warranted or even useful.
The easiest way to avoid collecting too much information
is to use a server that allows you to tailor the output logs,
so that you can throw away everything but the essentials.
Another way is to regularly summarize and discard the raw
logs. Since the logs of popular sites tend to grow quickly,
you probably will need to do that anyway.
There are two classes of readers: outsiders reading your documents,
and insiders reading your documents and outside documents.
You can protect outsiders by summarizing your logs. You can
help protect insiders by:
- having a clear site policy on Web usage.
- educating them about the site policy and risks of Web
usage.
- using a site-wide proxy cache to hide the identity of
individual hosts from outside servers.
If your site does not want to reveal certain Web accesses
from your site's domain, you may need to get Web client accounts
from another Internet provider that can provide anonymous
access.
|