
Norwegischsprachiger Leitfaden zu Log4j-Schwachstellen (CVE-2021-44228, CVE-2021-45046, CVE-2021-45105, CVE-2021-4104, CVE-2019-17571) mit Erkennungsskripten, Schadensbegrenzungsschritten und Mindmaps zur Identifizierung und Behebung betroffener Systeme.
Update 19.12.2021: Es werden ständig neue Schwachstellen und neue Wege, diese auszunutzen, in Log4j entdeckt. Wir haben dem Git-Repository drei Flussdiagramme (Mind Maps) hinzugefügt, die verwundbare Log4j-Versionen, Möglichkeiten zur Prüfung, ob man verwundbar ist und die Mitigation der verschiedenen Schwachstellen beschreiben.
Identifizieren Sie Software, die Log4j Version 2.x verwendet
Mitigieren Sie Schwachstellen in Log4j
Falls das oben Genannte nicht möglich ist
Context Lookups in Pattern Layouts zu suchenIdentifizieren Sie Software, die Log4j Version 1.x verwendet.
Wenn Log4j Version 1.x im Unternehmen verwendet wird, gehen Sie in den Dialog mit dem Lieferanten und verlangen Sie, dass diese
Der große böse Wolf unter den Log4j-Schwachstellen. Die Schwachstelle wird ausgenutzt, wenn eine Variante der Zeichenkette ${jndi:ldap://\<angrepskode>/a} von Log4j protokolliert wird. CVSS 10.0, RCE.
Nicht ganz so groß wie CVE-2021-44228, aber genauso böse. Erfordert eine nicht standardmäßige Log4j-Konfiguration. CVSS 9.0, RCE und DoS.
Nicht ganz so groß wie CVE-2021-44228, auch ein wenig weniger böse. CVSS 7.5, DoS
Betrifft nur Log4j Version 1.x. Erfordert, dass Log4j JMSAppender verwendet. CVSS 6.6, RCE Die Ausnutzung erfordert, dass Log4j JMSAppender verwendet. Entweder dadurch, dass JMSAppender direkt konfiguriert ist – was ungewöhnlich ist – oder dadurch, dass der Angreifer ihn selbst zur Log4j-Konfiguration hinzufügt. Darüber hinaus muss der Angreifer Zugriff haben, um die Konfiguration des JMSAppender zu ändern. Wenn dies der Fall ist, hat der Angreifer normalerweise bereits Zugriff auf das System. Die Schwachstelle wird daher als wenig relevant angesehen.
Betrifft nur Log4j Version 1.x. Erfordert, dass Log4j SocketServer verwendet. CVSS 9.8, RCE Gibt einem Angreifer mit Netzwerkzugriff auf den betreffenden Socket die Möglichkeit zur Codeausführung. Ausnutzungscode ist öffentlich verfügbar.
Für Java 8 ist Log4j v. 2.17.0 die letzte Version. Sie mitigiert alle oben genannten Schwachstellen.
Version 2.16.0 mitigiert die schlimmsten Schwachstellen.
Für Java 7 wurde Log4j in Version 2.12.2 veröffentlicht. Diese mitigiert CVE-2021-45105 nicht. Das Team hinter Log4j sagt übrigens, dass weder Java 6 noch Java 7 weiter unterstützt werden. Es ist ungewiss, ob es ein weiteres Sicherheitsupdate für Log4j unter Java 7 geben wird.
Das Flussdiagramm "Mind map #1" gibt einen guten Überblick über die Voraussetzungen dafür, ob man die verschiedenen Schwachstellen hat.

Erstellt von Loïc Castel. Von GitHub übernommen.
Eine der Herausforderungen ist, dass es nicht unbedingt Server sind, die direkt dem Internet ausgesetzt sind, die verwundbar sind. Die Schwachstelle kann in einem weiter hinten in der 'Kette' liegenden Server liegen, der dieselben Daten empfängt und protokolliert. Dies kann es schwierig machen zu wissen, was exponiert ist und was nicht.
Das Flussdiagramm "Mind map #2" gibt einen guten Überblick darüber, wie man die eigenen Systeme auf die Schwachstellen überprüfen kann.

Erstellt von Loïc Castel. Von GitHub übernommen.


- User-Agent
- Suchfeld
- Benutzername
- ...
4. Verfolgen Sie Canary-Treffer und finden Sie heraus, wo log4j ausgeführt wird.
Dieser Befehl durchsucht alle Laufwerke, einschließlich zugeordneter Netzlaufwerke:
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
Wenn man nur lokale Laufwerke überprüfen möchte:
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
Wenn man zusätzlich das Ereignisprotokoll der Maschine überprüfen möchte.
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
Wird als root ausgeführt
lsof | grep log4j-core
Das Flussdiagramm "Mind map #3" gibt einen Überblick über die Mitigationsmöglichkeiten.

Erstellt von Loïc Castel. Von GitHub übernommen.
Unten haben wir einige Ressourcen zur Durchführung der Mitigationen aufgelistet.
Aktualisieren Sie Log4j auf v 2.17.0
Aktualisieren Sie Log4j auf v 2.12.2 ACHTUNG mitigiert CVE-2021-45105 nicht
⚠️ Diese Methode wird nicht länger als vollwertige Lösung angesehen, da sie nicht alle Schwachstellen in allen Situationen mitigiert.
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
HINWEIS: Erfordert einen Neustart
Von https://twitter.com/CyberRaiju/status/1469505680138661890
"‐Dlog4j2.formatMsgNoLookups=True"
Kommandozeilenbeispiel:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
Oder mit einem -Xmx-Wert:
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
Systemd-Konfigurationsbeispiel:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
Oder mit einem -Xmx-Wert:
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'
Dies wird beim Neustart der Anwendung geladen Von https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7
Eine Jar-Datei ist ein Archiv (Zip-Datei) und kann geöffnet werden. Dateien können dann entfernt werden. Dies kann manuell mit Werkzeugen wie 7-Zip (siehe Bild) oder mithilfe von Skripten durchgeführt werden.
Erfordert einen Neustart der Anwendung
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' #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