[Secure-testing-team] Bug#488140: checkinstall: Unsafe temp dir creation

Felipe Sateler fsateler at gmail.com
Thu Jun 26 17:12:00 UTC 2008


Package: checkinstall
Version: 1.6.1-6
Severity: grave
Tags: security patch
Justification: user security hole

*** Please type ddyour report below this line ***
Checkinstall (and installwatch) create temporary directories manually
instead of using mktemp, which creates a race condition.

The attached patch changes these into calls to mktemp, which is secure.

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.25-preempt (SMP w/2 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages checkinstall depends on:
ii  dpkg-dev                      1.15.0     Debian package development tools
ii  file                          4.24-2     Determines file type using "magic"
ii  findutils                     4.4.0-2    utilities for finding files--find,
ii  libc6                         2.7-12     GNU C Library: Shared libraries

Versions of packages checkinstall recommends:
ii  make                          3.81-5     The GNU version of the "make" util

-- no debconf information
-------------- next part --------------
Index: checkinstall
===================================================================
--- checkinstall	(revision 10000)
+++ checkinstall	(working copy)
@@ -965,16 +965,8 @@
 
 # Find a safe TMP_DIR
 
-TMP_DIR=${BASE_TMP_DIR}/`awk 'BEGIN { srand(); for (i=1;i<22;i++) { a=95; while (a > 90 && a < 97) { a=65+int(50*rand())}; printf("%c", a) } }'`
-[ -e "$TMP_DIR" ] && rm -rf $TMP_DIR
-if [ -e "$TMP_DIR" ]; then 
-   echo
-   echog "My temp dir exists already.\nThis looks like a symlink attack!"
-   echo 
-   echog "*** Aborting"
-   echo
-   exit 1
-fi
+TMP_DIR=`mktemp -q -d -p "${BASE_TMP_DIR}"`
+RETURN=$?
 
 if [ "$TMP_DIR" = "$BASE_TMP_DIR" -o "$TMP_DIR" = "/" ]; then
   echo 
@@ -985,11 +977,6 @@
   exit 1
 fi
 
-
-mkdir $TMP_DIR
-chmod 700 $TMP_DIR
-RETURN=$?
-
 if [ $RETURN -gt 0 ]; then
    echo
    echog "**** Failed to create temp dir! \n**** Do you have write permission for %s? \n\n**** Aborting installation." "$BASE_TMP_DIR"
Index: installwatch-0.7.0beta5/installwatch
===================================================================
--- installwatch-0.7.0beta5/installwatch	(revision 10000)
+++ installwatch-0.7.0beta5/installwatch	(working copy)
@@ -74,31 +74,8 @@
 	local mkt_refdir=$1
 	local mkt_wrkdir=""
 
-	mkt_wrkdir=${BASE_TMP_DIR}/\
-`awk 'BEGIN {\
-	srand();\
-	for (i=1;i<21;i++) {\
-		a=95;\
-		while (a > 90 && a < 97) {\
-			a=65+int(50*rand())\
-		};\
-		printf("%c", a) \
-	}\
-}'`
-	
-	[ -e "${mkt_wrkdir}" ] && rm -rf ${mkt_wrkdir}
-	if [ -e "${mkt_wrkdir}" ]; then 
-		echo
-		echo "Error : My temp dir exists already. This looks like a symlink attack!"
-		echo 
-		echo "*** Aborting ***"
-		echo
-		exit 1
-	fi	
+	mkt_wrkdir=`mktemp -q -d -p ${BASE_TMP_DIR}`
 
-	mkdir ${mkt_wrkdir}
-	chmod 0700 ${mkt_wrkdir}
-
 	eval $mkt_refdir=\$mkt_wrkdir
 }
 


More information about the Secure-testing-team mailing list