Вернулся тут недавно из отпуска, сел за компьютер и как раз подоспел на очередные крупномасштабные обновления безопасности Windows. Пошарил я на эту тему по интернету, и через некоторое время наткнулся на такую вот интересную сводную таблицу. Опять, что ли свежие эксплойты обходят нас стороной? Ну уж нет, кто ищет – тот всегда найдёт. Выбрал я первый, попавшийся под руку remote code execution exploit — CVE-2012-0175 (он же MS12-048) и решил докопаться до истины.
Собственно, после недолгого поиска нашёл в интернете статью и решил сделать её небольшой авторский перевод. Дело тут оказалось даже не в переполнении буфера, а просто в концептуальной недоработке, тобишь уязвимости в логике работы программы. Кстати, как оказалось, эта бага была известна ещё во времена Windows Vista.
Итак, оболочка ОС Windows (а конкретнее explorer.exe) позволяет произвольным программам обрабатывать открытие файлов определённого расширения — например, ассоциировать расширение .rar с WinRAR.exe:
Тут %1 представляет собой путь к открываемому файлу, который передаётся программе-обработчику через параметр командной строки. Как оказалось, этот параметр не фильтруется должным образом. А конкретнее никак не обрабатывается символ двойной кавычки да и другие спец символы. Здесь и кроется уязвимость – мы можем нарушить корректное открытие файла вставив в имя файла запрещённый символ. Постойте, но ведь стандартными средствами Windows запрещено создавать такие файлы? Что делать? Использовать Linux + Samba )))
Ставим на любой дистрибутив Linux сервер общих папок и начинаем экспериментировать. Пробуем создать и открыть файл с именем, например, test”.rar:
Не получилось… Пробуем вставить кавычку в имя общего ресурса:
Отлично, теперь смотрим результат открытия архива:
Бинго, программа не отработала должным образом. Давайте подумаем, что можно с этим сделать.
Единственное, что в наших силах – передать произвольный параметр программе обработчику. Не так уж и много. Как же это можно использовать? Рассмотрим следующий сценарий атаки.
Например, посмотрим, что можно сделать при выполнении такого действия:
Здесь выполняется следующая команда:
"cmd.exe" /k cd %1
А что если попробовать передать через параметр %1 ещё одну коменду? Попробуем создать папку с именем что-то вроде этого – x & start calc.exe &. В результате должна получиться такая сточка:
cmd.exe" /k cd \IPx & start calc.exe &AnyOtherFolder
Попробуем открыть командную строку и…
… и успешно эксплуатируем уязвимость.
Таким образом мы можем передавать произвольные параметры любой программе обработчику, но, хоть этого и кажется слишком мало, всё равно можно достичь впечатляющих результатов – man или help популярных программ вам в помощь. Вот, в принципе, и всё что можно рассказать об этой уязвимости.
Автор: Promix17