Анализ свеженьких уязвимостейМаг (icq 884888, http://snipper.ru) Вот и настал очередной раз, когда я могу поприветствовать тебя на страницах рубрики! Сегодняшний обзор эксплойтов будет посвящен весне и неутомимым багокопателям, которые в этот солнечный день не могут не порадовать тебя еще одной порцией различных уязвимостей в популярном софте. Итак, раскрывай окно пошире, запускай в комнату свежий и уже не зимний воздух и наслаждайся материалом! Обход ограничений безопасности в gnome-screensaverBRIEFGnome-screensaver – это популярный хранитель экрана GNOME, который входит, к примеру, в комплект последних версий openSUSE и позволяет заблокировать текущий экран с последующим вводом пароля для разблокировки. Не так давно во всех версиях (до 2.28.2 включительно) данного скринсейвера был обнаружен забавный баг, заключающийся в том, что любой юзер с физическим доступ к системе может получить доступ к заблокированному рабочему столу, не зная нужного для разблокировки пассворда. Для этого трюка необходимо лишь несколько раз в определенной последовательности отключить и подключить монитор и нажать несколько клавиш. Собственно, уязвимость связана с ошибкой в реализации функции dk_window_begin_implicit_paint() (входит в состав GTK+), которая нередко пытается отрисовать что-либо в несуществующем окне и неизбежно рушится :) EXPLOITОдин из способов эксплуатации бага (в случае с системой с двумя экранами) описан секьюрити-командой vigilance.fr:
Другой способ заключается в нажатии и удерживанию в течение нескольких секунд клавиши "Enter", что, опять же, приводит к краху хранителя экрана. TARGETS
SOLUTIONДля решения проблемы разработчики скринсейвера рекомендуют обновиться до его последней версии (на данный момент 2.28.3) с официального сайта live.gnome.org/GnomeScreensaver/. Выполнение произвольных команд в phpThumbBRIEFphpThumb (phpthumb.sourceforge.net/) – это популярнейший класс PHP (используется, например, в Plogger и TinyEditor), который позволяет "на лету" проводить различные манипуляции с картинками в форматах GIF, JPEG, PNG, BMP, ICO. Все эти манипуляции проходят с помощью встроенной в PHP-библиотеки GD, либо с помощью внешней программы ImageMagick, которая в настоящее время установлена по дефолту в большинство *nix систем. Ты, наверное, знаешь, что любые манипуляции со внешними программами в PHP происходят с помощью функций passthru, system, shell_exec, exec (именно они работают с командной строкой) и что во многих случаях в передаваемые этим функциям параметры можно внедрить свои команды. Класс phpThumb в данном случае тоже не является исключением, тем более, что по дефолту он пытается использовать ImageMagick вместо GD. Итак, для начала рассмотрим файл ./phpthumb.functions.php и найдем функцию, отвечающую за выполнение внешних команд:
Данный код в цикле перебирает перечисленные выше системные функции PHP и выполняет заданную команду через любую доступную из них (что, кстати, бывает полезно, если в директиве disable_functions админы отключили все "опасные" функции, кроме, к примеру, passthru). Как видно, никаких проверок на корректность команды при этом не проводится – она просто передается на исполнение. Идем дальше. Теперь нам необходимо найти такое место в phpThumb, куда мы сможем безбоязненно внедрить свои произвольные команды. Такой код легко находится в phpthumb.class.php:
Здесь нам наиболее важны следующие части:
Итак, параметры фильтров для ImageMagick передаются в скрипт с помощью следующего запроса (пример для "blur"): Дебаг-информация выводится на картинке так (различные уровни дебага от 1 до 9, нас интересует последний): Принимая во внимание тот факт, что упомянутые выше параметры никоим образом не фильтруются, мы можем приступить к конструированию запроса на выполнение произвольных команд в phpThumb. EXPLOITДля эксплуатации бага нам нужен полный путь до любой картинки, хранящейся локально на сервере. Картинку, я думаю, ты найдешь и без моей помощи, а полный путь к ней можно узнать из того же дебаг параметра. Итоговый эксплойт для *nix может выглядеть следующим образом: Перейдя по этому адресу, ты увидишь сгенеренную картинку с результатом выполнения твоей команды. Более подробный разбор полетов, а также пример эксплуатации под Windows ищи на http://snipper.ru/view/8/phpthumb-179-arbitrary-command-execution-exploit/. TARGETS
SOLUTIONВ качестве временного решения проблемы ты можешь отключить использование ImageMagick перед GD с помощью директивы в конфиге phpThumb: или просто отключить все опасные функции с помощью директивы PHP disable_functions. Danneo CMS <= 0.5.2 SQL Injection VulnerabilityBRIEFCMS Danneo — это опенсорсная система управления сайтом, созданная русскими разработчиками и дико популярная на территории СНГ. Поддерживает все основные фишки свои старших собратьев: SEO friendly ссылки, управление пользователями, статьями, опросами, комментариями, загрузка медиа-контента и т.д. Не так давно Inj3ct0r (самопровозглашенный продолжатель дела milw0rm.com с Украины) нашел в упомянутой CMS замечательную фрагментированную SQL-инъекцию. Давай проследим вместе с автором причину ее возникновения. Итак, находим следующий код в файле ./mod/poll/comment.php:
Как видно, переменная $comtitle урезается до 255 символов, что делает возможным проведение фрагментированной инъекции (после слеширования кавычек было "\'", стало "\") в следующем за ним параметре $comtext. Этого уязвимого кода было бы достаточно, если бы не фильтр в ./base/danneo.track.php, который, по идее, должен пресекать все подозрительные запросы к движку:
Если ты знаком с подшивкой ][ за последние пару лет, то, наверняка, должен знать о том, что функция ereg[i] неравнодушно относится к нулл-байту, так что дело остается за малым – внедрить его в нужную нам для инъекции переменную $comtext, чтобы обойти данный мерзкий фильтр. В этом нам поможет код из ядра Danneo, спрятанный в ./base/danneo.function.php:
Здесь ты можешь увидеть, что при включенной директиве magic_quotes любые слэши вырезаются функцией stripslashesall() (это происходит уже после глобализации пользовательских переменных, так что $comtitle и $comtext все равно уйдут в SQL-запрос уже со слешами), так что наш нулл-байт безболезненно пройдет встроенный фильтр :) EXPLOITДля эксплуатации бага нам необходимо подготовить три переменные:
Посылаем специальным образом сформированный POST-пакет к сайту-жертве:
Таким образом, итоговый SQL-запрос будет выглядеть следующим образом: В результате ты увидишь хеш пароля админа в своем комментарии. Подробности уязвимости ищи по адресу http://www.inj3ct0r.com/exploits/11004. TARGETS
SOLUTIONДля закрытия уязвимости просто обновись до последней версии движка, скачать который можно на официальном сайте Danneo CMS http://danneo.com/down/view/CMS.html. Обход ограничений безопасности в WordPressBRIEFДумаю, что нет смысла рассказывать тебе о такой популярной системе управления блогами, как WordPress, поэтому сразу перейдем к делу. Итак, в 2.9 ветке движка появилась новая функциональность – корзина (trash) для постов. То есть, если ты написал какое-либо сообщение, а затем тебе захотелось его удалить, оно не удаляется, а попадает в корзину, причем на самом блоге ссылка на такой пост будет видна только его автору. Уязвимость, найденная Томом Маккензи и Райаном Дьюхестом, заключается в том, что удаленный авторизованный пользователь с любыми правами может без проблем просматривать такие сообщения. Теперь давай взглянем на код из ./wp-includes/query.php, который отвечает за просмотр постов, не имеющих статус "publish":
Из этого кода видно, что:
EXPLOITПодробности уязвимости, а также эксплойт, который сам ищет trash-посты на нужном блоге с открытой регистрацией ты сможешь найти в оригинальном advisory по адресу http://tmacuk.co.uk/?p=180. TARGETS
SOLUTIONКак и всегда, не забывай про своевременные обновления своего блога – http://wordpress.org/download/. Раскрытие данных в BugzillaBRIEFBugzilla – это известнейший опенсорсный баг-трекер, который используется множеством популярных проектов (например, Мозиллой – https://bugzilla.mozilla.org). Недавно в данном движке были обнаружены сразу две уязвимости, которые позволяют удаленному пользователю раскрыть чувствительную информацию. Первая уязвимость заключается в том, что по умолчанию в Багзилле нет запрета на просмотр некоторых важных файлов и каталогов с помощью банального .htaccess, а вторая – в том, что движок неправильно организует политику доступа к багам, перемещенным из одного продукта в другой. Смотрим файл process_bug.cgi (в районе 249 линии): Ошибка заключается в том, "$bug->product_obj" обновляется до применения групповых политик безопасности, то есть на данном этапе баг все еще не перемещен в новый продукт, мы только лишь лишь проверяем валидность старых групп этого продукта, но никак не новых. Таким образом, все группы, которые не являются доступными для старого продукта, игнорируются. EXPLOITЭксплуатация уязвимостей выглядит достаточно тривиально:
Подробное advisory для этих уязвимостей ищи на официальном сайте Багзиллы bugzilla.org/security/3.0.10/. TARGETS
SOLUTIONВсе обновления безопасности для Bugzilla качай здесь: http://www.bugzilla.org/download/ (или просто используй .htaccess для ограничения доступа к указанным каталогам и файлу и грамотно применяй групповые политики безопасности для своих приватных багов). |