Bug 171071 - CVE-2005-3186 XPM buffer overflow
Summary: CVE-2005-3186 XPM buffer overflow
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 4
Classification: Red Hat
Component: gdk-pixbuf
Version: 4.0
Hardware: All
OS: Linux
medium
high
Target Milestone: ---
: ---
Assignee: Matthias Clasen
QA Contact: Brian Brock
URL:
Whiteboard: reported=20051013,embargo=20051115,im...
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2005-10-17 22:06 UTC by Josh Bressers
Modified: 2007-11-30 22:07 UTC (History)
1 user (show)

Fixed In Version: RHSA-2005-810
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2005-11-15 14:27:55 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
Proposed patch for this issue. (736 bytes, patch)
2005-10-17 22:06 UTC, Josh Bressers
no flags Details | Diff


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2005:810 0 normal SHIPPED_LIVE Important: gdk-pixbuf security update 2005-11-15 05:00:00 UTC

Description Josh Bressers 2005-10-17 22:06:58 UTC
iDEFENSE has reported a buffer overflow in the gdk-pixbuf's XPM processor.
(Text taken from the iDEFENSE advisory)

II. DESCRIPTION

Remote exploitation of heap overflow vulnerability in various vendors'
implementations of the GTK+ gdk-pixbuf XPM image rendering library could
allow for arbitrary code execution. iDEFENSE is currently unaware of
exploits for this vulnerability other than those maintainted by iDEFENSE
Labs, however exploitation is trivial. Vendor patches for this iDEFENSE
exclusive report are currently unavailable. A workaround has been
provided.

The vulnerability specifically exists due to an integer overflow while
processing XPM files. The following code snippet illustrates the
vulnerability:

if (n_col <= 0 || n_col >= G_MAXINT / (cpp + 1)) {
                g_set_error (error,
                             GDK_PIXBUF_ERROR,
                             GDK_PIXBUF_ERROR_CORRUPT_IMAGE,
                             _("XPM file has invalid number of colors"));
        return NULL;
    }
[...]
colors = (XPMColor *) g_try_malloc ((sizeof (XPMColor) * n_col));
[...]


The validity check of n_col is enough to prevent an integer overflow in
the first g_try_malloc, however there is not a proper check for the
second g_try_malloc, which allows an undersized heap buffer to be
allocated, then overflowed while using n_col as an upper bounds in a
copying loop. This can be used to execute arbitrary code via traditional
heap overflow 4 byte write methods or by overwriting adjacent areas of
the heap with important values such as function pointers.

Comment 1 Josh Bressers 2005-10-17 22:06:58 UTC
Created attachment 120098 [details]
Proposed patch for this issue.

Comment 2 Josh Bressers 2005-10-17 22:07:49 UTC
This issue should also affect RHEL2.1 and RHEL3

Comment 5 Josh Bressers 2005-11-15 14:11:08 UTC
Lifting embargo

Comment 6 Red Hat Bugzilla 2005-11-15 14:27:55 UTC
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.

http://rhn.redhat.com/errata/RHSA-2005-810.html



Note You need to log in before you can comment on or make changes to this bug.