
Норвежскоязычное руководство по уязвимостям Log4j (CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2019-17571) с скриптами обнаружения, шагами по смягчению последствий и интеллект-картами для выявления и устранения уязвимых систем.
Обновление 19.12.2021: Постоянно обнаруживаются новые уязвимости и новые способы их использования в Log4j. Мы добавили три блок-схемы (mind maps) в репозиторий, которые описывают соответственно уязвимые версии Log4j, как проверить, уязвимы ли вы и смягчение различных уязвимостей.
Определите программное обеспечение, которое использует Log4j версии 2.x
Устраните уязвимости в Log4j
Если вышеуказанное невозможно
Context Lookups в Pattern Layouts в конфигурации Log4j2Определите программное обеспечение, которое использует Log4j версии 1.x.
Если Log4j версии 1.x используется в организации, обратитесь к поставщику и потребуйте, чтобы они
Большой и страшный волк среди уязвимостей Log4j. Уязвимость используется, когда вариант строки ${jndi:ldap://\<код атаки>/a} регистрируется Log4j. CVSS 10.0, RCE.
Не такая большая, как CVE-2021-44228, но столь же неприятная. Требует нестандартной настройки Log4j. CVSS 9.0, RCE и DoS.
Не такая большая, как CVE-2021-44228, также немного менее неприятная. CVSS 7.5, DoS
Относится только к Log4j версии 1.x. Требует, чтобы Log4j использовал JMSAppender. CVSS 6.6, RCE. Для использования требуется, чтобы Log4j использовал JMSAppender. Либо JMSAppender настроен напрямую — что необычно, — либо злоумышленник сам добавляет его в конфигурацию Log4j. Кроме того, злоумышленник должен иметь доступ к изменению конфигурации JMSAppender. Если это так, то злоумышленник обычно уже имеет доступ к системе. Поэтому уязвимость считается малозначимой.
Относится только к Log4j версии 1.x. Требует, чтобы Log4j использовал SocketServer. CVSS 9.8, RCE Предоставляет злоумышленнику с сетевым доступом к соответствующему сокету возможность выполнения кода. Код для использования общедоступен.
Для Java 8 последняя версия Log4j — 2.17.0. Она устраняет все вышеперечисленные уязвимости.
Версия 2.16.0 устраняет самые серьезные уязвимости.
Для Java 7 Log4j выпущен в версии 2.12.2. Она не устраняет CVE-2021-45105. Команда Log4j также заявляет, что ни Java 6, ни Java 7 больше не поддерживаются. Неизвестно, выпустят ли они еще одно обновление безопасности для Log4j на Java 7.
Блок-схема "Mind map #1" дает хороший обзор предпосылок для наличия различных уязвимостей.

Создано Loïc Castel. Взято с github.
Сложность заключается в том, что не обязательно серверы, напрямую выходящие в интернет, уязвимы. Уязвимость может быть на сервере, расположенном глубже в 'цепочке', который получает те же данные и регистрирует их. Это может затруднить понимание того, что открыто, а что нет.
Блок-схема "Mind map #2" дает хороший обзор того, как проверить собственные системы на уязвимости.
Создано Loïc Castel. Взято с github.


- User-agent
- Поле поиска
- Имя пользователя
- ...
4. Отслеживайте попадания канарейки и выясняйте, где работает log4j.
Источник: Твит от Florian Roth
Эта команда обрабатывает все диски, включая сетевые диски:
Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
Источник: https://twitter.com/0gtweet/status/1469661769547362305
Если нужно проверить только локальные диски:
Get-CimInstance win32_volume | Where-Object { $_.DriveType -eq 3 -and $_.DriveLetter -ne $null} | ForEach-Object {(gci ($_.DriveLetter+"\") -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
Источник: https://twitter.com/webmastir/status/1470386184052486155?s=20
Если дополнительно нужно проверить журнал событий на машине:
Get-WinEvent -ListLog * |
foreach { get-winevent @{logname=$_.logname; } -ea 0 } |
where message -match 'jndi'
#!/bin/bash
find / -name '*log4j*.jar' -print0 2>/dev/null -print0 | while read -d $'\0' log4j; do
echo -en "${log4j}: "$(unzip -p "${log4j}" | strings | grep -Po '^Implementation-Version:\s+([0-9\.]+)' | awk '{ print $NF }')"\n"
done
exit 0
Блок-схема "Mind map #3" дает обзор возможностей смягчения.
Создано Loïc Castel. Взято с github.
Ниже мы перечислили некоторые ресурсы для выполнения смягчения.
Обновите Log4j до версии 2.17.0
Обновите Log4j до версии 2.12.2 ВНИМАНИЕ не устраняет CVE-2021-45105
⚠️ этот метод больше не считается полноценным решением, так как он не устраняет все уязвимости во всех ситуациях.
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/HEAD/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
ПРИМЕЧАНИЕ: Требуется перезагрузка
Из https://twitter.com/CyberRaiju/status/1469505680138661890
"‐Dlog4j2.formatMsgNoLookups=True"
Пример командной строки:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
Или со значением -Xmx:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
Пример конфигурации systemd:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
Или со значением -Xmx:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'
Jar-файл — это архив (zip-файл), и его можно открыть. Затем файлы можно удалить. Это можно сделать вручную с помощью таких инструментов, как 7-zip (см. изображение) или с помощью скрипта.
Требуется перезапуск приложения
Источник: https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/HEAD/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn = 'JndiLookup.class' #Этот файл удаляется!
$Stream = New-Object IO.FileStream($JarFilLokasjon, [IO.FileMode]::Open)
$ZipMode = [IO.Compression.ZipArchiveMode]::Update
$Zip = New-Object IO.Compression.ZipArchive($stream, $ZipMode)
($zip.Entries | Where-Object { $Filnavn -contains $_.Name }) | ForEach-Object { $_.Delete() }
$zip.Dispose()
$stream.Close()
$stream.Dispose()
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
https://github.com/NCSC-NL/log4shell/tree/main/software
https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592
Запускать от root
lsof | grep log4j-core
Это загружается при перезапуске приложения Из https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7