Я читал про более старый эксплойт против GDI + на Windows XP и Windows Server 2003 назвал JPEG смерти для проекта, над которым я работаю.
Эксплоит хорошо объяснен в следующей ссылке: http://www.infosecwriters.com/text_resources/pdf/JPEG.pdf
В принципе, файл JPEG содержит раздел COM, содержащий поле комментария (возможно, пустое) и два байтовых значения, содержащих размер COM. Если комментариев нет, размер равен 2. Читатель (GDI +) считывает размер, вычитает два и выделяет буфер соответствующего размера для копирования комментариев в кучу.
Атака предполагает размещение в поле значения 0. GDI + вычитает 2, что приводит к значению -2 (0xFFFe), которое преобразуется в целое число без знака 0XFFFFFFFE на memcpy.
Пример кода:
unsigned int size;
size = len - 2;
char *comment = (char *)malloc(size + 1);
memcpy(comment, src, size);
Обратите внимание, что malloc(0) на третьей строке должен возвращать указатель на нераспределенную память в куче. Как написать 0XFFFFFFFE bytes (4GB!!!!), возможно, не сбой программы? Описывает ли это запись за пределами области кучи и в пространство других программ и ОС? Что происходит потом?
Как я понимаю memcpy, он просто копирует символы n из пункта назначения в исходный код. В этом случае источник должен находиться в стеке, место назначения в куче, а n - 4GB.