Log4Shell – Common Vulnerability and Exposure (CVE) identifier, CVE-2021-44228 – ist eine Sicherheitslücke für Remote-Code-Ausführung (RCE), die in einigen Versionen von Log4j vorhanden ist. Der Fehler betrifft Apache Log4j 2, 2.14.1 und frühere Versionen. Log4j 2.15 und höher sowie alle Versionen von Apache Log4j 1 sind davon nicht betroffen.
Log4Shell ergibt sich aus der Art und Weise, wie ältere Versionen von Log4j 2 mit Java Naming and Directory Interface (JNDI)-Lookups umgehen. JNDI ist eine Application Programming Interface (API), mit der Java-Anwendungen auf Ressourcen, die auf externen Servern gehostet werden, zugreifen können. Eine JNDI-Suche ist ein Befehl, der die App dazu auffordert, zu einem Server zu wechseln und ein bestimmtes Objekt herunterzuladen, z. B. bestimmte Daten oder ein Skript. Ältere Versionen von Log4j 2 führen automatisch jeden Code aus, der auf diese Weise heruntergeladen wurde.
Benutzer können JNDI-Suchen an anfällige Versionen von Log4j senden, indem sie sie in Protokollnachrichten aufnehmen. Das ist ganz einfach. In älteren Versionen der Minecraft Java Edition, die Log4j zum Aufzeichnen von Benutzernachrichten verwenden, kann ein Benutzer beispielsweise die JNDI-Suche in das öffentliche Chatfenster eingeben.
Hacker können diese JNDI-Funktion nutzen, um bösartigen, willkürlichen Code aus der Ferne auszuführen. Zunächst richtet der Hacker einen Server ein, der ein gängiges Protokoll wie das Lightweight Directory Access Protocol (LDAP) verwendet, um nicht aufzufallen. Als Nächstes wird eine bösartige Payload auf diesem Server gespeichert, beispielsweise eine Malware-Datei. Schließlich wird eine JNDI-Suche an ein Programm gesendet, die es anweist, zum LDAP-Server des Angreifers zu gehen, die Payload herunterzuladen und den Code auszuführen.