
Guia em norueguês sobre vulnerabilidades Log4j (CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2019-17571) com scripts de detecção, etapas de mitigação e mapas mentais para identificar e remediar sistemas afetados.
Atualização 19.12.2021: Novas vulnerabilidades e novas formas de explorá-las no Log4j continuam sendo descobertas. Adicionamos três fluxogramas (mapas mentais) ao repositório git que descrevem respectivamente versão vulnerável do Log4j, como verificar se você está vulnerável e mitigação das várias vulnerabilidades.
Identifique softwares que utilizam Log4j versão 2.x
Mitigue vulnerabilidades no Log4j
Se o acima não for possível
Context Lookups em Pattern Layouts na configuração do Log4j2Identifique softwares que utilizam Log4j versão 1.x.
Se o Log4j versão 1.x for utilizado na empresa, entre em diálogo com o fornecedor e exija que eles
O grande lobo mau das vulnerabilidades no Log4j. A vulnerabilidade é explorada quando uma variante da string ${jndi:ldap://\<código_de_ataque>/a} é registrada pelo Log4j. CVSS 10.0, RCE.
Não tão grande quanto CVE-2021-44228, mas igualmente grave. Requer configuração não padrão do Log4j. CVSS 9.0, RCE e DoS.
Não tão grande quanto CVE-2021-44228, também um pouco menos grave. CVSS 7.5, DoS
Aplica-se apenas ao Log4j versão 1.x. Requer que o Log4j use JMSAppender. CVSS 6.6, RCE A exploração requer que o Log4j use JMSAppender. Seja porque o JMSAppender está configurado diretamente - o que é incomum - ou porque o atacante o adiciona à configuração do Log4j. Além disso, o atacante precisa ter acesso para modificar a configuração do JMSAppender. Se for o caso, o atacante normalmente já teria acesso ao sistema. Portanto, a vulnerabilidade é considerada de baixa relevância.
Aplica-se apenas ao Log4j versão 1.x. Requer que o Log4j use SocketServer. CVSS 9.8, RCE Dá a um atacante com acesso de rede ao socket em questão a capacidade de executar código. O código de exploração está publicamente disponível.
Para Java 8, o Log4j v. 2.17.0 é a versão mais recente. Ela mitiga todas as vulnerabilidades acima.
A versão 2.16.0 mitiga as piores vulnerabilidades.
Para Java 7, o Log4j foi lançado na versão 2.12.2. Esta não mitiga CVE-2021-45105. A equipe por trás do Log4j afirma que nem Java 6 nem Java 7 são mais suportados. Não se sabe se eles lançarão outra atualização de segurança para Log4j no Java 7.
O fluxograma "Mind map #1" fornece uma boa visão geral das condições para ter as diferentes vulnerabilidades.

Criado por Loïc Castel. Obtido do github.
Parte do desafio é que não são necessariamente servidores diretamente expostos à internet que estão vulneráveis. A vulnerabilidade pode estar em um servidor mais atrás na 'cadeia' que recebe os mesmos dados e os registra. Isso pode tornar desafiador saber o que está exposto e o que não está.
O fluxograma "Mind map #2" fornece uma boa visão geral de como verificar seus próprios sistemas para as vulnerabilidades.

Criado por Loïc Castel. Obtido do github.


- User-agent
- Campo de busca
- Nome de usuário
- ...
4. Acompanhe os acertos do canário e descubra onde o log4j está em execução.
Este comando abrange todos os discos, incluindo unidades de rede mapeadas:
Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
Ref: https://twitter.com/0gtweet/status/1469661769547362305
Se você deseja verificar apenas discos locais:
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)}
Ref: https://twitter.com/webmastir/status/1470386184052486155?s=20
Se você também deseja verificar o log de eventos na máquina.
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
Execute como root
lsof | grep log4j-core
O fluxograma "Mind map #3" fornece uma visão geral das opções de mitigação.

Criado por Loïc Castel. Obtido do github.
Abaixo listamos alguns recursos para realizar as mitigações.
Atualize o Log4j para v 2.17.0
Atualize o Log4j para v 2.12.2 OBS não mitiga CVE-2021-45105
⚠️ este método não é mais considerado uma solução completa, pois não mitiga todas as vulnerabilidades em todas as situações.
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
NOTA: Requer reinicialização
De https://twitter.com/CyberRaiju/status/1469505680138661890
"‐Dlog4j2.formatMsgNoLookups=True"
Command line example:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
Or with an -Xmx value:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
Systemd config example:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
Or with an -Xmx value:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'
Isso é carregado ao reiniciar a aplicação De https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7
Um arquivo jar é um arquivo (zip) e pode ser aberto. Arquivos podem então ser removidos. Isso pode ser feito manualmente com ferramentas como 7-zip (veja imagem) ou usando scripts.
Requer reinicialização da aplicação
Ref: https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn = 'JndiLookup.class' #Esta classe será excluída!
$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