CVE-2015-1427

Elastic Elasticsearch

ВЫСОКАЯ ВЕРОЯТНОСТЬ

Дата обнаружения

2022-03-25

Официальное описание

The Groovy scripting engine in Elasticsearch allows remote attackers to bypass the sandbox protection mechanism and execute arbitrary shell commands.

🛡️
Технический анализ и план устранения

Суть уязвимости

Злоумышленник может отправить специально сформированный запрос к движку скриптов Groovy в Elasticsearch. Это позволяет обойти песочницу (sandbox) и выполнить произвольные команды на операционной системе с правами пользователя, под которым работает процесс Elasticsearch. Уязвимость критична, так как ведет к полному компрометированию сервера.

Как исправить

Основное решение — обновление Elasticsearch до версии, в которой уязвимость устранена.

  1. Определите текущую версию: bash curl -XGET 'http://localhost:9200' Ищите строку "number" : "x.x.x".

  2. Обновите Elasticsearch до версии 1.4.3 или 1.3.8.

    • Для систем на базе Debian/Ubuntu (APT): bash # Для версий 1.4.x apt-get update && apt-get install --only-upgrade elasticsearch=1.4.3 # Для версий 1.3.x apt-get update && apt-get install --only-upgrade elasticsearch=1.3.8
    • Для систем на базе RHEL/CentOS (YUM): bash # Для версий 1.4.x yum update elasticsearch-1.4.3 # Для версий 1.3.x yum update elasticsearch-1.3.8
    • При установке из архива (.tar.gz / .zip): Остановите сервис, замените директорию на новую из скачанного архива, перенесите конфигурацию (elasticsearch.yml) и данные, перезапустите.
  3. Перезапустите службу после обновления: bash systemctl restart elasticsearch # ИЛИ, если используется init.d service elasticsearch restart

Временное решение

Если немедленное обновление невозможно, примените следующие меры:

  1. Отключите динамические скрипты (самое эффективное). В конфигурационном файле elasticsearch.yml добавьте или измените строки: yaml script.disable_dynamic: true script.groovy.sandbox.enabled: false Важно: Это сломает функциональность, зависящую от выполнения скриптов.

  2. Ограничьте сетевой доступ. Настройте межсетевой экран (firewall), чтобы разрешить подключение к портам Elasticsearch (по умолчанию 9200/TCP, 9300/TCP) только с доверенных IP-адресов (например, IP-адресов вашего приложения или административных хостов).

    • Пример для iptables: bash iptables -A INPUT -p tcp --dport 9200 -s <TRUSTED_IP> -j ACCEPT iptables -A INPUT -p tcp --dport 9200 -j DROP
  3. Используйте WAF (Web Application Firewall). Настройте правила для блокировки запросов, содержащих подозрительные конструкции Groovy (например, java.lang.ProcessBuilder, execute, getRuntime()). Это требует тонкой настройки и может быть обойдено.

Примечание: Временные решения являются паллиативными. Планируйте установку патча как можно скорее.