Log4Shell (identificativo Common Vulnerability and Exposure (CVE) CVE-2021-44228) è una vulnerabilità di esposizione (RCE) presente in alcune versioni di Log4J. L'errore interessa Apache Log4J, versione 2.14.1 e precedenti. Log4J 2.15 e versioni successive, così come tutte le versioni di Apache Log4J 1, non sono interessate.
Log4Shell nasce dal modo in cui le versioni precedenti di Log4J gestisce le ricerche Java Naming and Directory Interface (JNDI). JNDI è un'interfaccia di programmazione delle applicazioni (API) che le applicazioni Java utilizzano per accedere alle risorse in hosting su server esterni. Una ricerca JNDI è un comando che dice all'app di andare su un server e scaricare un oggetto specifico, come dati o script.Le versioni più vecchie di Log4J eseguono automaticamente qualsiasi codice scaricato in questo modo.
Gli utenti possono inviare ricerche JNDI a versioni vulnerabili di Log4J includendole in messaggi di log. E farlo non è difficile. Ad esempio, nelle versioni più vecchie di Minecraft Java Edition, che utilizza Log4J per registrare i messaggi degli utenti, un utente può digitare la ricerca JNDI nella finestra di conversazione pubblica.
Gli hacker possono utilizzare questa funzionalità JNDI per eseguire da remoto un codice arbitrario dannoso. Innanzitutto, l'hacker imposta un server che utilizza un protocollo comune, come Lightweight Directory Access Protocol (LDAP) per evitare di attirare l'attenzione. Successivamente, l'hacker memorizza un payload malevolo sul server, ad esempio un file di malware. Infine, invia una ricerca JNDI a un programma, dicendogli di andare sul server LDAP dell'aggressore, scaricare il payload ed eseguire il codice.