patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
171 lines
6.5 KiB
Text
171 lines
6.5 KiB
Text
-----BEGIN PGP SIGNED MESSAGE-----
|
|
|
|
=============================================================================
|
|
FreeBSD-SA-02:18 Security Advisory
|
|
FreeBSD, Inc.
|
|
|
|
Topic: zlib double-free
|
|
|
|
Category: core, ports
|
|
Module: zlib
|
|
Announced: 2002-03-18
|
|
Revised: 2002-04-22
|
|
Credits: Matthias Clasen <maclas@gmx.de>
|
|
Owen Taylor <otaylor@redhat.com>
|
|
Affects: All released versions of FreeBSD
|
|
FreeBSD 4.5-STABLE prior to the correction date
|
|
Various ports using or including zlib
|
|
Corrected: 2002-02-24 23:12:48 UTC (RELENG_4)
|
|
2002-02-24 23:22:57 UTC (RELENG_4_5)
|
|
2002-02-24 23:23:58 UTC (RELENG_4_4)
|
|
2002-02-24 23:24:46 UTC (RELENG_4_3)
|
|
CVE: CAN-2002-0059
|
|
FreeBSD only: NO
|
|
|
|
0. Revision History
|
|
|
|
v1.0 2002-03-18 Initial release
|
|
v1.1 2002-04-18 Corrected ZFREE location in kernel patch
|
|
Corrected deflate window size check
|
|
v1.2 2002-04-22 Corrected advisory revision dates.
|
|
|
|
I. Background
|
|
|
|
zlib is a compression library used by numerous applications to provide
|
|
data compression/decompression routines.
|
|
|
|
II. Problem Description
|
|
|
|
A programming error in zlib may cause segments of dynamically
|
|
allocated memory to be released more than once (double-freed).
|
|
If an attacker is able to pass a specially-crafted block of invalid
|
|
compressed data to a program that includes zlib, the program's
|
|
attempt to decompress the crafted data may cause the zlib routines
|
|
to attempt to free memory multiple times.
|
|
|
|
Unlike some implementations of malloc(3)/free(3), the malloc(3) and
|
|
free(3) routines used in FreeBSD (aka phkmalloc, written by
|
|
Poul-Henning Kamp <phk@FreeBSD.org>), are not vulnerable to this type
|
|
of bug. From the author:
|
|
|
|
Most mallocs keep their housekeeping data right next to the
|
|
allocated range. This gives rise to all sorts of unpleassant
|
|
situations if programs stray outside the dotted line, free(3)
|
|
things twice or free(3) modified pointers.
|
|
|
|
phkmalloc(3) does not store housekeeping next to allocated data,
|
|
and in particular it has code that detects and complains about
|
|
exactly this kind of double free.
|
|
|
|
When attempting to double-free an area of memory, phkmalloc will
|
|
issue a warning:
|
|
|
|
progname in free(): error: chunk is already free
|
|
|
|
and may call abort(3) if the malloc flag 'A' is used.
|
|
|
|
III. Impact
|
|
|
|
If an attacker is able to pass a specially-crafted block of invalid
|
|
compressed data to an application that utilizes zlib, the attempt to
|
|
decompress the data may cause incorrect operation of the application,
|
|
including possibly crashing the application. Also, the malloc
|
|
implementation will issue warnings and, if the `A' malloc option is
|
|
used, cause the application to abort(3). In short, an attacker may
|
|
cause a denial of service in applications utilizing zlib.
|
|
|
|
IV. Workaround
|
|
|
|
To prevent affected programs from aborting, remove the 'A' from
|
|
the malloc flags. To check which malloc flags are in use, issue the
|
|
following commands:
|
|
|
|
# ls -l /etc/malloc.conf
|
|
# echo $MALLOC_OPTIONS
|
|
|
|
A nonexistent /etc/malloc.conf or MALLOC_OPTIONS environmental variable
|
|
means that no malloc flags are in use. See the malloc(3) man page for
|
|
more information.
|
|
|
|
V. Solution
|
|
|
|
[FreeBSD 4.x base system]
|
|
|
|
1) Upgrade your vulnerable system to 4.5-STABLE or to one of the
|
|
RELENG_4_4 or RELENG_4_5 security branches dated after the respective
|
|
correction dates.
|
|
|
|
2) To patch your present system: download the relevant patch from the
|
|
below location, and execute the following commands as root:
|
|
|
|
For FreeBSD 4.x systems that have the previous zlib patch applied:
|
|
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.corrected.patch
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.corrected.patch.asc
|
|
|
|
For FreeBSD 4.x systems that do not have the previous zlib patch
|
|
applied:
|
|
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.patch
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-02:18/zlib.v1.1.patch.asc
|
|
|
|
Verify the detached PGP signature using your PGP utility.
|
|
|
|
This patch has been verified to apply to all FreeBSD 4.x versions.
|
|
|
|
# cd /usr/src
|
|
# patch -p < /path/to/patch
|
|
# cd lib/libz
|
|
# make depend && make all install
|
|
|
|
Then rebuild and reinstall your kernel as described in
|
|
http://www.freebsd.org/handbook/kernelconfig.html and reboot the
|
|
system with the new kernel for the changes to take effect.
|
|
|
|
[ports]
|
|
|
|
Various ports may statically link zlib or contain their own versions
|
|
of zlib that have not been corrected by updating the FreeBSD libz.
|
|
Efforts are underway to identify and correct these ports.
|
|
|
|
VI. Correction details
|
|
|
|
The following list contains the revision numbers of each file that was
|
|
corrected in FreeBSD.
|
|
|
|
Path Revision
|
|
Branch
|
|
- -------------------------------------------------------------------------
|
|
src/lib/libz/deflate.c
|
|
RELENG_4 1.5.2.1
|
|
RELENG_4_5 1.5.8.1
|
|
RELENG_4_4 1.5.6.1
|
|
RELENG_4_3 1.5.4.1
|
|
src/lib/libz/infblock.c
|
|
RELENG_4 1.1.1.4.6.1
|
|
RELENG_4_5 1.1.1.4.12.1
|
|
RELENG_4_4 1.1.1.4.10.1
|
|
RELENG_4_3 1.1.1.4.8.1
|
|
src/sys/net/zlib.c
|
|
RELENG_4 1.10.2.3
|
|
RELENG_4_5 1.10.8.2
|
|
RELENG_4_4 1.10.6.2
|
|
RELENG_4_3 1.10.4.2
|
|
- -------------------------------------------------------------------------
|
|
|
|
VII. References
|
|
|
|
<URL:http://online.securityfocus.com/archive/1/261205>
|
|
|
|
The Common Vulnerabilities and Exposures project (cve.mitre.org) has
|
|
assigned the name CAN-2002-0059 to this issue.
|
|
-----BEGIN PGP SIGNATURE-----
|
|
Version: GnuPG v1.0.6 (FreeBSD)
|
|
Comment: For info see http://www.gnupg.org
|
|
|
|
iQCVAwUBPMQkDVUuHi5z0oilAQEWKAP+OT1w4Nilf/mfBjXu9xFPeRRyyKaq8ALX
|
|
Hmm2XQ3plhUsqjFupYxdss5+PuIhT7OiLoc8n+B7n8DjjTtGEK/Ds7/iBlox+b+3
|
|
JhhE4HBbwLDMpQ9VSI36iV4qr7YuNZbpCCrAG85bOIhWQDRdc+IWkdxW4P0flhAm
|
|
42eaFTWtbB4=
|
|
=QAcg
|
|
-----END PGP SIGNATURE-----
|