В этой статье мы поговорим сразу о нескольких уязвимостях в сервере приложений 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 12.2.1.3.0 в Windows

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

oracle_common\common\bin\config.cmd
Создание домена в WebLogic
Создание домена в WebLogic

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

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

Выбор шаблонов при создании домена
Выбор шаблонов при создании домена

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

Дополнительные настройки при создании домена WebLogic
Дополнительные настройки при создании домена WebLogic

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

Прогресс создания нового домена в WebLogic
Прогресс создания нового домена в WebLogic

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

user_projects\domains\base_domain\startWebLogic.cmd

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

Готовый стенд 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/. Перейдя на него, ты увидишь окно авторизации.

Форма входа в Web Services Test Client
Форма входа в 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:   }
Страница конфигурации Web Services Test Client доступна без авторизации
Страница конфигурации 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. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии