Windows Metafile vulnerability

The Windows Metafile vulnerability—also called the Metafile Image Code Execution and abbreviated MICE—is a security vulnerability in the way some versions of the Microsoft Windows operating system handled images in the Windows Metafile format. It permits arbitrary code to be executed on affected computers without the permission of their users. It was discovered on December 27, 2005, and the first reports of affected computers were announced within 24 hours. Microsoft released a high-priority update to eliminate this vulnerability via Windows Update on January 5, 2006. Attacks using this vulnerability are known as WMF exploits.

The vulnerability was located in gdi32.dll and existed in all versions of Microsoft Windows from Windows 3.0 to Windows Server 2003 R2. However, attack vectors only exist in NT-based versions of Windows (Windows NT, Windows 2000, Windows XP and Windows Server 2003). Exploits taking advantage of the vulnerability on Windows NT-based systems facilitated the propagation of various types of malware, typically through drive-by downloads.

Due to extreme impact, this bug won the 2007 Pwnie Award for "Mass 0wnage" and "Breaking the Internet".

Affected systems
All versions of the Microsoft Windows operating system support the Windows Metafile graphics standard. All versions from Windows 3.0 to Windows Server 2003 R2 contain this security flaw. However, Windows NT 4.0 and Windows XP, unless patched, are more vulnerable than earlier versions because their default installation enables Windows Metafile code execution, the source of the vulnerability. Later versions of Windows do not have this vulnerability.

According to computer security expert Steve Gibson, Windows NT 4 is vulnerable to known exploits if image preview is enabled. Windows operating systems that do not have image preview enabled or that have hardware-based Data Execution Prevention (DEP) active for all applications should not be susceptible to this exploit.

Operating systems other than Windows (e.g., macOS, Unix, Linux, etc.) are not directly affected. However, a non-Windows system could become vulnerable if it runs software to view Windows WMF files. This could include software that incorporates or clones Windows' native Graphics Device Interface (GDI) Dynamic-link library (DLL) or that run Windows or Windows programs through an emulator or compatibility layer. A Unix-like system that uses Wine to emulate Windows, for example, could be exploited. Gibson wrote the program MouseTrap, which his company distributes as freeware, to detect Windows Metafile vulnerability in systems running Windows and Windows emulators.

The vulnerability
According to assessments by F-Secure, the vulnerability is an inherent defect in the design of WMF files, because the underlying architecture of such files is from a previous era, and includes features which allow actual code to be executed whenever a WMF file opens. The original purpose of this was mainly to handle the cancellation of print jobs during spooling.

According to Secunia, "The vulnerability is caused due to an error in the handling of Windows Metafile files ('.wmf') containing specially crafted  'Escape' records. Such records allow arbitrary user-defined function to be executed when the rendering of a WMF file fails." According to the Windows 3.1 SDK documentation, the  escape was obsoleted and replaced by the function of the same name in Windows 3.1, long before the WMF vulnerability was discovered. However the obsoleted escape code was retained for compatibility with 16 bit programs written for (or at least backwards compatible with) Windows 3.0. This change happened at approximately the same time as Microsoft was creating the 32 bit reimplementation of GDI for Windows NT, and it is likely that the vulnerability occurred during this effort.

The 'Escape' mechanism in question allows applications (not metafiles) to access output device features not yet abstracted by GDI, such as hardware accelerated Bézier curves, encapsulated postscript support, etc. This is done by passing an opcode, a size and a pointer to some data to the call, which will usually just pass it on to the driver. Because most Escape calls produce actual graphics, the general escape mechanism is allowed in metafiles with little thought originally given to the possibility of using it for things like SETABORTPROC, modern non-vulnerable metafile interpreters now checks the opcode against a blacklist or whitelist, while keeping the full set of opcodes available to regular code that calls the GDI escape functions directly (because such code is already running in the same way as the code it could make GDI call, there is no security risk in that case).

It is worth noting that 16 bit Windows (except the rarely used Real mode of Windows 3.0) was immune to the vulnerability because the pointer specified in the metafile can only point to data within the metafile, and 16 bit Windows always had a full no-execute-data enforcement mandated by the segmented architecture of 16 bit protected mode. Windows NT for CPU architectures other than 32 bit x86 (such as MIPS, PowerPC, Alpha, Itanium and x86_64) required return-oriented programming to exploit because those architectures had the no-execute functionality missing from older x86 processors.

The vulnerability is in the Common Vulnerabilities and Exposures database, US-CERT reference VU#181038 and Microsoft Knowledge Base Article 912840. It was first observed in the wild by researchers at Sunbelt Software on December 28, 2005, and announced publicly by the company's president Alex Eckelberry.

Propagation and infection
Computers can be affected via the spread of infected e-mails which carry the hacked WMF file as an attachment. Infection may also result from:
 * Viewing a website in a web browser that automatically opens WMF files, in which case any potential malicious code may be automatically downloaded and opened. Internet Explorer, the default Web browser for all versions of Microsoft Windows since 1996 through Windows 10, does this.
 * Previewing an infected file in Windows Explorer.
 * Viewing an infected image file using some vulnerable image-viewing programs.
 * Previewing or opening infected emails in older versions of Microsoft Outlook and Outlook Express.
 * Indexing a hard disk containing an infected file with Google Desktop.
 * Clicking on a link through an instant messaging program such as Windows Live Messenger, AOL Instant Messenger (AIM) or Yahoo! Messenger.

