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)
192 lines
7.5 KiB
Text
192 lines
7.5 KiB
Text
-----BEGIN PGP SIGNED MESSAGE-----
|
|
|
|
=============================================================================
|
|
FreeBSD-SA-01:55 Security Advisory
|
|
FreeBSD, Inc.
|
|
|
|
Topic: procfs vulnerability leaks set[ug]id process memory
|
|
|
|
Category: core
|
|
Module: procfs
|
|
Announced: 2001-08-21
|
|
Credits: Joost Pol <joost@contempt.nl>
|
|
Affects: FreeBSD 4.x, 4.3-STABLE prior to the correction
|
|
date.
|
|
Corrected: 2001-08-12 07:29 PDT (4.3-STABLE)
|
|
2001-08-13 12:45 PDT (RELENG_4_3)
|
|
FreeBSD only: Yes
|
|
|
|
I. Background
|
|
|
|
procfs is the process filesystem, which presents a filesystem
|
|
interface to the system process table, together with associated data.
|
|
procfs provides access to the memory space of processes via the
|
|
synthetic /proc/<pid>/mem file, subject to access control checks.
|
|
|
|
linprocfs is an implementation of procfs which implements a
|
|
Linux-style procfs, for use with Linux binaries so they can obtain
|
|
access to exported kernel data. It uses procfs to provide the
|
|
/proc/<pid>/mem file.
|
|
|
|
II. Problem Description
|
|
|
|
Prior to the migration of system monitoring utilities (such as ps(8))
|
|
to use the sysctl(8) management interface, these utilities formerly
|
|
used procfs and direct kernel memory access to extract process
|
|
information, and they ran with the setgid kmem privilege to allow
|
|
direct kernel memory access. The procfs code checks for gid kmem
|
|
privilege when granting access to the /proc/<pid>/mem file -- however,
|
|
the code which is used to allow read-only access via the kmem group
|
|
was incorrect, and inappropriately granted read access to the caller
|
|
as long as they already had an open file descriptor for the procfs mem
|
|
file.
|
|
|
|
The result of this problem is that if a process initially has
|
|
debugging rights to a second process, it may retain access to the
|
|
target process' memory space, even if the target process has upgraded
|
|
privilege by virtue of performing an execve() call on a setuid or
|
|
setgid process. This vulnerability can lead to the leaking of
|
|
sensitive information from such processes, which could be used as the
|
|
basis for additional attacks, resulting in escalation of attacker
|
|
privilege on the system.
|
|
|
|
The linprocfs filesystem is also vulnerable to the problem if procfs
|
|
support is available in the kernel (statically compiled in, or
|
|
dynamically loaded as a module). If procfs support is not available
|
|
then linprocfs is not vulnerable to this problem.
|
|
|
|
All released versions of FreeBSD 4.x including FreeBSD 4.3-RELEASE are
|
|
vulnerable to this problem if the procfs filesystem is in use. It was
|
|
corrected prior to the (forthcoming) release of FreeBSD 4.4-RELEASE.
|
|
|
|
III. Impact
|
|
|
|
Attackers may be able to extract sensitive system information, such as
|
|
password hashes from the /etc/master.passwd file, from setuid or
|
|
setgid processes, such as su(1). This information could be used by
|
|
attackers to escalate their privileges, possibly yielding root
|
|
privileges on the local system.
|
|
|
|
Because this attack may only be used on processes that initially are
|
|
"debuggable" by the attacking process, this attack is limited to
|
|
executed processes which gain privilege by virtue of being setuid or
|
|
setgid, and so it cannot be used against other processes which are
|
|
already running with privilege such as already-running daemons
|
|
containing sensitive system information.
|
|
|
|
IV. Workaround
|
|
|
|
To work around the problem, perform the following steps as root:
|
|
|
|
Unmount all instances of the procfs and linprocfs filesystems using
|
|
the unmount(8) command:
|
|
|
|
# umount -f -a -t procfs
|
|
# umount -f -a -t linprocfs
|
|
|
|
Disable the automatic mounting of all instances of procfs in /etc/fstab:
|
|
remove or comment out the line(s) of the following form:
|
|
|
|
proc /proc procfs rw 0 0
|
|
proc /compat/linux/proc linprocfs rw 0 0
|
|
|
|
V. Solution
|
|
|
|
1) Upgrade your vulnerable system to 4.3-STABLE or the RELENG_4_3
|
|
security branch, 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:
|
|
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-01:55/procfs.patch
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/patches/SA-01:55/procfs.patch.asc
|
|
|
|
Verify the detached PGP signature using your PGP utility.
|
|
|
|
This patch has been verified to apply to FreeBSD 4.3-RELEASE and
|
|
4.2-RELEASE (users of 4.2-RELEASE should already have the patch from
|
|
FreeBSD SA-00:77.procfs installed). It may or may not apply to older,
|
|
unsupported releases of FreeBSD.
|
|
|
|
# cd /usr/src/sys
|
|
# patch -p < /path/to/patch
|
|
|
|
If procfs is statically compiled into the kernel (i.e. the kernel
|
|
configuration file contains the line 'options PROCFS'), 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. By default
|
|
procfs is statically compiled in the GENERIC kernel configuration.
|
|
|
|
If procfs is dynamically loaded by KLD (use the kldstat(8) command to
|
|
verify whether this is the case) and the system securelevel has not
|
|
been raised to a level of 1 or higher, the system can be patched at
|
|
run-time without requiring a reboot by performing the following steps
|
|
after patching the source as described above:
|
|
|
|
# cd /usr/src/sys/modules/procfs
|
|
# make depend
|
|
# make all install
|
|
# umount -f -a -t procfs
|
|
# kldunload procfs
|
|
# kldload procfs
|
|
# mount -a -t procfs
|
|
|
|
3) FreeBSD 4.3-RELEASE systems:
|
|
|
|
An experimental upgrade package is available for users who wish to
|
|
provide testing and feedback on the binary upgrade process. This
|
|
package may be installed on FreeBSD 4.3-RELEASE systems only, and is
|
|
intended for use on systems for which source patching is not practical
|
|
or convenient.
|
|
|
|
If you use the upgrade package, feedback (positive or negative) to
|
|
security-officer@FreeBSD.org is requested so we can improve the
|
|
process for future advisories.
|
|
|
|
During the installation procedure, backup copies are made of the
|
|
files which are replaced by the package. These backup copies will
|
|
be reinstalled if the package is removed, reverting the system to a
|
|
pre-patched state.
|
|
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:55/security-patch-procfs-01.55.tgz
|
|
# fetch ftp://ftp.FreeBSD.org/pub/FreeBSD/CERT/packages/SA-01:55/security-patch-procfs-01.55.tgz.asc
|
|
|
|
Verify the detached PGP signature using your PGP utility.
|
|
|
|
# pkg_add security-patch-procfs-01.55.tgz
|
|
|
|
Restart your system after applying the patch.
|
|
|
|
VI. CVS Revisions
|
|
|
|
The following $FreeBSD$ CVS revisions contain the fixes for this
|
|
vulnerability. The $FreeBSD$ revision of installed sources can be
|
|
examined using the ident(1) command. These revision IDs are not
|
|
updated by applying the patch referenced above.
|
|
|
|
[FreeBSD 4.3-STABLE]
|
|
|
|
Revision Path
|
|
1.3.2.5 src/sys/i386/linux/linprocfs/linprocfs_vnops.c
|
|
1.32.2.2 src/sys/miscfs/procfs/procfs.h
|
|
1.46.2.2 src/sys/miscfs/procfs/procfs_mem.c
|
|
1.76.2.5 src/sys/miscfs/procfs/procfs_vnops.c
|
|
|
|
[RELENG_4_3]
|
|
|
|
Revision Path
|
|
1.3.2.3.2.1 src/sys/i386/linux/linprocfs/linprocfs_vnops.c
|
|
1.32.2.1.2.1 src/sys/miscfs/procfs/procfs.h
|
|
1.46.2.1.2.1 src/sys/miscfs/procfs/procfs_mem.c
|
|
1.76.2.3.2.1 src/sys/miscfs/procfs/procfs_vnops.c
|
|
-----BEGIN PGP SIGNATURE-----
|
|
Version: GnuPG v1.0.6 (FreeBSD)
|
|
Comment: For info see http://www.gnupg.org
|
|
|
|
iQCVAwUBO4LGfFUuHi5z0oilAQGvFAP9Es3OpWi/tolP9Kfbw3+EWCfGupQ9QMtP
|
|
xTKwwmp8epr+So1x+bHNaXBdGm5DJq4fvqUOh5kUHkNM5Gfkp2gPPwWXB9J6Ct3e
|
|
ut3nUlJBeY8K+qV8DGdH4/InuW4HG+Jvw0WSGCmTZnz6q17K0ESJXp2cS5qB7eeL
|
|
/66o9YNotkE=
|
|
=FHFP
|
|
-----END PGP SIGNATURE-----
|