
컴파일된 Java 클래스(중첩된 아카이브 포함)를 분석하여 취약한 Log4J 버전(CVE-2021-44228, CVE-2021-45046)을 감지하는 파일 시스템 스캐너입니다. Linux, Windows, Mac에서 작동합니다.

취약한 Log4J 버전을 탐지하여 팀이 CVE-2021-44228 (심각), CVE-2021-45046, CVE-2021-45105, CVE-2021-44832에 대한 노출을 평가할 수 있도록 도와주는 스캐너입니다. 완전한 파일 시스템(설치된 모든 애플리케이션 포함)을 면밀히 조사하여 Log4J 인스턴스를 검색합니다. 여러 계층 깊이 숨겨진 Log4J 인스턴스도 찾을 수 있습니다. Linux, Windows, Mac 및 Java가 실행되는 모든 곳에서 작동합니다!
현재 log4j-core 2.3.2, 2.12.4, 2.17.1 버전을 _SAFE_로, 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0, 2.17.0 버전을 _OKAY_로 보고하며, 다른 모든 버전은 _VULNERABLE_로 보고합니다(단, 2.0-beta9 미만은 _POTENTIALLY_SAFE_로 보고). 이전 log4j-1.x 버전은 _OLD_로 보고합니다.
실행 가능한 spring-boot jar/war, uber jar에 혼합된 의존성, shaded jar, 심지어 압축 풀린 상태로 파일 시스템에 있는 jar 파일(일명 *.class) 내의 log4j도 올바르게 탐지할 수 있습니다.
테스트를 위해 사용하는 log4j-samples 컬렉션을 유지 관리하고 있습니다.
java -jar log4j-detector-2021.12.29.jar ./samples
-- github.com/mergebase/log4j-detector v2021.12.29 (by mergebase.com) analyzing paths (could take a while).
-- Note: specify the '--verbose' flag to have every file examined printed to STDERR.
false-hits/log4j-core-2.12.2.jar contains Log4J-2.x == 2.12.2 _OKAY_
false-hits/log4j-core-2.12.3.jar contains Log4J-2.x == 2.12.3 _OKAY_
false-hits/log4j-core-2.12.4.jar contains Log4J-2.x == 2.12.4 _SAFE_
false-hits/log4j-core-2.15.0.jar contains Log4J-2.x == 2.15.0 _OKAY_
false-hits/log4j-core-2.16.0.jar contains Log4J-2.x == 2.16.0 _OKAY_
false-hits/log4j-core-2.17.0.jar contains Log4J-2.x == 2.17.0 _OKAY_
false-hits/log4j-core-2.17.1.jar contains Log4J-2.x >= 2.17.1 _SAFE_
false-hits/log4j-core-2.3.1.jar contains Log4J-2.x == 2.3.1 _OKAY_
false-hits/log4j-core-2.3.2.jar contains Log4J-2.x == 2.3.2 _SAFE_
true-hits/log4j-core-2.0-beta9.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.10.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.10.0.zip contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.11.2.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.12.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.0.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.14.1.jar contains Log4J-2.x >= 2.10.0 _VULNERABLE_
true-hits/log4j-core-2.2.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.3.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.4.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
true-hits/log4j-core-2.9.1.jar contains Log4J-2.x >= 2.0-beta9 (< 2.10.0) _VULNERABLE_
old-hits/log4j-1.1.3.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-1.2.17.jar contains Log4J-1.x <= 1.2.17 _OLD_
old-hits/log4j-core-2.0-beta2.jar contains Log4J-2.x <= 2.0-beta8 _POTENTIALLY_SAFE_ (Did you remove JndiLookup.class?)
_VULNERABLE_ -> 이 파일을 업그레이드하거나 제거해야 합니다.
_OKAY_ -> Log4J 2.3.1, 2.12.2, 2.12.3, 2.15.0, 2.16.0, 2.17.0 버전에 대해 이 결과를 보고합니다. 2.17.1로 업그레이드할 것을 권장합니다.
_SAFE_ -> 현재 Log4J 2.3.2, 2.12.4, 2.17.1 (및 그 이상) 버전에 대해서만 이 결과를 보고합니다.
_OLD_ -> CVE-2021-44228로부터 안전하지만, Log4J 1.2.x는 7년 동안 EOL 상태이며 여러 알려진 취약점이 있으므로 업그레이드 계획을 세워야 합니다.
_POTENTIALLY_SAFE_ -> "JndiLookup.class" 파일이 존재하지 않습니다. Log4J 버전이 매우 오래되었거나(2.0-beta9 이전), 이미 누군가 이 파일을 제거했기 때문입니다. 만약 그렇다면 "JndiLookup.class"를 제거한 사람이 팀이나 회사 사람인지 확인하세요. 공격자가 손상된 시스템에 대한 추가 경쟁 공격자의 접근을 막기 위해 직접 이 파일을 제거하는 경우가 알려져 있기 때문입니다.
java -jar log4j-detector-2021.12.29.jar
Usage: java -jar log4j-detector-2021.12.29.jar [--verbose] [--json] [--stdin] [--exclude=X] [paths to scan...]
--json - Output STDOUT results in JSON. (Errors/warning still emitted to STDERR)
--stdin - Read STDIN for paths to explore (one path per line)
--exclude=X - Where X is a JSON list containing full paths to exclude. Must be valid JSON.
Example: --exclude='["/dev", "/media", "Z:\TEMP"]'
Exit codes: 0 = No vulnerable Log4J versions found.
1 = At least one legacy Log4J 1.x version found.
2 = At least one vulnerable Log4J version found.
About - MergeBase log4j detector (version 2021.12.29)
Docs - https://github.com/mergebase/log4j-detector
(C) Copyright 2021 Mergebase Software Inc. Licensed to you via GPLv3.
git clone https://github.com/mergebase/log4j-detector.git
cd log4j-detector/
mvn install
java -jar target/log4j-detector-latest.jar
log4j 샘플 컬렉션을 이곳에서 유지 관리합니다: https://github.com/mergebase/log4j-samples
GPL 버전 3.0
Java 컴파일러는 String 리터럴을 컴파일된 *.class 파일에 직접 저장합니다. log4j-detector가 파일 시스템에서 "JndiManager.class"라는 이름의 파일을 감지하면, 해당 파일에서 "Invalid JNDI URI - {}" 문자열을 찾습니다. 이 특정 String 리터럴은 패치된 Log4J 버전(2.15.0)에만 존재하는 것으로 밝혀졌습니다. 해당 문자열이 없는 모든 Log4J 버전은 취약합니다.
*.class 파일에서 String 리터럴을 검사하는 이 동일한 기법은 안전한 버전 2.3.2, 2.12.4, 2.17.1을 정확하게 탐지하도록 더 확장되었습니다.
log4j-core 라이브러리만 적중합니다. log4j-api는요? 많은 스캐너(GitHub 자체 Dependabot 포함)가 현재 "log4j-core"와 "log4j-api" 라이브러리 모두를 취약하다고 보고합니다. 이 스캐너들은 잘못되었습니다. 현재 "log4j-api" 라이브러리 중 이러한 취약점에 의해 악용될 수 있는 버전은 존재하지 않습니다.
MergeBase에서는 스캔 정확성을 자랑스럽게 생각합니다. 시스템을 패치하고 방어하는 것만으로도 충분히 바쁘십니다. 가양성(false positive)으로 시간을 낭비하게 하고 싶지 않습니다. 그렇기 때문에 log4j-api에 대한 적중 결과는 보고하지 않습니다.
버전 2.10.0은 Log4J의 취약한 "메시지 조회 기능"을 Log4J 구성을 통해 비활성화할 수 있는 첫 번째 버전이기 때문에 중요합니다.
버전 2.12.2는 CVE-2021-44228에 취약하지 않은 Java 7 호환 Log4J 버전이기 때문에 중요합니다.
버전 2.15.0과 2.16.0은 Log4J의 기본 구성을 변경하지 않은 상태에서 CVE-2021-44228에 취약하지 않은 첫 번째 버전이기 때문에 중요합니다.
그리고 버전 2.3.2, 2.12.4, 2.17.1은 최근에 발견된 CVE-2021-45046 및 CVE-2021-45105와 같은 CVE에 취약하지 않기 때문에 중요합니다. 이것들이 훨씬 덜 심각한 취약점임에도 불구하고, 모든 사람이 2.3.2, 2.12.4, 2.17.1 중 하나로 패치하기를 원할 것으로 예상합니다.
"!" 기호는 log4j-detector가 zip 아카이브(예: *.zip, *.ear, *.war, *.aar, *.jar)에 진입했음을 의미합니다. zip 파일은 zip 파일을 포함할 수 있으므로, 하나의 결과에 "!" 표시가 두 개 이상 포함될 수 있습니다.