Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #45, АВГУСТ 2004 г.

Отравляем приложения

Докучаев Дмитрий aka Forb

Спецвыпуск Xakep, номер #045, стр. 045-052-2


Другим багом является обработка bmp-картинок. Сама уязвимость довольно свежая (первое упоминание о ней датировано 11 апреля сего года). Брешь очень тривиальна – типичная халатность программистов при написании IE. При обработке bmp-файла происходит извлечение его размера (из переданного потока данных), а затем выделение памяти под изображение. К счастью для хакера, осел проверяет лишь соответствие с допустимым размером, но никак не реальную длину рисунка. В итоге, злоумышленник может сформировать специальный bmp-файл, в который вшит очень большой размер (на самом деле картинка миниатюрна и занимает всего 58 байт ;)). Максимальный размер, который может получить осел, составляет FFFFFFFF^2 (что примерно равняется 51 гигу памяти). А если написать ряд >img< тегов, содержащих смертельные рисунки? Тогда загнется и IE, и вся Винда. Я не верил в это, но стоило мне зайти на страницу-эксплоит, как в течение нескольких секунд WinXP намертво подвисла. Помог только ребут ;-). Если не боишься повторить мой поступок, топай на ссылку http://www.4rman.com/exploits/tinybmp.htm и не забудь попрощаться со своей Виндой. Естественно, если у тебя два гига памяти и мощный камень, DoS от одного приложения не подвесит твою систему, но эффект все равно впечатлит.

Примерно в то же время мир узнал еще об одной уязвимости Internet Explorer. Не так давно MS лишилась части своих сырцов, которые благополучно утекли в инет. Среди них были исходные коды IE 5.0 от Win2k. Один багоискатель решил посмотреть этот код. Он слил у кого-то сырцы, затем сравнил их с размером исходников Linux и обнаружил, что Винда весит больше ;). Но это к слову, а если говорить по делу, то хакер сумел выдрать из файла ‘win2k/private/inet/mshtml/src/site/download/imgbmp.cxx’ кусочек следующего содержания:

Листинг

Бажный код ослика

while (_bmfh.bfOffBits < (unsigned)cbRead)

{

BYTE abDummy[1024];

int cbSkip;

cbSkip = _bmfh.bfOffBits - cbRead;

if (cbSkip < 1024)

cbSkip = 1024;

if (!Read(abDummy, cbSkip))

goto Cleanup;

cbRead += cbSkip;

}

Злоумышленника насторожило то, что в коде ведется работа с целочисленными типами. Кроме того, хакер знал, что значение переменной bfOffBits образуется путем анализа bmp-файла. Таким образом, взломщик собрал bmp’шник, после чтения которого bfOffBits принимала значение < 2^31. Теперь представь: такая переменная вполне будет удовлетворять условию входа в цикл. После вычитания cbSkip принимает отрицательное значение. В результате, функция Read прочитает неверные данные (а может и не прочитать). Вообще говоря, я не слышал отзывов по этой уязвимости, так как бажен, по сути, лишь IE 5.0, тест же на IE 6.0, как утверждает один багопроходец, закончился провалом. К своему заключению хакер приаттачил фиктивный bmp-файл, который легко переполняет буфер у пятого осла. Хочешь поэкспериментировать? Топай на http://www.securitylab.ru/42844.html, читай руководство автора, анализируй структуру рисунка и делай соответствующие выводы :).

Назад на стр. 045-052-1  Содержание  Вперед на стр. 045-052-3