Уязвимость в SAP NetWeaver
Уязвимость в SAP NetWeaver
Категория: Программы Теги: Уязвимости Опубликовано: 16 сентября 2025

Уязвимость BDU:2025-10908 (CVE-2025-42944) SAP NetWeaver

Уязвимость BDU:2025-10908 (CVE-2025-42944) представляет собой критическую уязвимость десериализации в модуле RMI-P4 платформы SAP NetWeaver 7.50 и ниже. Эксплуатация позволяет злоумышленнику, не прошедшему аутентификацию, выполнить произвольные команды операционной системы через отправку специально сформированного сериализованного Java-объекта на открытый порт RMI-P4 (обычно 50004 или 50000). Это приводит к полной компрометации сервера приложения, включая возможность чтения, изменения и удаления любых данных, а также остановки или перезапуска сервисов SAP. Уязвимость особенно опасна в корпоративных средах, где SAP NetWeaver является ядром ERP-систем, содержащих финансовые, производственные и персональные данные.

Анализ уязвимости

Уровень опасности: 10.0 КРИТИЧЕСКИЙ

Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Вектор атаки (Attack Vector) — Сетевой: уязвимость эксплуатируется удаленно через сеть, без физического доступа.
Условия эксплуатации (Attack Complexity) — Низкие: для успешной атаки не требуется сложных условий.
Привилегии (Privileges Required) — Не требуются: атакующему не требуется иметь учетную запись в системе.
Взаимодействие с пользователем (User Interaction) — Не требуется: атака осуществляется без какого-либо участия пользователя-жертвы.
Область воздействия (Scope) — Оказывает: уязвимость позволяет выйти за пределы компонента, в котором она существует, и повлиять на другие компоненты системы.
Воздействие на конфиденциальность (Confidentiality) — Высокое: возможна полная утечка конфиденциальных данных.
Воздействие на целостность (Integrity) — Высокое: возможна полная модификация или уничтожение данных.
Воздействие на доступность (Availability) — Высокое: возможна полная потеря доступности системы или сервиса.

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

