-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
MA-SA-2004:02.ELF_RPATH
Topic: Unsecure ELF RPATH allows user privilege escalation
Announcement: MA-SA-2004-02
Writer: Matthias Andree
Version: 1.0
Announced: 2004-01-29
Type: local escalation of privileges
Impact: vulnerability enables one user to run a process under
some other users's account credentials
Danger: medium to high (depends on packager)
- privilege escalation possible,
program reads libraries from world-writable path (SuSE RPM)
or non-root writable path (Anthon van der Neut's RPM)
Affects: - cvsup-16.1h-2.i386.rpm by Anthon van der Neut
- cvsup-16.1h-43.i586.rpm by SUSE LINUX AG
(this list does not claim to be complete)
Not affected: - cvsup-16.1h-90.i586.rpm by SUSE LINUX AG
- cvsup-16.1h FreeBSD 4 package
- all statically linked builds such as
cvsup-16.1d-LINUXLIBC6.tar.gz on FreeBSD mirrors
(this list does not claim to be complete)
0. Release history
2004-01-21 0.1 first draft
2004-01-29 1.0 first release, updated vendor contact
1. Background
CVSup is a "software package for distributing and updating collections
of files across a network. It can efficiently and accurately mirror all
types of files, including sources, binaries, hard links, symbolic links,
and even device nodes." (quoting John D. Polstra, http://www.cvsup.org/)
CVSup appears a registered trademark of John D. Polstra.
This announcement deals with third-party RPM packages for SuSE Linux,
neither with statically linked CVSup packages nor the CVSup software
itself.
2. Problem description
Some dynamically linked binary builds of the CVSup package contain
untrusted paths in the ELF RPATH fields of the executables, paths found
include /home/anthon and /usr/src/packages (may be world writable on
SuSE systems depending on the PERMISSIONS_SECURITY setting in
/etc/sysconfig/security: easy is vulnerable in any case).
3. Impact
Anyone with write access to one of the RPATH listed directories can
potentially make cvsup or cvsupd link against a manipulated library at
run time and hence execute his own code with the privileges of the user
running the cvsup, cvsupd or cvpasswd programs.
4. Checking for vulnerability
On ELF systems, "objdump -p /usr/bin/cvsup | grep RPATH" or
"readelf -d /usr/bin/cvsup | grep RPATH" can be used to print the
run-time library search path of an ELF object (executable or library).
The result is either missing/empty or a colon-separated list of
directories. All directories listed here and their parents up to the
root of the file system should only be writable by the privileged user
and nobody else.
5. Solution
On SuSE Linux 9.0 and 8.2 for i386 architecture, replace the cvsup RPM
by the SuSE Linux 9.0 upgrade RPM, cvsup-16.1h-90.i586.rpm. Solutions
for other machines is unknown.
Ask your vendor if and only if you are entitled to security support.
6. Future
The CVSup and Modula-3 configurations that were used to build the
vulnerable cvsup packages should be checked carefully to identify which
component leaked the RPATH into the executable.
Automated package build systems for any distribution should check the
ELF RPATH of all generated ELF objects before bundling the package and
refuse to package of untrusted run-time library path components are
found, for a reasonable definition of "trusted". (see appendix B)
A. References
SuSE security information: http://www.suse.de/en/security/
CVSup home page: http://www.cvsup.org/
B. Vendor contacts (UTC dates) and actions, as far as known
2004-01-11 contacted SuSE Security and John D. Polstra
2004-01-11 John D. Polstra removes link to Anthon van der Neut's
packages from the CVSup FAQ
2004-01-12 Thomas Biege of SuSE assures "fix ASAP"
2004-01-19 SuSE release bugfixed RPM for SuSE Linux 9.0
2004-01-21 contacted Anthon van der Neut by mail
2004-01-26 no mail response, but reached Anthon van der Neut by telephone
he added a note that the package is vulnerable, and added a
link to the SuSE package, but he links to the outdated version
2004-01-29 SuSE Security Announcement SuSE-SA:2004:004 mentions the
cvsup fix and announces that the SuSE build system will
be checking the RPATH.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)
iD8DBQFAGRXovmGDOQUufZURAjNxAJ4x4epjbaN2o9zdRL27K/OIZ9D94QCgi/1N
laOl0Ep5KLsUrtungqziLZA=
=yPOA
-----END PGP SIGNATURE-----