Разбор уязвимости CVE-2012-0175

в 8:11, , рубрики: CVE, windows, информационная безопасность, уязвимость

Вернулся тут недавно из отпуска, сел за компьютер и как раз подоспел на очередные крупномасштабные обновления безопасности Windows. Пошарил я на эту тему по интернету, и через некоторое время наткнулся на такую вот интересную сводную таблицу. Опять, что ли свежие эксплойты обходят нас стороной? Ну уж нет, кто ищет – тот всегда найдёт. Выбрал я первый, попавшийся под руку remote code execution exploit — CVE-2012-0175 (он же MS12-048) и решил докопаться до истины.

Собственно, после недолгого поиска нашёл в интернете статью и решил сделать её небольшой авторский перевод. Дело тут оказалось даже не в переполнении буфера, а просто в концептуальной недоработке, тобишь уязвимости в логике работы программы. Кстати, как оказалось, эта бага была известна ещё во времена Windows Vista.

Итак, оболочка ОС Windows (а конкретнее explorer.exe) позволяет произвольным программам обрабатывать открытие файлов определённого расширения — например, ассоциировать расширение .rar с WinRAR.exe:

image

Тут %1 представляет собой путь к открываемому файлу, который передаётся программе-обработчику через параметр командной строки. Как оказалось, этот параметр не фильтруется должным образом. А конкретнее никак не обрабатывается символ двойной кавычки да и другие спец символы. Здесь и кроется уязвимость – мы можем нарушить корректное открытие файла вставив в имя файла запрещённый символ. Постойте, но ведь стандартными средствами Windows запрещено создавать такие файлы? Что делать? Использовать Linux + Samba )))

Ставим на любой дистрибутив Linux сервер общих папок и начинаем экспериментировать. Пробуем создать и открыть файл с именем, например, test”.rar:

image

Не получилось… Пробуем вставить кавычку в имя общего ресурса:

image

Отлично, теперь смотрим результат открытия архива:

image

Бинго, программа не отработала должным образом. Давайте подумаем, что можно с этим сделать.

Единственное, что в наших силах – передать произвольный параметр программе обработчику. Не так уж и много. Как же это можно использовать? Рассмотрим следующий сценарий атаки.

Например, посмотрим, что можно сделать при выполнении такого действия:

image

Здесь выполняется следующая команда:


"cmd.exe" /k cd %1

А что если попробовать передать через параметр %1 ещё одну коменду? Попробуем создать папку с именем что-то вроде этого – x & start calc.exe &. В результате должна получиться такая сточка:


cmd.exe" /k cd \IPx & start calc.exe &AnyOtherFolder

Попробуем открыть командную строку и…

image

… и успешно эксплуатируем уязвимость.

Таким образом мы можем передавать произвольные параметры любой программе обработчику, но, хоть этого и кажется слишком мало, всё равно можно достичь впечатляющих результатов – man или help популярных программ вам в помощь. Вот, в принципе, и всё что можно рассказать об этой уязвимости.

Автор: Promix17

* - обязательные к заполнению поля