The OpenNET Project
 
Search (keywords):  SOFT ARTICLES TIPS & TRICKS SECURITY
LINKS NEWS MAN DOCUMENTATION


ClamAV get_unicode_name() off-by-one buffer overflow


<< Previous INDEX Search src / Print Next >>
Date: Sat, 8 Nov 2008 12:57:22 +0100
From: Moritz Jodeit <moritz@jodeit.org.>
To: [email protected]
Subject: ClamAV get_unicode_name() off-by-one buffer overflow
Message-ID: <20081108115722.GA4659@fugu1.local.>
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
        protocol="application/pgp-signature"; boundary="rwEMma7ioTxnRzrJ"
Content-Disposition: inline
X-Virus-Scanned: antivirus-gw at tyumen.ru


--rwEMma7ioTxnRzrJ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

-----------------------------------------------------------------
ClamAV get_unicode_name() off-by-one buffer overflow

Copyright (c) 2008 Moritz Jodeit <moritz@jodeit.org.> (2008/11/08)

Application details:

        From http://www.clamav.net/:

        "Clam AntiVirus is an open source (GPL) anti-virus toolkit for UNIX,
        designed especially for e-mail scanning on mail gateways. It provides
        a number of utilities including a flexible and scalable multi-threaded
        daemon, a command line scanner and advanced tool for automatic
        database updates. The core of the package is an anti-virus engine
        available in a form of shared library."


Vulnerability description:

        ClamAV contains an off-by-one heap overflow vulnerability in the
        code responsible for parsing VBA project files. Successful
        exploitation could allow an attacker to execute arbitrary code with
        the privileges of the `clamd' process by sending an email with a
        prepared attachment.

        The vulnerability occurs inside the get_unicode_name() function
        in libclamav/vba_extract.c when a specific `name' buffer is passed
        to it.

        101 static char *
        102 get_unicode_name(const char *name, int size, int big_endian)
        103 {
        104         int i, increment;
        105         char *newname, *ret;
        106
        107         if((name == NULL) || (*name == '\0') || (size <= 0))
        108                 return NULL;
        109
        110         newname = (char *)cli_malloc(size * 7);

        First the `size' of the `name' buffer multiplied by 7 is used to
        allocate the destination buffer `newname'. When the `name' buffer
        only consists of characters matching some specific criteria [1]
        and `big_endian' is set, the following loop can write exactly 7
        characters into the allocated destination buffer `newname' per
        character found in source buffer `name'.

        This effectively fills up the destination buffer completely. After
        the loop in line 143, the terminating NUL byte is written and
        overflows the allocated buffer on the heap.

        143         *ret = '\0';
        144
        145         /* Saves a lot of memory */
        146         ret = cli_realloc(newname, (ret - newname) + 1);
        147         return ret ? ret : newname;
        148 }

        [1] Every character matching the following condition results in
            7 characters written to the destination buffer:

                (c & 0x80 || !isprint(c)) && (c >= 10 || c < 0)

        A VBA project file embedded inside an OLE2 office document send
        as an attachment can trigger the off-by-one.


Vendor response:

        2008/10/16 Initial report to vendor
        2008/10/16 Vulnerability acknowledged by [email protected]
        2008/11/03 Release of version 0.94.1


Vulnerable packages:

        All versions up to 0.94 are vulnerable.
        Version 0.94.1 fixes the problem.


--rwEMma7ioTxnRzrJ
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (OpenBSD)

iEYEARECAAYFAkkVfqIACgkQVmsppI8oVCPjPACdGEznyRtPWDjj72oZJMVDT+Lz
u4oAn1FLUN6hCx6nxH3D8aZJpVkFlUvB
=ZGyW
-----END PGP SIGNATURE-----

--rwEMma7ioTxnRzrJ--


<< Previous INDEX Search src / Print Next >>



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру