
[Movido para o Codeberg] Scanner local simples para instâncias vulneráveis do log4j

(Escrito em Go porque, você sabe, "escreva uma vez, execute em qualquer lugar.")
Esta é uma ferramenta simples que pode ser usada para encontrar instâncias vulneráveis de log4j 1.x e 2.x em instalações de software Java, como aplicações web. Arquivos JAR e WAR são inspecionados e arquivos de classe que são conhecidos por serem vulneráveis são sinalizados. A varredura acontece recursivamente: arquivos WAR contendo arquivos WAR contendo arquivos JAR contendo arquivos de classe vulneráveis devem ser sinalizados corretamente.
Vulnerabilidades atualmente reconhecidas são:
A ferramenta de varredura atualmente verifica artefatos de build conhecidos que foram obtidos através do Maven. Rebuilds a partir do código-fonte, como são feitos para distribuições Linux, podem não ser reconhecidos.
Também está incluída uma ferramenta de correção simples que pode ser usada para remover classes problemáticas de arquivos JAR reescrevendo a estrutura do arquivo ZIP.
Binários para x86_64 Windows, Linux, MacOSX para versões marcadas são fornecidos através da página Releases.
$ ./local-log4j-vuln-scanner [--verbose] [--quiet] \
[--ignore-v1] [--ignore-vulns=...] \
[--exclude /caminho/para/excluir …] \
[--scan-network] \
[--log /caminho/para/arquivo.log] \
/caminho/para/app1 /caminho/para/app2 …
A flag --verbose mostrará cada arquivo .jar e .war verificado, mesmo que nenhum problema seja encontrado.
A flag --quiet suprimirá a saída, exceto por indicadores de uma vulnerabilidade conhecida.
A flag --ignore-v1 excluirá verificações para vulnerabilidades do log4j 1.x.
A flag --ignore-vulns permite excluir verificações para vulnerabilidades
específicas. ex.: -ignore-vulns=CVE-2021-45046,CVE-2021-44832.
Para verificar todas as vulnerabilidades conhecidas, passe uma lista vazia assim:
-ignore-vulns=
A flag --log permite que tudo seja escrito em um arquivo de log em vez de stdout/stderr.
Use a flag --exclude para excluir subdiretórios da varredura. Pode ser usada várias vezes.
A flag --scan-network instrui o scanner a pesquisar sistemas de arquivos de rede (desativada por padrão). Isso não foi implementado para Windows.
Se arquivos de classe indicando uma das vulnerabilidades forem encontrados, mensagens como as seguintes são impressas na saída padrão:
./local-log4j-vuln-scanner - um scanner simples de vulnerabilidades log4j local
Verificando vulnerabilidades: CVE-2019-17571, CVE-2021-44228, CVE-2021-45105
examinando /caminho/para/vuln/log4shell-vulnerable-app-0.0.1-SNAPSHOT.war
indicador de componente vulnerável encontrado em /caminho/para/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
Varredura concluída
Atenção: Use por sua conta e risco e mantenha os arquivos JAR originais.
$ ./local-log4j-vuln-patcher log4j-core-2.14.1.jar log4j-core-2.14.1-patched.jar
Filtrando org/apache/logging/log4j/core/pattern/MessagePatternConverter.class (log4j 2.14)
Filtrando org/apache/logging/log4j/core/net/JndiManager.class (log4j 2.14.0-2.14.1)
Gravação em log4j-core-2.14.1-patched.jar concluída
Instale um compilador Go.
Execute os seguintes comandos no repositório verificado:
go build -o local-log4j-vuln-scanner ./scanner
go build -o local-log4j-vuln-patcher ./patcher
(Adicione a extensão .exe apropriada em sistemas Windows, é claro.)
GNU General Public License, versão 3
Hilko Bengen <[email protected]>