Other methods may also be used to propagate infection. Because the problem is within the operating system, using non-Microsoft browsers such as Firefox or Opera does not provide complete protection. Users are typically prompted to download and view a malicious file, infecting the computer. Infected files may be downloaded automatically, which opens the possibility for infection by disk indexing or accidental previewing.

According to assessments from the McAfee antivirus company, the vulnerability has been used to propagate the Bifrost backdoor trojan horse. Other forms of malware have also exploited the vulnerability to deliver various malicious payloads.

McAfee claims that the first generation of such exploits had been encountered by more than 6% of their customer base by December 31, 2005.

Official patch
Microsoft released an official patch to address the problem on January 5, 2006. This patch may be applied in lieu of other corrective measures.

The official patch is available for Windows 2000, Windows XP and Microsoft Windows Server 2003. Windows NT 4 and other older operating systems did not receive a patch as they were no longer supported by Microsoft by then. Steve Gibson stated in his Security Now! podcast No. 20, that his company Gibson Research Corporation would make a patch available for Windows 9x systems if Microsoft did not. After further research, Steve Gibson stated, in a later Security Now! podcast No. 23, that Windows 9x and ME are not vulnerable and do not need patching. Windows 9x/ME users can run his Mouse Trap utility to see this for themselves.

A free downloadable patch for Windows NT has been provided by Paolo Monti from Future Time, the Italian distributor of Eset's NOD32 anti-virus system. The patch works on older operating systems, but it is supplied without warranty.

There have been reports of the official patch being automatically installed even when Windows Automatic Update is configured to ask before installing automatically downloaded updates. This causes an automatic reboot, which can cause loss of data if the user has a program open with unsaved changes.

Other corrective measures
These measures are of historical interest only on systems updated on or after January 5, 2006.

Workaround
As a workaround before a patch was available, on December 28, 2005, Microsoft advised Windows users to unregister the dynamic-link library file shimgvw.dll (which can be done by executing the command  from the Run menu or the command prompt) which invokes previewing of image files and is exploited by most of these attacks. The DLL can be re-registered after patching by running. This workaround blocks a common attack vector but does not eliminate the vulnerability.

Third-party patch
A third party patch was released by Ilfak Guilfanov on December 31, 2005, to temporarily disable the vulnerable function call in gdi32.dll. This unofficial patch received much publicity due to the unavailability of an official one from Microsoft, receiving the recommendation of SANS Institute Internet Storm Center and F-Secure. Because of the large amount of publicity, including being indirectly slashdotted, Guilfanov's website received more visitors than it could cope with, and was suspended on January 3, 2006; the patch was still available for download from a number of mirrors including the Internet Storm Center website.

Guilfanov's website went back online on January 4 in a much-reduced state. No longer providing the patch on-site due to bandwidth issues, the homepage provided a list of mirrors where a user could download the patch and the associated vulnerability-checker, and the MD5 checksum for the file, so that it could be checked that a downloaded file was probably genuine.

After Microsoft released its patch, Guilfanov withdrew his.

Risk reduction techniques
Microsoft says its patch removes the flawed functionality in GDI32 that allowed the WMF vulnerability. For computers running an unpatched version of Windows, a defence in depth approach was recommended, to mitigate the risk of infection. Various sources have recommended mitigation efforts that include: According to SANS Institute Internet Storm Center article, using a web browser other than Internet Explorer may offer additional protection against this vulnerability. Depending on settings, these browsers may ask the user before opening an image with the .wmf extension, but this only reduces the chance of opening the maliciously crafted Windows Metafile, and does not protect against the vulnerability being exploited as these browsers still open the metafile if it is masquerading as another format. It is better to entirely disable image loading in any browser used.
 * Making use of hardware-enforced Data Execution Prevention effective for all applications.
 * Set the default WMF application to be one not susceptible to infection, such as Notepad.
 * Do not use Internet Explorer, or at least turn off downloads by setting the default security settings to high.
 * Keep all anti-virus software up-to-date. Consider frequent manual updates.
 * Block all WMF files on the network perimeter by file-header filtering.
 * Making use of users accounts that are configured with only the user rights that are required.
 * Disable image loading in Internet Explorer and all other browsers.
 * Disable image loading in Outlook Express.
 * Disable hyperlinks in MSN Messenger.
 * Disable the Indexing Service on Windows 2000, Windows XP and Windows Server 2003.
 * Disable Desktop Search applications such as Google Desktop or Windows Desktop Search until the problem is corrected.

Accusations
In 2006 Steve Gibson suggested that the peculiar nature of the 'bug' was an indication that the vulnerability was actually a backdoor intentionally engineered into the system. The accusation became an assertion and spread through the internet as a rumor after the technology news website Slashdot picked up Gibson's speculation. The rumor was widely debunked and Thomas Greene, writing in The Register, attributed Gibson's mistake to "his lack of security experience" and called him a "popinjay expert".