Обзор эксплоитовАндрей Комаров (komarov@itdefence.ru) Летняя пора - время отдыха. Как бы ни так, когда речь идет об уязвимостях! Соревнования между «злоумышленником» и «защитником» (применительно к нашему времени – между хакером и вендором) продолжаются. Число брешей неизмеримо растет. К сожалению, все осветить никак не получается, поэтому в этот раз я подготовил на обозрение наиболее важные. Обход ограничений в Microsoft IIS 6.0 WebDAVBRIEFИзюминка этого класса атак в том, что возможность «забрать» искомое с сервера существует абсолютно безразлично по отношению к защищенности ресурса. WebDAV (Web-based Distributed Authoring and Versioning) устанавливается в связке с IIS, традиционным WEB-сервером для платформ линейки «Windows Server». WebDAV расширяет HTTP следующими командами:
Все эти команды являются дополнительными методами взаимодействия с WEB-сервером. Узнать более подробно об этих и основных запросах HTTP-протокола ты можешь из моей давней статьи («Отпечатки пальцев http» - xakep.ru/magazine/xa/117/038/1.asp). Уязвимость состоит в том, что WEB-сервер некорректно обрабатывает URI с Unicode-содержанием. EXPLOITПредположим, у нас есть директория относительно корня «c:\inetpub\wwwroot\secret\». Соответственно, «inetpub\wwwroot\» - то, что создает IIS по дефолту. В ней лежит файл secret.zip, при этом директория недоступна на чтение «извне» или же защищена паролем. Обращение к файлу относительно самого хоста: secrethost.ru/secret/secret.zip. Для обхода ограничений посылаем GET-запрос вида:
Видно, что в URI мы вставили символ "/" (%c0%af), который будет удален из WebDav-запроса. Вторая строка указывает WEB-серверу на то, что запрос следует обрабатывать с помощью средств WebDav. Мы можем комбинировать и послать нечто вроде: В отчет придет содержимое защищенного объекта, даже если директория, в которой он располагался, была защищена паролем. Можно ли сделать что-либо еще? Смотри описание запроса PROPFIND - с ним можно получить структуру какой-либо папки. Если учесть, что, используя UNICODE, мы можем обходить весомые ограничения безопасности, – почему бы не применить это для листинга каталогов на сервере? PROPFIND (msdn.microsoft.com/en-us/library/aa142960(EXCHG.65).aspx) или BPROPFIND (msdn.microsoft.com/en-us/library/aa142725(EXCHG.65).aspx) достаточно подробно описаны, поэтому обо всех дополнительных включениях ты без труда сможешь узнать. Пример получения списка файлов внутри директории secret:
TARGETS
SOLUTIONНа данный момент не было выпущено официального исправления уязвимости, поэтому одним из решений может являться отключение WebDav. Для этого добавь следующее значение (Add value) по ключу «HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters»:
Перезагрузи IIS и отключение вступит в силу. Для отключения протокола WebDAV можно также воспользоваться средством IIS Lockdown. За дополнительной информацией об этом средстве обратись к веб-узлу корпорации Microsoft (microsoft.com/technet/security/tools/locktool.mspx). Локальное повышение привилегий в GNU/Linux kernel 2.6.29BRIEFПроблема вызвана функцией «ptrace_attach ()» [kernel/ptrace.c] и использованием «current->cred_exec_mutex» вместо «task->cred_exec_mutex», – все это может позволить злонамеренным пользователям получать привилегии рута с помощью совместных «ptrace ()» и «exec ()» вызовов. Код уязвимой функции представлен ниже:
На 189 и 233 строках ptrace_attach использует мьютекс текущего процесса для работы с «замком» и двумя процессами (текущим и тем, который передается в функцию в качестве аргумента). Из-за некорректного использования cred_exec_mutex текущего процесса вместо процесса, который должен быть отслежен, возникает ситуация «гонки» вовремя исполнения какого-либо процесса и неконтролируемого обращения к SUID. EXPLOITПрактика использования:
Итак, привилегии были успешно захвачены. TARGETS
SOLUTIONЧтобы победить уязвимость воспользуйся патчем из GIT. Mozilla Firefox Memory CorruptionBRIEFБрешь обнаружили Marc Gueury и Daniel Veditz, после чего та стала официально опубликованной в базе CVE (CVE-2009-1313). Касается она крэша браузера путем эксплуатации @nsTextFrame::ClearTextRun().
Приведенная выше функция взята из файла layout/generic/nsTextFrameThebes.cpp. Рассмотрим подробнее, что же она делает. Сначала устанавливает указатель textRun на mTextRun (3498). Далее проверяет, не равен ли textrun NULL (3500). Снимает хук с фрейма и проверяет, присутствует ли textrun в кэше. Если да, то удаляет его из кеша, а затем удаляет и сам объект. Закомментированный участок кода также содержит ошибки. Ошибка в том, что mTextRun может содержать некорректные флаги от предыдущих операций, – это приведет к некорректному удалению (3519). Из-за подобных соображений разработчики Mozilla позднее ввели новую дополнительную константу:
EXPLOITКод эксплойта приведен ниже.
После исполнения указанного кода происходит аварийное завершение работы браузера. TARGETSMozilla Firefox до версии 3.0.10 SOLUTIONВ новых версиях Firefox уязвимость своевременно устранена. Внедрение кода в PhpmyadminBRIEFКто бы мог подумать, что во время установки Phpmyadmin мы можем произвести эксплуатацию кода! Рассмотрим внимательно сорец, использующийся установочным файлом для формирования конфига:
Итак, функция getConfigFile() возвращает всякого рода информацию. Здесь составляется конфигурационный файл, и $ret инклудит PHP-код. На 281 строке мы видим комментарий, а затем еще один (/* Server: <getServerName()> "id" */). Обрати внимание: выходит так, что $id полностью контролируется пользователем сразу, как только переменная была получена из сессии (267). Скажем, если пользователь передаст ее установленной в виде "bleh */ <?php echo date(); ?> /*", то тем самым он завершит конфигурационный файл строкой «/* Server: <getServerName()> bleh */ <?php echo date(); ?> /* */». TARGETSphpMyAdmin 3.x (до 3.1.3.2.) SOLUTIONТребуется ограничить передаваемые данные с помощью preg_replace():
И применить официально вышедшие обновления:
Раскрытие путей в Zervit Webserver 4.0BRIEFКлассификация подобной атаки - Directory Traversal. В литературе и современных системах классификации вектор атаки называют Path Traversal. Самый большой риск, который она влечет за собой, скрывается не только в листинге директорий, но и в обходе ACL-листов. Эта техника атак направлена на получение доступа к файлам, директориям и командам, находящимся вне основной директории Web-сервера. Злоумышленник может манипулировать параметрами URL с целью получения доступа к файлам или выполнить команды, располагаемые в файловой системе Web-сервера. Для подобных атак потенциально уязвимо любое устройство, имеющее Web-интерфейс. Многие Web-серверы ограничивают доступ пользователя определенной частью файловой системы, обычно называемой «web document root» или «CGI root». Эти директории содержат файлы, предназначенные для пользователя, и программы, необходимые для получения доступа к функциям Web-приложения. Большинство базовых атак, эксплуатирующих обратный путь, основаны на внедрении в URL символов «../» – для того, чтобы изменить расположение ресурса, который будет обрабатываться сервером. Поскольку большинство Web-серверов фильтруют эту последовательность, злоумышленник может воспользоваться альтернативными кодировками, например, Unicode («..%u2216» или «..%c0%af»). Другие популярные приемы – использование обратного слеша («..\») в Windows-серверах, символов URLEncode («%2e%2e%2f») или двойная кодировка URLEncode («..%255c»). Даже если Web-сервер ограничивает доступ к файлам определенным каталогом, эта уязвимость может возникать в сценариях или CGI-программах. Возможность использования обратного пути в каталогах довольно часто возникает в приложениях, использующих механизмы шаблонов или загружающих текст страниц из файлов на сервере. В этом варианте атаки злоумышленник модифицирует имя файла, передаваемое в качестве параметра CGI-программы или серверного сценария. В результате он может получить исходный код сценариев. Нередко к имени запрашиваемого файла добавляются специальные символы, такие как «%00», с целью обхода фильтров. Бывает, что при эксплуатации такого рода уязвимостей в ответ на их популярность применяются IDS-системы, которые урезают запросы с «хождением» по каталогам («/../../../») вариационной глубины. Требуется помнить, что кроме стандартного символа мы можем использовать, к примеру, «..\..\», «../..\../..\», а также разновидности кодированного содержимого.
Некоторые из представленных вариантов платформозависимы и пригодны далеко не на каждой системе. EXPLOITСама эксплуатация состоит в посылке злонамеренного GET-запроса:
Ответ
Естественно, вместо обращения к boot.ini, могли бы быть: 1. Конфигурационный файл хостинг-панели Cpanel
/var/cpanel/cpanel.config.
3. httpd.conf - файл описания опций WEB-сервера Apache (+ его производных).
4. Логи доступа и ошибок.
Рассматривая проблему ближе, приведу детальный анализ, почему же так получается. Вот исходники:
Типичное использование небезопасной функции strcpy и буфера малого размера! Это все объясняет. |