Во вторник Microsoft выпустила очередную порцию патчей, и среди них наше внимание особенно привлек MS12-020, который имеет критический статус. Уязвимость позволяет выполнить произвольный код на удаленной системе при мощи специально сформированного RDP-пакета. Данной уязвимости подвержены все версии MS Windows в том числе и 64-битные версии. На самом деле в рамках патча MS12-020 было закрыто две уязвимости CVE-2012-0002 (RCE в RDP) и CVE-2012-0152 (DoS в Terminal Server). Нас больше интересует первая уязвимость, так как она гораздо более опасная и может повлечь за собой появление сетевых червей, которые будут ее активно эксплуатировать (на данный момент о случаях ее использования во вредоносных программах мне не известно).
Кстати относительно недавно уже закрывалась уязвимость MS11-065 (август 2011), которая позволяла осуществлять DoS (WinXP/2003) и была замечена в том же драйвере rdpwd.sys, в котором была найдена CVE-2012-0002. Эти изменения можно отследить по временным меткам в rdpwd.sys до и после патча. А также в официальных списках изменений для MS11-065 и для MS12-020.
Собственно, основные изменения были замечены в функции HandleAttachUserReq(), декомпилированный вариант которой выглядит следующим образом:
При сравнение исправленного драйвера и драйвера до патча, видно, что изменений было произведено не так уж и много.
Видно, что добавлена дополнительная проверка и освобождение памяти при помощи ExFreePoolWithTag():
Теперь посмотрим на декомпилированный вариант этих изменений:
Именно отсутствие этой проверки может за собой повлечь возможность удаленного захвата памяти и возможность несанкционированного выполнения кода. Причем выполнения кода происходит в ядре.
Неплохой анализ CVE-2012-0152 (DoS в Terminal Server) можно найти здесь.
Бытует мнение, что уже существует рабочий эксплойт:
Возможно, это просто фейк, но, по нашим прогнозам, публичный эксплойт, вероятнее всего, появится на следующей неделе в составе Metasploit, что вызовет цепную реакцию появления его во вредоносных программах.
Автор: SVH