[VulnWatch] Zalewski Advisory - Sendmail 8.12.9 prescan bug

From: Steve W. Manzuik (steve_at_entrenchtech.com)
Date: 09/17/03

  • Next message: CORE Security Technologies Advisories: "[VulnWatch] CORE-2003-0531: Multiple IBM DB2 Stack Overflow Vulnerabilities"
    To: <vulnwatch@vulnwatch.org>
    Date: Wed, 17 Sep 2003 15:11:29 -0600
    
    

    The following was released by Michal Zalewski;

    Hello lists,

    --------
    Overview
    --------

      There seems to be a remotely exploitable vulnerability in Sendmail up to
      and including the latest version, 8.12.9. The problem lies in prescan()
      function, but is not related to previous issues with this code.

      The primary attack vector is an indirect invocation via parseaddr(),
      although other routes are possible. Heap or stack structures, depending
      on the calling location, can be overwritten due to the ability to go
      past end of the input buffer in strtok()-alike routines.

      This is an early release, thanks to my sheer stupidity.

    --------------
    Attack details
    --------------

      Local exploitation on little endian Linux is confirmed to be trivial
      via recipient.c and sendtolist(), with a pointer overwrite leading to a
      neat case of free() on user-supplied data, i.e.:

      eip = 0x40178ae2
      edx = 0x41414141
      esi = 0x61616161

      SEGV in chunk_free (ar_ptr=0x4022a160, p=0x81337e0) at malloc.c:3242

      0x40178ae2 <chunk_free+486>: mov %esi,0xc(%edx)
      0x40178ae5 <chunk_free+489>: mov %edx,0x8(%esi)

      Remote attack is believed to be possible.

    ----------------
    Workaround / fix
    ----------------

      Vendor was notified, and released an early patch attached below.
      There are no known workarounds.

    Index: parseaddr.c
    ===================================================================
    RCS file: /cvs/src/gnu/usr.sbin/sendmail/sendmail/parseaddr.c,v
    retrieving revision 1.16
    diff -u -r1.16 parseaddr.c
    --- parseaddr.c 29 Mar 2003 19:44:01 -0000 1.16
    +++ parseaddr.c 16 Sep 2003 17:37:26 -0000
     -700,7 +700,11
                                                    addr[MAXNAME] = '\0';
            returnnull:
                                            if (delimptr != NULL)
    + {
    + if (p > addr)
    + p--;
                                                    *delimptr = p;
    + }
                                            CurEnv->e_to = saveto;
                                            return NULL;
                                    }

    -- 
    ------------------------- bash$ :(){ :|:&};: -- 
     Michal Zalewski * [http://lcamtuf.coredump.cx] 
        Did you know that clones never use mirrors? 
    --------------------------- 2003-09-16 21:18 -- 
    

  • Next message: CORE Security Technologies Advisories: "[VulnWatch] CORE-2003-0531: Multiple IBM DB2 Stack Overflow Vulnerabilities"