
Scanner de sistema de arquivos mais rápido para log4shell (CVE-2021-44228, CVE-2021-45046) e outras instâncias vulneráveis (CVE-2017-5645, CVE-2019-17571, CVE-2022-23305, CVE-2022-23307 ... ) da biblioteca log4j. Excelente desempenho e baixo consumo de memória.

Port Python de https://github.com/mergebase/log4j-detector log4j-detector é copyright (C) Copyright 2021 Mergebase Software Inc. https://mergebase.com/ Licenciado sob GPLv3.
Motivação para portar para Python foi melhorar o desempenho, reduzir o consumo de memória e aumentar a legibilidade do código. Veja a seção abaixo sobre desempenho para comparação.
E parece que esta é a ferramenta de varredura mais rápida com o menor requisito de memória
Identifica versões de log4j (1.x), reload4j (1.2.18+) e log4j-core (2.x) no seu sistema de arquivos vulneráveis a CVE-2021-44228, CVE-2021-45046 e muitas outras - veja tabela abaixo. É capaz de encontrar instâncias incorporadas em aplicações maiores em várias camadas de profundidade. Funciona em Linux, Windows, Mac ou qualquer outro lugar onde Python 3.8+ seja executado.
Pode detectar corretamente log4j dentro de jars/wars executáveis spring-boot, dependências misturadas em uber jars, jars sombreados (shaded), e até mesmo arquivos jar explodidos apenas sentados descomprimidos no sistema de arquivos (também conhecidos como *.class). Também pode lidar com arquivos de classe sombreados - extensões .esclazz (elastic) e .classdata (Azure).
Extensões de arquivos Java pesquisadas: .zip, .jar, .war, .ear, .aar, .jpi,
.hpi, .rar, .nar, .wab, .eba, .ejb, .sar, .apk, .par, .kar
| Detecta | CVE | CVSSv3 | Gravidade | Java | Vulnerável desde | Vulnerável até | Corrigido em | biblioteca |
|---|---|---|---|---|---|---|---|---|
| SIM | CVE-2021-44228 | 10.0 | Crítica | 8 | 2.0-beta9 | 2.14.1 | 2.15.0 | log4jv2 |
| SIM | CVE-2017-5645 | 9.8 | Crítica | 7 | 2.0-alpha1 | 2.8.1 | 2.8.2 | log4jv2 |
| SIM | CVE-2019-17571 | 9.8 | Crítica | 1.2.0 | 1.2.17 | sem correção | log4jv1 | |
| SIM | CVE-2021-45046 | 9.0 | Crítica | 7/8 | 2.0-beta9 | 2.15.0 excluindo 2.12.2 | 2.12.2/2.16.0 | log4jv2 |
| SIM | CVE-2022-23305 | 9.8 | Crítica | 1.2.0 | 1.2.17 | sem correção / 1.2.18.1 | log4jv1, reload4j | |
| SIM | CVE-2022-23307 | 9.8 | Crítica | 1.2.0 | 1.2.17 | sem correção / 1.2.18.1 | log4jv1, reload4j | |
| SIM | CVE-2022-23302 | 8.8 | Alta | 1.0 | 1.2.17 | sem correção / 1.2.18.1 | log4jv1, reload4j | |
| SIM | CVE-2021-4104 | 7.5 | Alta | - | 1.0 | 1.2.17 | sem correção | log4jv1 |
| SIM | CVE-2021-44832 | 6.6 | Média | 6/7/8 | 2.0-alpha7 | 2.17.0, excluindo 2.3.2/2.12.4 | 2.3.2/2.12.4/2.17.1 | log4jv2 |
| - | CVE-2021-42550 | 6.6 | Média | - | 1.0 | 1.2.7 | 1.2.8 | logback |
| SIM | CVE-2021-45105 | 5.9 | Média | 6/7/8 | 2.0-beta9 | 2.16.0, excluindo 2.12.3 | 2.3.1/2.12.3/2.17.0 | log4jv2 |
| - | CVE-2020-9488 | 3.7 | Baixa | 7/8 | 2.0-alpha1 | 2.13.1 | 2.12.3/2.13.2 | log4jv2 |
Cada instância é relatada com a lista apropriada de CVEs. Para cada CVE, o arquivo da biblioteca log4j é analisado para verificar se as soluções alternativas recomendadas (por exemplo, JndiLookup.class ou JMSAppender.class removidas) foram aplicadas e, nesse caso, é considerado não vulnerável. O status STRANGE é relatado para arquivos com arquivos pom.properties do log4j-core, mas sem classes de bytecode reais, geralmente são pacotes de origem e podem ser ignorados.
Aviso O recurso
--fixé experimental, use por sua conta e risco, certifique-se de fazer backup dos seus arquivos jar antes de usá-lo.
O argumento --fix tenta renomear instâncias de JndiLookup.class para JndiLookup.vulne, impedindo assim que a classe
seja carregada. Dentro de arquivos Java, isso é feito renomeando no local, não requer recompactação do arquivo e é
instantaneamente rápido.
Binários estão disponíveis para Linux 64bits, MS Windows 64bits e 32bits - veja Releases
A versão mínima suportada do Python é 3.8. De acordo com meus testes, a implementação zip do Python 3.6 não consegue abrir muitos arquivos
.jardos meus dados de teste.
log4shell finder é otimizado para desempenho e baixo consumo de memória.
Atualizado em 23.1.2022, desempenho medido em um diretório com 26237 arquivos em 2005 pastas.
Tempo de execução reduzido pela metade, consumo de memória em 2/3, leituras do sistema de arquivos em pelo menos 90%
Command being timed: "./test_log4shell.py /home/hynek/war/ --exclude-dirs /mnt --same-fs"
User time (seconds): 17.68
System time (seconds): 1.20
Percent of CPU this job got: 127%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:14.47
Maximum resident set size (kbytes): 64144
File system inputs: 114424
Command being timed: "./log4j-finder.py /home/hynek/war/"
User time (seconds): 23.59
System time (seconds): 1.09
Percent of CPU this job got: 99%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:26.18
Maximum resident set size (kbytes): 38604
File system inputs: 142824
Command being timed: "java -jar log4j-detector-latest.jar /home/hynek/war"
User time (seconds): 30.56
System time (seconds): 1.39
Percent of CPU this job got: 113%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:28.26
Maximum resident set size (kbytes): 214116
File system inputs: 14416
Command being timed: "./log4j2-scan /home/hynek/war --scan-log4j1 --scan-zip"
User time (seconds): 52.05
System time (seconds): 25.32
Percent of CPU this job got: 88%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:27.86
Maximum resident set size (kbytes): 593080
File system inputs: 215416
all--no-csv-header para omitir o cabeçalho csv, permitindo mesclagem mais fácil de resultados de vários hosts--threads para ajustar manualmente o número de threads de varredura--cvs-clean para escrever uma linha "CLEAN" na saída csv caso nenhuma biblioteca log4j seja detectada--cvs-stats para escrever uma linha "STATS" na saída csv com tempo de execução em segundos e número de arquivos e pastas varridos--fix nas versões 1.19 e 1.20 podia corromper arquivos .jar.Para mudanças anteriores, veja Notas de Lançamento