Log4Shell, pengidentifikasi Common Vulnerability and Exposure (CVE), CVE-2021-44228, adalah kerentanan eksekusi kode jarak jauh (RCE) yang ada di beberapa versi Log4J. Cacat mempengaruhi Apache Log4J 2, versi 2.14.1 dan sebelumnya. Log4J 2.15 dan yang lebih baru, dan semua versi Apache Log4J 1, tidak terpengaruh.
Log4Shell muncul dari bagaimana versi lama Log4J 2 menangani pencarian Java Naming and Directory Interface (JNDI). JNDI adalah antarmuka pemrograman aplikasi (API) yang digunakan aplikasi Java untuk mengakses sumber daya yang dihosting di server eksternal. Pencarian JNDI adalah perintah yang memerintahkan aplikasi untuk pergi ke server dan mengunduh objek tertentu, seperti sepotong data atau skrip. Versi lama Log4J 2 secara otomatis menjalankan kode apa pun yang diunduh dengan cara ini.
Pengguna dapat mengirimkan pencarian JNDI ke versi Log4J yang rentan dengan menyertakannya dalam pesan log. Melakukannya sederhana. Misalnya, dalam versi Minecraft Java Edition yang lebih lama, yang menggunakan Log4J untuk merekam pesan pengguna, pengguna dapat mengetikkan pencarian JNDI ke jendela obrolan publik.
Peretas dapat menggunakan fungsionalitas JNDI ini untuk menjalankan kode berbahaya dan sewenang-wenang dari jarak jauh. Pertama, peretas menyiapkan server menggunakan protokol umum, seperti Lightweight Directory Access Protocol (LDAP) untuk menghindari perhatian. Selanjutnya, mereka menyimpan muatan berbahaya di server itu, seperti file malware. Terakhir, mereka mengirimkan pencarian JNDI ke sebuah program, memerintahkannya untuk pergi ke server LDAP penyerang, mengunduh muatan, dan menjalankan kode.