Скидки до 20% + 2-ая профессия бесплатно и подарки на 50 000₽

Главная | Все статьи | Код

В Java нашли уязвимость, угрожающую сотням тысяч серверов. Разбираемся, в чем суть проблемы и как ее решить

Время чтения статьи ~3 минуты 8
В Java нашли уязвимость, угрожающую сотням тысяч серверов. Разбираемся, в чем... главное изображение

В начале недели эксперт по кибербезопасности Alibaba Чен Жаожун обнаружил критическую уязвимость в Java-библиотеке Log4j, которая используется в сотнях тысяч приложений по всему миру. Уязвимость позволяет получить удаленный доступ к серверу, на котором хранится приложение, и запустить на нем произвольный код. Вместе с экспертами разбираемся, почему библиотека так популярна, в чем суть уязвимости и как ее можно устранить.

Что такое Log4j и почему она так популярна

Log4j — часть проекта Apache Logging Project. Это библиотека для логирования, которая помогает анализировать поток выполняющихся инструкций на продакшене или в тестовом окружении. С ее помощью можно пометить все вызовы текстовыми инструкциями — это сильно упрощает процесс локализации проблем.

Библиотеку используют сотни тысяч программ, игр, облачных серверов и корпоративных приложений, в том числе от Amazon, Apple iCloud, Cisco, Cloudflare, ElasticSearch, Red Hat, Steam, Tesla и Twitter. В целом пользователей Log4j можно описать как очень крупные компании, которые по тем или иным причинам не используют актуальные версии Java. Чаще всего это энтерпрайз-сегмент, где любое обновление языка, фреймворка или библиотеки — большая проблема.

В энтерпрайз-сегменте наиболее популярны приложения, разработанные на технологии JavaEE/JakartaEE, а также с использованием Spring. В экосистеме Spring особую популярность последнее время получил фреймворк Boot, в котором в качестве дефолтной библиотеки логирования используется LogBack. Для компаний, которые используют Spring Boot (если не брать в расчет кастомное подключение Log4j2), уязвимость не грозит.

В чем опасность

Уязвимость CVE-2021-44228 (или Log4Shell) относится к классу Remote Code Execution и присутствует только в версиях Log4j с 2.0-beta9 до 2.14.1.

Log4Shell для подключения к серверу использует JNDI (Java Naming and Directory Interface). Это API, которое предоставляет единообразный механизм взаимодействия Java-программы с различными службами имен и каталогов. Зная JNDI-имя LDAP-сервера, базы данных или месседж-брокера, можно получить доступ к ним, используя операцию lookup.

Еще одно уязвимое место касается безопасности строк. Часто бывает так, что переменные раскрываются не только в конфигурационном файле, важном звене взаимодействия с библиотекой логирования, но и в строках. В ситуации с небезопасными строками библиотека сканирует сообщения пользователей и если видит в них исходный код, исполняет его. После этого хакер может загрузить вредоносный код на сервер — исследователи из SecurityLab описывают случаи, когда Log4Shell использовали для майнинга криптовалют или для DDoS-атак.

Составьте свое первое резюме: Вы можете бесплатно опубликовать свое резюме в нашем сервисе «Хекслет-CV» и получить советы по его улучшению от разработчиков и HR-менеджеров

Что делать с уязвимостью

Лучший совет, который можно дать в сложившейся ситуации — обновить  Log4j до версии 2.15 или Java до версии 11. Если обновление — это проблема, есть несколько альтернативных решений:

  • Если приложение использует Log4j и запускается через команду java -d, можно выставить параметру system property значение true: java -Dlog4j2.formatMsgNoLookups=true.
  • Еще один вариант — подтянуть текущую настройку из переменных окружения (LOG4J_FORMAT_MSG_NO_LOOKUPS=true). Во втором случае никакие дополнительные параметры выставлять не нужно, они автоматически подтянутся из окружения.

Несколько более сложных решений описаны здесь.

Выводы

Большинство уязвимостей возникают в старых версиях языков, библиотек и фреймворков, поэтому нужно стараться регулярно обновлять их. Для больших компаний это непозволительная роскошь, но безопасные и не подверженые уязвимостям приложения требуют регулярного повышения версий.

Кроме того, полезно периодически (раз в три-шесть месяцев) проводить аудит безопасности систем, которые эксплуатируются в продакшене. Не менее важно следовать рекомендациям, которые содержатся в отчетах службы безопасности. Это помогает выявлять общие проблемы и справляться со срочными изменениями (правда, с некоторыми ограничениями).

Никогда не останавливайтесь: В программировании говорят, что нужно постоянно учиться даже для того, чтобы просто находиться на месте. Развивайтесь с нами — на Хекслете есть сотни курсов по разработке на разных языках и технологиях

Аватар пользователя Oleg Sabitov
Oleg Sabitov 17 декабря 2021
8
Похожие статьи
Рекомендуемые программы
профессия
Верстка на HTML5 и CSS3, Программирование на JavaScript в браузере, разработка клиентских приложений используя React
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Python, Разработка веб-приложений и сервисов используя Django, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Тестирование веб-приложений, чек-листы и тест-кейсы, этапы тестирования, DevTools, Postman, SQL, Git, HTTP/HTTPS, API
4 месяца
с нуля
Старт 26 декабря
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Google таблицы, SQL, Python, Superset, Tableau, Pandas, визуализация данных, Anaconda, Jupyter Notebook, A/B-тесты, ROI
9 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на PHP, Разработка веб-приложений и сервисов используя Laravel, проектирование и реализация REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на Ruby, Разработка веб-приложений и сервисов используя Rails, проектирование и реализация REST API
5 месяцев
c опытом
Старт 26 декабря
профессия
Программирование на JavaScript в браузере и на сервере (Node.js), разработка бекендов на Fastify и фронтенда на React
16 месяцев
с нуля
Старт 26 декабря
профессия
Программирование на JavaScript, разработка веб-приложений, bff и сервисов используя Fastify, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря
профессия
новый
Git, JavaScript, Playwright, бэкенд-тесты, юнит-тесты, API-тесты, UI-тесты, Github Actions, HTTP/HTTPS, API, Docker, SQL
8 месяцев
c опытом
Старт 26 декабря