Для успешной эксплуатации злоумышленнику необходимо:

  1. Сетевой доступ к порту RMI-P4 — Обычно это TCP-порт 50004 или 50000. Порт должен быть доступен из сети, где находится атакующий. В типичной архитектуре SAP этот порт не должен быть открыт в интернете, но чаще всего оказывается доступен во внутренней корпоративной сети.

  2. Целевая система должна работать на SAP NetWeaver до 7.50 — Версии до 7.50 без патча (Security Note #3634501), предотвращающего десериализацию непроверенных объектов.

  3. Отсутствие дополнительных средств защиты — Таких как WAF, IPS, или механизмов валидации входящих RMI-запросов на уровне приложения или сети.

Не требуется: аутентификация, взаимодействие с пользователем, физический доступ или привилегии в системе.


Технический анализ вектора атаки

Рассмотрим код эксплоита для понимания работы вектора атаки с использованием этой уязвимости. YAML-шаблон для Nuclei не является эксплоитом в классическом смысле — это детектор уязвимости, который определяет наличие потенциально уязвимой версии SAP NetWeaver. Однако его анализ важен для понимания начального этапа атаки — разведки.

Анализ шаблона Nuclei

1. Метаданные и описание:

info:
  name: Detection for CVE-2025-42944
  author: rxerium
  severity: critical
  description: |
    Due to a deserialization vulnerability in SAP NetWeaver...
  metadata:
    verified: true
    max-request: 1
    shodan-query: http.favicon.hash:-266008933
    product: content_server
    vendor: sap
  tags: sap,webserver

Здесь задаются базовые параметры: название, автор, критичность. Ключевой элемент — shodan-query, который использует хеш favicon для поиска SAP-серверов в Shodan. Это позволяет злоумышленнику массово идентифицировать потенциальные цели в интернете. Теги sap,webserver помогают классифицировать цель.

2. HTTP-запрос для определения версии:

http:
  - method: GET
    path:
      - "{{BaseURL}}"
    redirects: true
    max-redirects: 2

Скрипт отправляет GET-запрос на корневой URL цели. Это стандартный HTTP-запрос, который не вызывает подозрений, но позволяет получить заголовки сервера.

3. Извлечение версии через регулярное выражение:

extractors:
  - type: regex
    part: header
    name: version
    regex:
      - "SAP NetWeaver Application Server ([0-9]+\\.[0-9]+)"
    group: 1

Скрипт анализирует HTTP-заголовки ответа, извлекая строку вида "SAP NetWeaver Application Server 7.50". Регулярное выражение ([0-9]+\\.[0-9]+) захватывает первую группу — версию (например, "7.50"). Это критически важно, так как только версии до 7.50 уязвимы.

4. Условия совпадения (matchers):

matchers-condition: and
matchers:
  - type: word
    part: header
    words:
      - "SAP NetWeaver Application Server"
    condition: or
    case-insensitive: true

  - type: dsl
    dsl:
      - compare_versions(version, '<= 7.50')

Первый матчер проверяет наличие ключевой фразы в заголовке — подтверждает, что это SAP NetWeaver. Второй матчер использует DSL (Domain Specific Language) Nuclei для сравнения извлеченной версии с условием <= 7.50. Если оба условия выполняются — цель помечается как уязвимая.

Этот скрипт не эксплуатирует уязвимость, а лишь идентифицирует потенциальные цели.


Десериализация через RMI-P4

RMI (Remote Method Invocation) — это механизм Java для вызова методов на удаленных объектах. P4 — это собственный протокол SAP, используемый для связи между компонентами NetWeaver. Протокол P4 работает поверх TCP и использует сериализацию Java для передачи объектов.

Уязвимость возникает, когда сервер P4 принимает и десериализует объект, не проверяя его тип или источник. Злоумышленник может создать сериализованный Java-объект, который при десериализации выполнит произвольный код — например, через цепочку гаджетов из библиотек, доступных в classpath сервера (например, CommonsCollections, Groovy, или даже стандартных JDK-классов).


Способы защиты

1. Немедленное применение патчей SAP

SAP выпустил исправления в рамках Security Notes. Необходимо установить последний патч для SAP NetWeaver.

Это единственный надежный способ устранения уязвимости на уровне приложения.

2. Сетевая изоляция порта RMI-P4

  • Закрыть порты 50004/50000 на периметровом фаерволе. Они не должны быть доступны из интернета.
  • Ограничить доступ во внутренней сети — разрешить подключения к порту P4 только с доверенных IP-адресов (например, с серверов очередей, других SAP-компонентов).

3. Развертывание IPS для детектирования и блокировки атак

Хотя RMI-P4 — это бинарный TCP-протокол, современные IPS (Intrusion Prevention System) способны анализировать содержимое таких потоков.

Расположение IPS:
IPS должен быть установлен на границе сегмента, где находятся SAP-серверы — например, на межсетевом экране, разделяющем DMZ и внутреннюю сеть, или на хостовом фаерволе самого SAP-сервера.

Пример правила для Suricata (IPS)

Suricata может анализировать TCP-потоки и искать сигнатуры сериализованных Java-объектов, которые часто начинаются с магических байтов 0xAC ED 00 05.

Правило 1: Обнаружение вызова Runtime.exec в сериализованном потоке

alert tcp any any -> $HOME_NET 50004 (msg:"[CVE-2025-42944] Suspicious Java Deserialization: Runtime.exec() in RMI-P4 Stream"; flow:established,to_server; content:"|AC ED 00 05|"; depth:4; content:"java/lang/Runtime"; distance:0; nocase; content:"exec"; distance:0; within:20; nocase; classtype:attempted-admin; sid:2025429441; rev:2; metadata:affected_product SAP_NetWeaver, attack_target server, deployment internal, tag deserialization; )

Разбор правила:

  • content:"|AC ED 00 05|"; depth:4; — проверяет сигнатуру сериализованного Java-объекта в первых 4 байтах.
  • content:"java/lang/Runtime"; distance:0; nocase; — ищет строку, соответствующую внутреннему представлению класса java.lang.Runtime в сериализованном потоке (в JVM используется формат с / вместо .).
  • content:"exec"; distance:0; within:20; nocase; — ищет слово "exec" в пределах 20 байт после предыдущего совпадения. Это повышает вероятность, что найден именно вызов метода exec(), а не случайное вхождение.
  • nocase — игнорирует регистр (на всякий случай, хотя в сериализованном потоке обычно точный регистр).
  • metadata — добавляет контекст для SIEM и аналитиков.

Правило 2: Обнаружение использования ProcessBuilder

alert tcp any any -> $HOME_NET 50004 (msg:"[CVE-2025-42944] Suspicious Java Deserialization: ProcessBuilder in RMI-P4 Stream"; flow:established,to_server; content:"|AC ED 00 05|"; depth:4; content:"java/lang/ProcessBuilder"; distance:0; nocase; content:"start"; distance:0; within:30; nocase; classtype:attempted-admin; sid:2025429442; rev:1; metadata:affected_product SAP_NetWeaver, attack_target server, deployment internal, tag deserialization; )

Разбор правила:

  • content:"java/lang/ProcessBuilder"; — ищет полное имя класса, который часто используется в современных гаджет-чейнах для выполнения команд.
  • content:"start"; within:30; — метод start() вызывается для запуска процесса. Его наличие рядом с ProcessBuilder — сильный индикатор вредоносного payload.
  • within:30 — допускает небольшое расстояние между именем класса и методом, так как между ними могут быть другие сериализованные поля (например, массив аргументов командной строки).
Алексей Черемных Алексей Черемных
401