
[Moved to Codeberg] Простой локальный сканер для уязвимых экземпляров log4j

(Написан на Go, потому что, ну вы знаете, «написал один раз — работает везде».)
Это простой инструмент, который можно использовать для поиска уязвимых экземпляров log4j 1.x и 2.x в установках Java-программного обеспечения, таких как веб- приложения. Проверяются JAR- и WAR-архивы, а файлы классов, которые известно, что они уязвимы, помечаются. Сканирование выполняется рекурсивно: WAR-файлы, содержащие WAR-файлы, содержащие JAR-файлы, содержащие уязвимые файлы классов, должны быть правильно помечены.
В настоящее время распознаются следующие уязвимости:
Инструмент сканирования в настоящее время проверяет известные артефакты сборки, которые были получены через Maven. Пересборки из исходного кода, как это делается для дистрибутивов Linux, могут не распознаваться.
Также включен простой инструмент исправления, который можно использовать для удаления плохих классов из JAR-файлов путем перезаписи структуры ZIP-архива.
Бинарные файлы для x86_64 Windows, Linux, MacOSX для помеченных релизов предоставляются на странице Releases.
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /path/to/exclude …] \
[--scan-network] \
[--log /path/to/file.log] \
/path/to/app1 /path/to/app2 …
Флаг --verbose покажет каждый проверенный файл .jar и .war, даже если проблема не найдена.
Флаг --quiet подавляет вывод, за исключением индикаторов известной уязвимости.
Флаг --ignore-v1 исключает проверки на уязвимости log4j 1.x.
Флаг --ignore-vulns позволяет исключать проверки на конкретные
уязвимости. Например, -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
Чтобы проверить все известные уязвимости, передайте пустой список следующим образом:
-ignore-vulns=
Флаг --log позволяет записывать все в файл журнала вместо stdout/stderr.
Используйте флаг --exclude, чтобы исключить подкаталоги из сканирования. Можно использовать несколько раз.
Флаг --scan-network указывает сканеру искать сетевые файловые системы (отключено по умолчанию). Это не реализовано для Windows.
Если найдены файлы классов, указывающие на одну из уязвимостей, на стандартный вывод выводятся сообщения, подобные следующим:
./local-log4j-vuln-scanner - a simple local log4j vulnerability scanner
Checking for vulnerabilities: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
examining /path/to/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
indicator for vulnerable component found in /path/to/vuln/Downloads/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war::WEB-INF/lib/log4j-core-2.14.1.jar (org/apache/logging/log4j/core/net/JndiManager.class): JndiManager.class log4j 2.14.0-2.14.1 CVE-2021-44228, CVE-2021-45105
Scan finished
Внимание: Используйте на свой страх и риск и сохраняйте оригинальные JAR-файлы.
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtering out org/apache/logging/log4j/core/pattern/MessagePatternConverter.class (log4j 2.14)
Filtering out org/apache/logging/log4j/core/net/JndiManager.class (log4j 2.14.0-2.14.1)
Writing to log4j-core-2.14.1-patched.jar done
Установите компилятор Go.
Выполните следующие команды в проверенном репозитории:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Добавьте соответствующее расширение .exe в системах Windows, разумеется.)
GNU General Public License, версия 3
Hilko Bengen <[email protected]>