Subject: NetBSD Security Advisory 2001-016: unsafe chdir usage in fts(3)
To: None <tech-security@netbsd.org, current-users@netbsd.org>
From: NetBSD Security Officer <security-officer@netbsd.org>
List: tech-security
Date: 09/06/2001 09:59:38
-----BEGIN PGP SIGNED MESSAGE-----


		 NetBSD Security Advisory 2001-016
		 =================================

Topic:		unsafe chdir usage in fts(3)

Version:	All NetBSD releases prior to July 9, 2001.

Severity:	Local users can trick processes that walk file system
		trees to perform their actions in the wrong location.

Fixed:		NetBSD-current:		July 9, 2001
		NetBSD-1.5 branch:	August 22, 2001 (1.5.2 includes the fix)


Abstract
========

The fts(3) functions can be tricked by a rogue user into performing
actions on incorrect file system hierarchies.


Technical Details
=================

The macro for chdir used in libc/gen/fts (__fts13.c after NetBSD 1.3)
did not perform sufficient safety checks. If any directory (or symlink
to a directory) above the current directory fts was processing was
moved, the fts-using application could be made to descend the wrong
directory sub-tree, and/or ascend above the original starting directory.
Once it has ascended above the starting directory, the process could
descend into an unintended file system hierarchy.

This is particularly dangerous when combined with automated scripts
which run programs such as 'rm -r'.


Solutions and Workarounds
=========================

The following instructions describe how to upgrade your C library
and affected statically linked system binaries by updating your source
tree and rebuilding and installing a new version of the C library
and affected binaries.

* NetBSD-current: 

	Systems running NetBSD-current dated from before 2001-06-09
	should be upgraded to NetBSD-current dated 2001-06-10 or later.

	The following directory needs to be updated from the
	netbsd-current CVS branch (aka HEAD):
		src/lib/libc

	To update from CVS, re-build, and re-install libc:
		# cd /usr/src/lib/libc
		# cvs update -d -P
		# make cleandir dependall install


	Alternatively, apply the following patch (with potential offset 
	differences) and rebuild & re-install libc:
		ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2001-016-fts.patch

	To patch, re-build and re-install libc:
		# cd /usr/src
		# patch < /path/to/SA2001-016-fts.patch
		# make cleandir dependall install


	The following static binaries must also be rebuilt for the fix
	to be complete:
		/bin/chmod /bin/cp /bin/ksh /bin/ls /bin/pax /bin/rm
		/sbin/dump /sbin/dump_lfs


* NetBSD 1.5, 1.5.1:

	Systems running NetBSD releases up to and including 1.5.1 should
	apply the following patch (with potential offset differences):
		ftp://ftp.netbsd.org/pub/NetBSD/security/patches/SA2001-016-fts-1.5.patch

	To patch, re-build and re-install libc
		# cd /usr/src
		# patch < /path/to/SA2001-016-fts.patch
		# make cleandir dependall install


	The following static binaries must also be rebuilt for the fix
	to be complete:
		/bin/chmod /bin/cp /bin/ksh /bin/ls /bin/pax /bin/rm
		/sbin/dump /sbin/dump_lfs


Systems running releases older than NetBSD 1.5 should be upgraded to
NetBSD 1.5.1 before applying the fixes described here.


Thanks To
=========

Kris Kennaway for initial notification of the issue.

Christos Zoulas for patches, inspired by Todd C. Miller, and for
clarification of the descriptions in this advisory.


Revision History
================

	2001-09-06	Initial release


More Information
================

An up-to-date PGP signed copy of this release will be maintained at
  ftp://ftp.netbsd.org/pub/NetBSD/security/advisories/NetBSD-SA2001-016.txt.asc

Information about NetBSD and NetBSD security can be found at
http://www.NetBSD.ORG/ and http://www.NetBSD.ORG/Security/.


Copyright 2001, The NetBSD Foundation, Inc.  All Rights Reserved.

$NetBSD: NetBSD-SA2001-016.txt,v 1.11 2001/09/06 15:40:50 lukem Exp $

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (NetBSD)
Comment: For info see http://www.gnupg.org

iQCVAwUBO5eZIj5Ru2/4N2IFAQG7WAP+MDviy39gwuXdaUdYtPvpPULDsD/Euh6e
OUbJIZDykDAwS/w8NSa+vlS3+PJmaWPl1FW0uYTnjWAyfS6A3HGozS45QrXCRhj+
f7yrqp24SaIYOG6/eNRg0J9Ekm53DzN6BsBWveFCS/P/oaji7JT7UC7A3mtzn9et
5zg8cBYPLxs=
=RvHM
-----END PGP SIGNATURE-----