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 до версии, в которой уязвимость устранена.
-
Определите текущую версию:
bash curl -XGET 'http://localhost:9200'Ищите строку"number" : "x.x.x". -
Обновите 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) и данные, перезапустите.
- Для систем на базе Debian/Ubuntu (APT):
-
Перезапустите службу после обновления:
bash systemctl restart elasticsearch # ИЛИ, если используется init.d service elasticsearch restart
Временное решение
Если немедленное обновление невозможно, примените следующие меры:
-
Отключите динамические скрипты (самое эффективное). В конфигурационном файле
elasticsearch.ymlдобавьте или измените строки:yaml script.disable_dynamic: true script.groovy.sandbox.enabled: falseВажно: Это сломает функциональность, зависящую от выполнения скриптов. -
Ограничьте сетевой доступ. Настройте межсетевой экран (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
- Пример для
-
Используйте WAF (Web Application Firewall). Настройте правила для блокировки запросов, содержащих подозрительные конструкции Groovy (например,
java.lang.ProcessBuilder,execute,getRuntime()). Это требует тонкой настройки и может быть обойдено.
Примечание: Временные решения являются паллиативными. Планируйте установку патча как можно скорее.