OpenBSD Local Root Compromise

From: Milos Urbanek (urbanek@zoom-int.cz)
Date: Thu Apr 11 2002 - 10:01:17 PDT

  • Next message: Solar Designer: "Re: local root compromise in openbsd 3.0 and below"

        ZOOM International Security Advisory
    
        OpenBSD local root compromise
    
        Systems affected:
            OpenBSD all version, OpenBSD Current prior April 8, 2002
    
        Risk: High
        Date: April 11, 2002
    
        Legal Notice:
            This advisory is copyright (c) ZOOM International.
    
        Disclaimer:
            Information contained in this advisory are provided only ``AS IS''.
        ZOOM International is not liable for any damages whatsoever
        arising out of or in connection with the use or spread of this information.
        Any use of this information is at our own risk.
    
        Background:
            Program /usr/bin/mail is a simple mail user agent which can be used also    in the batch mode, for example to send mail to the administrator when
        running cron tasks.
    
        Problem description:
            There is a local root compromise in all versions of OpenBSD including
        OpenBSD Current prior to April 9, 2002 due to a bug in program
        /usr/bin/mail.
    
        Details:
            Program /usr/bin/mail accepts escape sequences while running in
        the non-interactive mode. When the attacker inserts the escape sequence
        into the stream which is used as an input to the mail command this escape
        sequence is interpreted by the mail command and it is possible for example
        execute arbitrary commands or read/write any file in the system with the
        privileges of the user running /usr/bin/mail.
    
        Impact:
            Users can gain superuser privileges because the output of
        the /etc/daily script is piped to the /usr/bin/mail command while
        running regular cron tasks.
            There exists a method developed by Przemyslav Frasunek which allows
        to perform a local attack by creating a file with a specialy designed
        filename and permissions. Method of performing remote exploitation of this
        bug is currently unknown.
    
        Exploit:
            An exploit for this bug exists and is publicly available.
        
        Workaround:
            Remove /usr/bin/mail binary until a patch for your release is available.
    
        Contact Status:
            Vendor was contacted on 2002-04-08. Problem report related to the
        security advisory was sent on 2002-04-10.
        
        Available Fixes:
            This bug was patched in OpenBSD Current on April 8, 2002.
        Official patch for other OpenBSD releases is not available at the moment
        but the bug can be solved by applying the attached source code patch
        to the 1.23 revision of the appropriate file and installing new mail
        binary. 
    
        Credits:
            The bug was found by Milos Urbanek, Security Conslutant at ZOOM
        International. Exploit was written by Przemyslav Frasunek.
    
    
        About ZOOM International:
            ZOOM International is a Czech company providing services and
        solutions in the area of IT security. For more information visit
        our website at http://www.zoom-int.cz/.
    
    
    Mail Patch
    
    Index: collect.c
    ===================================================================
    RCS file: /cvs/src/usr.bin/mail/collect.c,v
    retrieving revision 1.23
    retrieving revision 1.24
    diff -u -r1.23 -r1.24
    --- collect.c   2001/11/21 15:26:39     1.23
    +++ collect.c   2002/04/08 20:27:17     1.24
    @@ -1,4 +1,4 @@
    -/*     $OpenBSD: collect.c,v 1.23 2001/11/21 15:26:39 millert Exp $    */
    +/*     $OpenBSD: collect.c,v 1.24 2002/04/08 20:27:17 millert Exp $    */
     /*     $NetBSD: collect.c,v 1.9 1997/07/09 05:25:45 mikel Exp $        */
     
     /*
    @@ -38,7 +38,7 @@
     #if 0
     static const char sccsid[] = "@(#)collect.c    8.2 (Berkeley) 4/19/94";
     #else
    -static const char rcsid[] = "$OpenBSD: collect.c,v 1.23 2001/11/21 15:26:39 millert Exp $";
    +static const char rcsid[] = "$OpenBSD: collect.c,v 1.24 2002/04/08 20:27:17 millert Exp $";
     #endif
     #endif /* not lint */
     
    @@ -161,7 +161,8 @@
                        value("interactive") != NULL && !lastlong &&
                        (value("dot") != NULL || value("ignoreeof") != NULL))
                            break;
    -               if (linebuf[0] != escape || lastlong) {
    +               if (linebuf[0] != escape || value("interactive") == NULL ||
    +                   lastlong) {
                            if (putline(collf, linebuf, !longline) < 0)
                                    goto err;
                            continue;
    



    This archive was generated by hypermail 2b30 : Thu Apr 11 2002 - 14:11:44 PDT