Log4Shell - уязвимость CVE-2021-44228, обнаруженная в библиотеке журналирования Log4j, позволяющая выполнить произвольный код в атакуемой системе. Elasticsearch использует модуль Log4j для ведения журналов, но прямой уязвимости выполнения произвольного кода в нем нет.
Обновление Elasticsearch до последней версии
На самом деле это самое правильное решение, помимо закрытия уязвимости, будут исправлены другие ошибки и повышена производительность. Обновление в пределах установленной ветки, не потребует каких либо действий, кроме перезапуска сервиса.
Добавление опции -Dlog4j2.formatMsgNoLookups в Elasticsearch
В настройки Elastciseach возможно добавить опцию запрещающую выполнение внешних запросов. Это не закрывает уязвимость, но предотвратит ее использование.
Для этого в файл /etc/elasticsearch/jvm.options необходимо добавить опцию (лучше всего ее добавить в секцию # log4j, что бы потом не искать):
1 | -Dlog4j2.formatMsgNoLookups=true |
и перезапустить elasticsearch
1 | service elasticsearch restart |
Удаление класса JndiLookup из библиотеки log4j
Довольно рискованный метод, позволяет закрыть уязвимость Log4Shell в Elasticsearch 5.0.0-5.6.10 и 6.0.0-6.3.2
1. Определим имя библиотеки ядра
1 | ls -l /usr/share/elasticsearch/lib/log4j-core-*.jar |
1 2 | ls -l /usr/share/elasticsearch/lib/log4j-core-*.jar ... /usr/share/elasticsearch/lib/log4j-core-2.11.1.jar |
2. Делаем резервуарную копию, на случай если Elasticsearch не запустится или возникнут ошибки в работе
1 | zip ./backup-log4j.zip /usr/share/elasticsearch/lib/log4j-core-2.11.1.jar |
3. Удаляем уязвимый класс из библиотеки
1 2 | cd /usr/share/elasticsearch/lib/ zip -d log4j-core-2.11.1.jar org/apache/logging/log4j/core/lookup/JndiLookup.class |
4. Перезапстить ноду Elasticsearch
1 | service elasticsearch restart |