Уязвимость 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) — Высокое: возможна полная потеря доступности системы или сервиса.
Условия эксплуатации
Для успешной эксплуатации злоумышленнику необходимо:
-
Сетевой доступ к порту RMI-P4 — Обычно это TCP-порт 50004 или 50000. Порт должен быть доступен из сети, где находится атакующий. В типичной архитектуре SAP этот порт не должен быть открыт в интернете, но чаще всего оказывается доступен во внутренней корпоративной сети.
-
Целевая система должна работать на SAP NetWeaver до 7.50 — Версии до 7.50 без патча (Security Note #3634501), предотвращающего десериализацию непроверенных объектов.
-
Отсутствие дополнительных средств защиты — Таких как 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— допускает небольшое расстояние между именем класса и методом, так как между ними могут быть другие сериализованные поля (например, массив аргументов командной строки).