Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Feb 2000 20:20:35 GMT
From:      Colin Phipps <crp22@cam.ac.uk>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   gnu/16942: send-pr(1) creates unsafe temp files
Message-ID:  <200002232020.UAA03039@crp22.trin.cam.ac.uk>

next in thread | raw e-mail | index | archive | help

>Number:         16942
>Category:       gnu
>Synopsis:       send-pr(1) creates unsafe temp files
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 23 12:30:01 PST 2000
>Closed-Date:
>Last-Modified:
>Originator:     Colin Phipps
>Release:        FreeBSD 4.0-CURRENT i386
>Organization:
n/a
>Environment:

FreeBSD 4.0-CURRENT as of 2000/02/22
 
>Description:

send-pr(1) creates a number of temporary files, in /tmp by default, for 
holding the bug report while it's parsed and edited, and various other 
tasks. These temporary files are opened unsafely with predictable filenames, 
making send-pr vulnerable to a symlink attack.

>How-To-Repeat:

See description.

>Fix:

Use mktemp(1):

*** /usr/bin/send-pr	Tue Feb 22 11:54:39 2000
--- ./send-pr	Wed Feb 23 19:43:16 2000
***************
*** 73,84 ****
  
  #
  
- [ -z "$TMPDIR" ] && TMPDIR=/tmp
- 
- TEMP=$TMPDIR/p$$
- BAD=$TMPDIR/pbad$$
- REF=$TMPDIR/pf$$
- 
  if [ -z "$LOGNAME" -a -n "$USER" ]; then
    LOGNAME=$USER
  fi
--- 73,78 ----
***************
*** 93,111 ****
    ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
  elif [ -f /bin/domainname ]; then
    if [ "`/bin/domainname`" != "" -a -f /usr/bin/ypcat ]; then
      # Must use temp file due to incompatibilities in quoting behavior
      # and to protect shell metacharacters in the expansion of $LOGNAME
      /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" |
!       cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
!     ORIGINATOR="`cat $TEMP`"
!     rm -f $TEMP
    fi
  fi
  
  if [ "$ORIGINATOR" = "" ]; then
!   grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
!   ORIGINATOR="`cat $TEMP`"
!   rm -f $TEMP
  fi
  
  if [ -n "$ORGANIZATION" ]; then
--- 87,107 ----
    ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
  elif [ -f /bin/domainname ]; then
    if [ "`/bin/domainname`" != "" -a -f /usr/bin/ypcat ]; then
+     PTEMP=`mktemp -t pt` || exit 1
      # Must use temp file due to incompatibilities in quoting behavior
      # and to protect shell metacharacters in the expansion of $LOGNAME
      /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" |
!       cut -f5 -d':' | sed -e 's/,.*//' > $PTEMP
!     ORIGINATOR="`cat $PTEMP`"
!     rm -f $PTEMP
    fi
  fi
  
  if [ "$ORIGINATOR" = "" ]; then
!   PTEMP=`mktemp -t pt` || exit 1
!   grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $PTEMP
!   ORIGINATOR="`cat $PTEMP`"
!   rm -f $PTEMP
  fi
  
  if [ -n "$ORGANIZATION" ]; then
***************
*** 251,256 ****
--- 247,255 ----
  HOW_TO_REPEAT_C='<Code/input/activities to reproduce the problem (multiple lines)>'
  FIX_C=''
  
+ # Create temporary files, safely
+ REF=`mktemp -t pf` || exit 1
+ TEMP=`mktemp -t pf` || exit 1
  # Catch some signals. ($xs kludge needed by Sun /bin/sh)
  xs=0
  trap 'rm -f $REF $TEMP; exit $xs' 0
***************
*** 482,487 ****
--- 481,487 ----
      case "$input" in
        a*)
  	if [ -z "$BATCH" ]; then
+ 	  BAD=`mktemp -t pbad`
  	  echo "$COMMAND: the problem report remains in $BAD and is not sent."
  	  mv $TEMP $BAD
          else
***************
*** 542,547 ****
--- 542,548 ----
  else
    echo "$COMMAND: mysterious mail failure."
    if [ -z "$BATCH" ]; then
+     BAD=`mktemp -t pbad`
      echo "$COMMAND: the problem report remains in $BAD and is not sent."
      mv $REF $BAD
    else



>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200002232020.UAA03039>