Отравляем приложения Докучаев Дмитрий 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, читай руководство автора, анализируй структуру рисунка и делай соответствующие выводы :). |