Следующая новость
Предыдущая новость

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic

31.10.2018 12:42
Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic

Содержание статьи

  • Уязвимости
  • Стенд
  • Загрузка произвольных файлов на сервер (CVE-2018-2893, CVE-2018-2894)
  • Баги десериализации (CVE-2018-2628, CVE-2018-3191, CVE-2018-3252)
  • Десериализация через POST (CVE-2018-3252)
  • Демонстрация уязвимости (видео)
  • Выводы

В этой статье мы поговорим сразу о нескольких уязвимостях в сервере приложений Oracle WebLogic, написанном на Java. Этот продукт безумно популярен в энтерпрайз-среде и попадается постоянно на периметрах разных компаний от мала до велика. Уязвимости носят критический характер и позволяют злоумышленнику выполнить произвольный код на целевой системе.

Oracle WebLogic — это решение для построения сервис-ориентированной архитектуры (SOA), создания функциональных пакетов разного уровня связанности и сложности. Под угрозой оказались все актуальные версии приложения — 10.3.6.0, 12.1.3.0, 12.2.1.3 и ниже.

Уязвимости

CVE-2018-2894 позволяет загружать произвольные файлы в систему, в том числе исполняемые (типа JSP), которые затем доступны через веб.

CVE-2018-3246 — XXE при загрузке XML-файла в качестве тестового сценария в компоненте Web Services Test Client.

CVE-2018-2628, CVE-2018-3252 — выполнение произвольного кода при помощи протокола JRMP.

CVE-2018-3191 — выполнение произвольного кода путем десериализации произвольных объектов Java, переданных через POST-запрос.

Стенд

Я буду поднимать сервер WebLogic версии 12.2.1.3.0 на системе Windows. Скачиваем инсталлятор с официального сайта Oracle из раздела Downloads. Для корректной установки и работы WebLogic потребуется JDK выше 1.8.0.130.

java.exe -jar fmw_12.2.1.3.0_wls_quick.jar 

Если хочешь использовать версию ниже, то можешь отключить эту проверку, добавив ключ -ignoreSysPrereqs.

Установка WebLogic 12.2.1.3.0 в Windows

Теперь нужно создать домен WebLogic. Для этого запускаем конфигуратор из домашней директории сервера:

oracle_commoncommonbinconfig.cmd 
Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Создание домена в WebLogic

На первом этапе нужно указать, куда будут сохранены всевозможные конфиги и прочие причиндалы для новоиспеченного домена. Рекомендую оставить по дефолту, для теста это абсолютно неважно.

На втором этапе выбираем все возможные шаблоны.

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Выбор шаблонов при создании домена

Затем указываем связку логин-пароль для админа, режим работы домена — «разработка» или production. А также можно дополнительно настроить порты и сетевые устройства, на которых будет висеть сервер. Для этого отмечай галкой Administration Server в разделе Advanced Configuration.

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Дополнительные настройки при создании домена WebLogic

После этого жмем на кнопку Create, откидываемся на спинку кресла и ждем создания нового домена. Это быстро, так что далеко откинуться не успеешь.

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Прогресс создания нового домена в WebLogic

Теперь жмем на Next и попадаем на последнее окно, где можно отметить галочкой пункт Start Admin Server для немедленного запуска того, что мы наконфигурировали. Жмем на Finish. Если галочкой ты не воспользовался, то запустить сервер можно также через командную строку. Для этого заходим в домашнюю директорию WebLogic и выполняем

user_projectsdomainsbase_domainstartWebLogic.cmd 

Разумеется, путь актуален, если ты не менял дефолтные настройки при создании домена.

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Готовый стенд WebLogic

Те, кто не любит сложности, могут использовать Docker и готовый образ с VulHub. Готовый стенд поднимается одной командой:

docker run -p7001:7001 --name weblogic --rm vulhub/weblogic:12.2.1.3 

Это версия 12.2.1.3, а если нужна 10.3.6.0, то выполняй

docker run -p7001:7001 --name weblogic --rm vulhub/weblogic 

Загрузка произвольных файлов на сервер (CVE-2018-2893, CVE-2018-2894)

Первая уязвимость присутствует в компоненте Web Services Test Client. Он доступен по адресу /ws_utc/. Перейдя на него, ты увидишь окно авторизации.

Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Форма входа в Web Services Test Client

Однако не спеши закрывать окно и расстраиваться, ведь разработчики забыли кое-что важное — добавить проверку на валидную сессию в раздел конфигурации данного раздела. И если сервер работает в режиме development, то получить к нему доступ можно, просто перейдя на /ws_utc/config.do.

ws-testpage-impl.jar.src/com/oracle/webservices/testclient/web/Processor.java
40:   public Forward config() { 41:     if (RequestUtil.isProductionMode()) { 42:       this.response.setStatus(503); 43:       return null; 44:     } 45:     String defaultType = this.request.getParameter("default"); 46:     if (defaultType == null) { 47:       defaultType = ""; 48:     } 49:     this.request.setAttribute("default", defaultType); 50:     return new Forward("setting"); 51:   } 
Дырявая логика. Эксплуатируем новые уязвимости в Oracle WebLogic
Страница конфигурации Web Services Test Client доступна без авторизации

Основные исходники этого компонента ты найдешь в файле

<weblogic_home>/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/WEB-INF/lib/ws-testpage-impl.jar 

Уже можно вооружаться JD-GUI или воспользоваться онлайновым декомпилятором, чтобы посмотреть поближе на логику работы приложения.

Надеюсь, ты помнишь про настройку Work Home Dir на странице конфига? В ней указывается путь, где расположены файлы, нужные для работы тестового клиента, причем есть возможность этот путь менять. После внесения изменений уже существующая структура, включая файлы и папки, переносится из старой директории в новую.

ws-testpage-impl.jar.src/com/oracle/webservices/testclient/setting/TestClientWorkDirManager.java
61:   public void changeWorkDir(String path) { 62:     String[] oldPaths = getRelatedPaths(); 63: 64:     if (this.testPageProvider.getWsImplType() == ImplType.JRF) { 65:       this.isWorkDirChangeable = false; 66:       this.isWorkDirWritable = isDirWritable(path); 67:       this.isWorkDirChangeable = true; 68:       setTestClientWorkDir(path); 69:     } else { 70:       persistWorkDir(path); 71:       init(); 72:     } 73: 74:     if (this.isWorkDirWritable) { 75:       String[] newPaths = getRelatedPaths(); 76:       moveDirs(oldPaths, newPaths); 

Следующий шаг в нашем списке дел — это найти такую директорию, которая будет доступна из веба. Отлично подойдет css, она расположена примерно по тому же пути, где валялся jar: <weblogic_home>/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/com.oracle.webservices.wls.ws-testclient-app-wls/4mcj4y/war/css. В зависимости от имени сервера будет изменяться часть AdminServer, а в зависимости от версии WebLogic — часть 4mcj4y. После того как мы сохраним изменения, вся структура приложения будет доступна из веба. Пока там у нас только один конфиг general, но это ненадолго.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

4990 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости