EEYE: Windows ANI File Parsing Buffer Overflow Jan 11 2005 06:20PM
Derek Soeder (dsoeder eeye com)
Windows ANI File Parsing Buffer Overflow

Systems Affected:
Windows Me
Windows 2000
Windows XP (SP1 and earlier)
Windows 2003

eEye Digital Security has discovered a vulnerability in USER32.DLL's
handling of Windows animated cursor (.ani) files that will allow a
remote attacker to reliably overwrite the stack with arbitrary data and
execute arbitrary code.

Because Windows animated cursors can be supplied for use by Internet
Explorer, this vulnerability affects any applications that use the
Internet Explorer component internally, such as Internet Explorer
itself, Word, Excel, PowerPoint, Outlook, Outlook Express, and so on, as
well as the Windows shell.

In the case of Internet Explorer, the user's system will be compromised
when the user views a website that shows a malformed ANI file referenced
via a style sheet in the HTML file. Likewise, a system may be
compromised through Outlook and Outlook Express when the user tries to
read an HTML e-mail containing a MIME-encoded malformed ANI file and a
style sheet referencing the encoded ANI file, invoked using HTML such as
< BODY style="CURSOR: url('cid:xxxx')" >. In the case of the Windows
shell (explorer.exe), exploitation occurs when the user opens a folder
containing a malformed ANI file.

This vulnerability also exists in all obsolete versions of the Windows
operating system (Windows 95/98/NT4).

Technical Details:
The buffer overflow bug exists in a part of USER32.DLL involved in
handling ANI animated cursor files. A partial ANI file format is given

"RIFF" {(DWORD)Length_of_file}
"LIST" {(DWORD)Length_of_list}
"INAM" {(DWORD)Length_of_title} {szTitle}
"IART" {(DWORD)Length_of_author} {szAuthor}
"anih" {(DWORD)Length_of_AnimationHeader} {AnimationHeaderBlock}

Generally, the length of AnimationHeaderBlock shoule be 36 bytes
(0x00000024). The vulnerability is in the handling of the
Length_of_AnimationHeader field. This value will be passed as the length
argument of memcpy(), in order to copy the contents of
AnimationHeaderBlock, but the value is not checked appropriately. The
buffer intended to hold the AnimationHeaderBlock is located on the
stack, so we can overwrite the return address and exception handler on
the stack and jump into the buffer containing our code.

This vulnerability is a separate vulnerability from the ones discovered
by Xfocus.

Retina Network Security Scanner has been updated to identify this

Vendor Status:
Microsoft has released a patch for this vulnerability. The patch is
available at:

Yuji Ukai

Related Links:
Retina Network Security Scanner - Free 15 Day Trial

eEye Geneva and UK guys, Retina Japanese edition team, TEX@TEX (hey
watzup!!) , Manma Kanrakuzaka - Okinawa Cuisine (Tomato salad tastes

Copyright (c) 1998-2005 eEye Digital Security
Permission is hereby granted for the redistribution of this alert
electronically. It is not to be edited in any way without express
consent of eEye. If you wish to reprint the whole or any part of this
alert in any other medium excluding electronic medium, please email
alert (at) eEye (dot) com [email concealed] for permission.

The information within this paper may change without notice. Use of this
information constitutes acceptance for use in an AS IS condition. There
are no warranties, implied or express, with regard to this information.
In no event shall the author be liable for any direct or indirect
damages whatsoever arising out of or in connection with the use or
spread of this information. Any use of this information is at the user's
own risk.

[ reply ]


Privacy Statement
Copyright 2010, SecurityFocus