-----BEGIN PGP SIGNED MESSAGE-----


SUPERSEDES: http://httpd.apache.org/info/security_bulletin_20020617.txt

Date: June 20, 2002
Product: Apache Web Server
Versions: Apache 1.3 all versions including 1.3.24; Apache 2.0 all versions
up to 2.0.36; Apache 1.2 all versions.

CVE-2002-0392 (mitre.org) [CERT VU#944335]

- ----------------------------------------------------------
         ------------UPDATED ADVISORY------------
- ----------------------------------------------------------
Introduction:

While testing for Oracle vulnerabilities, Mark Litchfield discovered a
denial of service attack for Apache on Windows.  Investigation by the
Apache Software Foundation showed that this issue has a wider scope, which
on some platforms results in a denial of service vulnerability, while on
some other platforms presents a potential remote exploit vulnerability.  

This follow-up to our earlier advisory is to warn of known-exploitable
conditions related to this vulnerability on both 64-bit platforms and
32-bit platforms alike.  Though we previously reported that 32-bit
platforms were not remotely exploitable, it has since been proven by
Gobbles that certain conditions allowing exploitation do exist.

Successful exploitation of this vulnerability can lead to the execution of
arbitrary code on the server with the permissions of the web server child
process.  This can facilitate the further exploitation of vulnerabilities
unrelated to Apache on the local system, potentially allowing the intruder
root access.

Note that early patches for this issue released by ISS and others do not
address its full scope.

Due to the existence of exploits circulating in the wild for some platforms,
the risk is considered high.

The Apache Software Foundation has released versions 1.3.26 and 2.0.39
that address and fix this issue, and all users are urged to upgrade
immediately.

As a reminder, we respectfully request that anyone who finds a potential
vulnerability in our software reports it to security@apache.org.


- ----------------------------------------------------------
Full Description:

Versions of the Apache web server up to and including 1.3.24 and 2.0
up to and including 2.0.36 contain a bug in the routines that deal with 
requests encoded using chunked encoding.  This bug can be triggered
remotely, and this functionality is enabled by default.

In most cases the outcome of the invalid request is that the child process
dealing with the request will terminate.  At the least, this could help a
remote attacker launch a denial of service attack as the parent process
will eventually have to replace the terminated child process, and starting
new children uses non-trivial amounts of resources.

On the Windows and Netware platforms, Apache runs one multithreaded child
process to service requests.  The teardown and subsequent setup time to
replace the lost child process presents a significant interruption of
service.  As the Windows and Netware ports create a new process and reread
the configuration, rather than fork a child process, this delay is much
more pronounced than on other platforms.

In Apache 2.0, the error condition is correctly detected, so it will not
allow an attacker to execute arbitrary code on the server.  However,
platforms could be using a multithreaded model with multiple concurrent
requests per child process (although the default preference remains
multiple processes with a single thread and request per process, and most
multithreaded models continue to create multiple child processes).  Using
any multithreaded model, all concurrent requests currently served by the
affected child process will be lost.

In Apache 1.3, the issue should cause a stack overflow.  Due to the nature
of the overflow on 32-bit Unix platforms, this should cause a segmentation
violation and cause the child to terminate.  However, some 32-bit platforms
are indeed exploitable due to quirks in their implementation.  64-bit
platforms are also likely to be exploitable due to a data type conversion
that occurs within Apache.  We have been made aware that Apache 1.3 on
Windows is exploitable in a similar way as well.


-----BEGIN PGP SIGNATURE-----
Version: PGP 6.5.8

iQEVAwUBPRK8ztc6kLhrup1dAQEfzQf+NbNSVtg+nrcipH2DEnsLCbd0odjwHAZM
gBpJPShl5D+AFhxu3gNiMkOtnQs+LkyCQinYJErVNXUzK5das9VyBdtGswsXsKs0
N/stacgdMg8fxenyK0CDhlUl3QLaVSit08Hwads0yYbeIEAKoLx/n7AvGr2CvDnh
fStxMvaiJgqadeq3udRSyy1UMl+hrxy2xMGZ3ducPMi5Bt/riZh+NJuEKazHosDY
98wEvGQWPMWoYOWxI1Y45slu+QVrkbrgnkKvMDT6WHBDzD/we3I6ulHjoaBjMEF0
7m2bEBFL902SE4UDf1n2DxLFZHR8VMSFwUhqkPRNLxVbV42yxJwa2Q==
=vV/N
-----END PGP SIGNATURE-----
