понедельник, 30 января 2012 г.

MS12-004 в дикой природе

В последней порции патчей от MS вышло достаточно интересное исправление MS12-004 (MIDI File Parsing Remote Buffer Overflow) для MS Media Player, которое закрывает уязвимость с возможностью удаленного исполнения кода. После прочтения бюллетеня сразу стало понятно, что это довольно действенный способ установки вредоносных программ и в ближайшем будущем этот вектор распространения может быть активно задействован. Но давайте вначале поговорим о самой уязвимости, а она, на мой взгляд, довольно интересна. Этой уязвимости подвержены все существующие ОС от MS.


Уязвимость содержится в библиотеке winmm.dll, которая реализует все необходимое для обработки MIDI файлов. Кстати сам MIDI (Musical Instrument Digital Interface) формат уходит своими корнями в далекий 1982 год. Неплохое описание самого формата есть здесь. Ключевым моментом в этой уязвимости является сам формат MIDI, а точнее две структуры MThd и MTrk, которые заполняются в памяти.


Offset Length Type Description Value
0x00 4 char[4] chunk ID "MThd" (0x4D546864)
0x04 4 dword chunk size 6 (0x00000006)
0x08 2 word format type 0 - 2
0x10 2 word number of tracks 1 - 65,535
0x12 2 word time division see following text
MIDI Header Chunk Format

Offset Length Type Description Value
0x00 4 char[4] chunk ID "MTrk" (0x4D54726B)
0x04 4 dword chunk size see following text
0x08



track event data (see following text)
MIDI Track Chunk Format



В результате уязвимости и специально созданного MIDI-файла, можно заставить выйти заграницы выделенного буфера (0x400) в куче. Который выделяется функцией WINMM!winmmAlloc() в процедуре WINMM!mseOpen() для обработки переданного MIDI-файла.


В итоге для обработки этого буфера вызывается функция WINMM!midiOutPlayNextPolyEvent() в которой собственно и допущена логическая ошибка приводящая к выполнению произвольного кода. Вероятнее всего уязвимость была найдена при помощи фаззинга соответствующего формата. Кому нужно более подробное и вдумчивое описание уязвимости, советую обратить внимание на этот блогпост от Vupen.

На прошлой неделе мне на глаза попался эксплойт JS/Exploit.CVE-2012-0003.A, использующий эту узявимость (Win32/Exploit.CVE-2012-0003.A) для установки троянца из семейства Win32/CsNowDown.C:


При помощи JavaScript происходит обращение к соответствующему ActiveX интерфейсу id="midi1" classid="clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95" и передачи ему вредоносного MIDI файла.

Способ достаточно действенный для атаки на пользователей IE и я думаю в ближайшем времени BlackHole "порадует" нас своим обновлением. Тем более эксплойт уже был представлен публично в составе Metasploit.

Update:
Еще один экземпляр в дикой природе