TUCoPS :: Windows Apps :: bt1424.txt

Windows MIDI Decoder (QUARTZ.DLL) Heap Corruption



----- Original Message -----
From: "Derek Soeder" <dsoeder@eeye.com>
To: <bugtraq@securityfocus.com>
Sent: Wednesday, July 23, 2003 1:49 PM
Subject: EEYE: Windows MIDI Decoder (QUARTZ.DLL) Heap Corruption


> Windows MIDI Decoder (QUARTZ.DLL) Heap Corruption
>
> Release Date:
> July 23, 2003
>
> Severity:
> High (Remote Code Execution)
>
> Systems Affected:
> Windows 98
> Windows 98 SE
> Windows Millennium Edition
> Windows NT 4.0
> Windows NT 4.0, Terminal Server Edition
> Windows 2000
> Windows XP
> Windows Server 2003
>
>
> Description:
> A little over six hundred years ago, in a quaint German hamlet called
> Hamelin, the Pied Piper proved to the townsfolk that he could take control
> of their rodents and children with just a song.  Turns out the same thing
> works on Windows.
>
> Microsoft provides a component called QUARTZ.DLL that allows Windows
> applications to play MIDI music through a common  interface.  Windows
Media
> Player and Internet Explorer, for example, both use QUARTZ.DLL to play
MIDI
> music files (.mid  extension); in the case of Internet Explorer, MIDI
files
> can be played automatically when a web page is visited through the use of
a
> specific HTML tag.
>
> eEye Digital Security has discovered a pair of flaws in all versions of
> QUARTZ.DLL that would allow a specially-crafted MIDI file to cause the
> execution of arbitrary code when played.  In the worst case, an attacker
> could construct a malicious .mid  file and have it play automatically
> whenever a victim attempts to view certain HTML, such as an
> attacker-controlled website, resulting in the compromise of the victim's
> machine.
>
>
> Technical Description:
> Modern folklore contends that some bands used to inject subliminal
messages
> into their music by recording spoken commands or phrases and dubbing them
> backwards into the track.  Although these allegations and the
effectiveness
> of the technique were  never proven conclusively, it is known that
computers
> running a vulnerable version of QUARTZ.DLL will happily do whatever
they're
> instructed to do without litigation, as long as the commands in the MIDI
> music are in machine language.
>
> The QUARTZ.DLL vulnerability discussed in this advisory is a heap buffer
> overrun resulting from an integer overflow.  If a Text or Copyright string
> with a specified length of FFFFFFFFh is included in the MIDI file, QUARTZ
> will attempt to allocate a  zero-byte heap block, then copy the text
> string -- and any data following it -- to the newly-allocated location in
> the heap.  As a result, all contiguous pages of heap memory following the
> zero-byte block are overwritten until either the source pointer reaches an
> invalid page boundary, the destination pointer reaches the end of heap
> memory, or another thread is dispatched and faults out trying to use
> corrupted heap memory.
>
> The reason this vulnerability exists is because QUARTZ increments the
> specified string length (in order to make room for a null terminator)
> without checking for a potential overflow condition.  The incremented
value
> (now 0) is passed to LocalAlloc(), which succeeds, while the original
value
> (FFFFFFFFh) is given to memcpy() to copy the string data from the file
image
> into the heap buffer.
>
> For the sake of brevity, we have unfortunately omitted the details of the
> MIDI file format from this advisory, and will instead skip straight to the
> following example of a malicious MIDI:
>
>     4D 54 68 64                 ; 'MThd' header chunk tag
>     00 00 00 06                 ; size of header chunk data (6)
>     00 01                       ; MIDI file version (1)
>     00 01                       ; number of tracks (1)
>     65 49                       ; pulses per quarter note (PPQN)
>
>     4D 54 72 6B                 ; 'MTrk' track chunk tag
>     00 00 00 10                 ; size of track chunk data (16)
>     00                          ; delta-time for event (0)
>        FF 02                    ; non-MIDI event (Copyright)
>     8F FF FF FF 7F              ; VLQ for text length (FFFFFFFFh)
>     65 45 79 65 32 30 30 33     ; (start of malicious data)
>
> There are many possible ways to exploit this overflow; the following is a
> sampling of instructions at which exceptions were observed in the
aftermath
> of loading a malicious MIDI in Internet Explorer:
>
>     CALL [EAX]                  ; we control EAX
>     CALL [EAX+C4h]              ; we control EAX
>     CALL [ECX+0Ch]              ; we control ECX
>     JMP [EAX+28h]               ; we control EAX
>     MOV [ECX], EAX              ; we control EAX, ECX
>     MOV [ESI], ECX              ; we control ECX, ESI
>
> Of particular interest are "unlink" sequences such as "MOV [ECX], EAX /
MOV
> [EAX+4], ECX", which could be used to overwrite the unhandled exception
> filter in KERNEL32 during the first instruction, then cause an exception
> with the second (for instance, if EAX pointed somewhere into read-only
> memory, or if EAX was near a page boundary such that EAX+4..7 landed in an
> invalid memory region).
>
> A second heap buffer overrun involving a 16-bit integer overflow and
> subsequent memory allocation was also discovered, but to save space we
will
> only briefly mention it here.  The number of tracks in the MThd chunk, a
> 16-bit field, is subjected to some arithmetic in order to determine the
> necessary size for an array of track data structures. In particular, the
> size of the block is calculated as:
>
>     (number_of_tracks * 24h) + 9E0h
>
> However, the arithmetic is performed entirely in 16 bits, and as a result,
> setting the number of tracks to 1751 (6D7h) or greater will cause an
> insufficiently small heap block to be allocated.  This vulnerability can
be
> leveraged to overwrite  DWORDs in the heap at specific intervals with
> arbitrary data.  Note that Windows 2003 is not susceptible to this
> vulnerability, as it contained a check to ensure that the number of tracks
> is never greater than the exact highest value safe for the 16-bit
> arithmetic.
>
>
> Vendor Status:
> Microsoft was contacted on April 16, 2003, and has released a patch for
this
> vulnerability.  The patch is available at:
> http://www.microsoft.com/technet/security/bulletin/MS03-030.asp
>
> This vulnerability has been assigned the CVE identifier CAN-2003-0346.
>
> Credit:
> Derek Soeder - eEye Digital Security
>
> Greetin's:
> 6Ds; TJB, JC, MC, JAG, AH, JRJ, SMJ, JM, KP; Uma; and finally, Trust, when
> it's not spelled with a $.
>
>
> Copyright (c) 1998-2003 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@eEye.com for
> permission.
>
> Disclaimer
> 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 with regard to this information. In no event shall the
author
> be liable for any 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.
>
> Feedback
> Please send suggestions, updates, and comments to:
>
> eEye Digital Security
> http://www.eEye.com
> info@eEye.com
>

TUCoPS is optimized to look best in Firefox® on a widescreen monitor (1440x900 or better).
Site design & layout copyright © 1986-2024 AOH