
Guida in lingua norvegese alle vulnerabilità Log4j (CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2019-17571) con script di rilevamento, passaggi di mitigazione e mappe mentali per identificare e correggere i sistemi interessati.
Aggiornamento 19.12.2021: Continuano a essere scoperte nuove vulnerabilità e nuovi modi di sfruttarle in Log4j. Abbiamo aggiunto tre diagrammi di flusso (mind map) al repository git che descrivono rispettivamente versione vulnerabile di Log4j, come verificare se si è vulnerabili e mitigazione delle varie vulnerabilità.
Identificare il software che utilizza Log4j versione 2.x
Mitigare le vulnerabilità in Log4j
Se quanto sopra non è possibile
Context Lookups nei Pattern Layouts nella configurazione di Log4j2Identificare il software che utilizza Log4j versione 1.x.
Se Log4j versione 1.x viene utilizzata nell'organizzazione, avviare un dialogo con il fornitore e richiedere che
Il grande lupo cattivo delle vulnerabilità in Log4j. La vulnerabilità viene sfruttata quando una variante della stringa ${jndi:ldap://\<codice_attacco>/a} viene registrata da Log4j. CVSS 10.0, RCE.
Non grande come CVE-2021-44228, ma altrettanto brutta. Richiede una configurazione non standard di Log4j. CVSS 9.0, RCE e DoS.
Non grande come CVE-2021-44228, anche un po' meno brutta. CVSS 7.5, DoS
Riguarda solo Log4j versione 1.x. Richiede che Log4j utilizzi JMSAppender. CVSS 6.6, RCE Lo sfruttamento richiede che Log4j utilizzi JMSAppender. O perché JMSAppender è configurato direttamente - cosa rara - o perché l'attaccante lo aggiunge alla configurazione di Log4j. Inoltre, l'attaccante deve avere accesso per modificare la configurazione di JMSAppender. Se è così, normalmente l'attaccante ha già accesso al sistema. La vulnerabilità è quindi considerata poco rilevante.
Riguarda solo Log4j versione 1.x. Richiede che Log4j utilizzi SocketServer. CVSS 9.8, RCE Concede all'attaccante con accesso di rete al socket interessato la possibilità di eseguire codice. Il codice per lo sfruttamento è pubblicamente disponibile.
Per Java 8, Log4j v. 2.17.0 è l'ultima versione. Mitiga tutte le vulnerabilità sopra.
La versione 2.16.0 mitiga le peggiori vulnerabilità.
Per Java 7, Log4j è stato rilasciato nella versione 2.12.2. Questa non mitiga CVE-2021-45105. Il team di Log4j afferma inoltre che né Java 6 né Java 7 sono più supportati. Non è chiaro se rilasceranno un ulteriore aggiornamento di sicurezza per Log4j su Java 7.
Il diagramma di flusso "Mind map #1" fornisce una buona panoramica delle condizioni per sapere se si hanno le diverse vulnerabilità.

Realizzato da Loïc Castel. Tratto da github.
Parte della sfida è che non sono necessariamente i server esposti direttamente a Internet a essere vulnerabili. La vulnerabilità può trovarsi in un server più indietro nella 'catena' che riceve gli stessi dati e li registra. Questo può rendere difficile sapere cosa è esposto e cosa no.
Il diagramma di flusso "Mind map #2" fornisce una buona panoramica su come controllare i propri sistemi per le vulnerabilità.
Realizzato da Loïc Castel. Tratto da github.


- User-agent
- Campo di ricerca
- Nome utente
- ...
4. Seguire le corrispondenze del canarino e scoprire dove viene eseguito log4j.
Questo prende tutti i dischi, incluse le unità di rete mappate:
Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
Rif: https://twitter.com/0gtweet/status/1469661769547362305
Se si desidera controllare solo i dischi locali:
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)}
Rif: https://twitter.com/webmastir/status/1470386184052486155?s=20
Se si desidera inoltre controllare il registro eventi sulla macchina.
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
Il diagramma di flusso "Mind map #3" fornisce una panoramica delle opzioni di mitigazione.
Realizzato da Loïc Castel. Tratto da github.
Di seguito abbiamo elencato alcune risorse per eseguire le mitigazioni.
Aggiornare Log4j alla v 2.17.0
Aggiornare Log4j alla v 2.12.2 NOTA non mitiga CVE-2021-45105
⚠️ questo metodo non è più considerato una soluzione completa poiché non mitiga tutte le vulnerabilità in tutte le situazioni.
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/HEAD/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
NOTA: Richiede riavvio
Da 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'
Un file jar è un archivio (file zip) e può essere aperto. I file possono quindi essere rimossi. Questo può essere fatto manualmente con strumenti come 7-zip (vedi immagine) o utilizzando script.
Richiede riavvio dell'applicazione
Rif: https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/HEAD/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn = 'JndiLookup.class' #Denne filen slettes!
$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
https://github.com/NCSC-NL/log4shell/tree/main/software
https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592
Eseguire come root
lsof | grep log4j-core
Questo viene caricato al riavvio dell'applicazione Da https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7