Am vergangenen Donnerstag veröffentlichte ein Forscher des Alibaba Cloud Security Teams auf Twitter eine Zero-Day-Schwachstelle für die Ausführung von Remote-Code, die das äußerst beliebte Log4j-Logging-Framework für Java angreift. Die Schwachstelle wurde ursprünglich am 24. November vom Alibaba-Cloud-Sicherheitsteam entdeckt und an Apache gemeldet.
MITRE ordnete dieser Schwachstelle CVE-2021-44228 zu, die seitdem von Sicherheitsforschern als Log4Shell bezeichnet wird. Seit letzter Woche wird vielfach berichtet, dass die Sicherheitslücke massiv ausgenutzt wird, da sie trivial ausnutzbar ist. Die Sicherheitslücke, die die höchste CVSS-Wertung - 10.0 - erhielt, ist aufgrund mehrerer Faktoren extrem gefährlich:
- Die Ausnutzung der Schwachstelle ist trivial und hartnäckig, und auf GitHub und anderen öffentlichen Quellen sind zahlreiche Exploits verfügbar.
- Log4j2 ist eines der beliebtesten Java-Logging-Frameworks. Derzeit gibt es fast 7.000 Maven-Artefakte, die von log4j-core (dem verwundbaren Artefakt) abhängen, und es gibt unzählige andere Java-Projekte, die es verwenden.
- Die Schwachstelle kann leicht in einem Drive-by-Attack-Szenario genutzt werden, indem zufällige HTTP-Server überladen werden.
- Obwohl die Schwachstelle kontextabhängig ist, da eine beliebige Benutzereingabe eine der Log4j2-Protokollierungsfunktionen erreichen muss, ist dieses Szenario extrem häufig. In den meisten Logging-Szenarien enthält ein Teil der Log-Meldung Eingaben des Benutzers. Solche Eingaben werden selten bereinigt, da sie als extrem sicher gelten.
Die beste Lösung ist ein Upgrade der von der Schwachstelle betroffenen Anwendungen auf Version 2.15.0. Diese Version behebt sie auf mehreren Ebenen und verbessert die allgemeine Sicherheit. Als zusätzliche Schutzmaßnahme empfehlen die Sicherheitsforscher von JFrog, überall die Umgebungsvariable auf „LOG4J_FORMAT_MSG_NO_LOOKUPS“ zu setzen.
Eine andere Möglichkeit besteht darin, dass Message Lookups durch das Setzen der Umgebungsvariablen „LOG4J_FORMAT_MSG_NO_LOOKUPS“ auf „true“ deaktiviert werden können. Dieser Befehl wird vor dem Laden von Java-Anwendungen in einem der Init-Skripte des Systems ausgeführt.