Log4j Zero-Day İle İlgili Son Gelişmeler

Bu kritik Zero-Day açığı, belirli bir payload’ı günlüğe kaydederek RCE’ye (Remote Code Execution – Uzaktan Kod Yürütme) izin veren son derece popüler Java loglama kütüphanesi olan log4j’de keşfedildi.

Güvenlik açığına, CVSS (Common Vulnerability Scoring System – Ortak Güvenlik Açığı Puanlama Sistemi) puanı mümkün olan en yüksek risk olan 10 olup kritik önem seviyesine sahip olan “Log4Shell” takma adı GitHub Advisory tarafından verildi.

İSTİSMARIN AMACI

Log4Shell, kamuya açıklanmadan birkaç gün önce istismar (exploit) ediliyordu. Ayrıca, log4shell tarama girişimleri iki hafta öncesine kadar keşfedildi. Saldırganlar kripto madencileri kurabildi, botnetler oluşturabildi ve hassas verileri ve sistem kimlik bilgilerini çalabildi. Bugün itibariyle, bir milyondan fazla makineyi etkilediği tahmin ediliyor.

İLGİLİ CVE’LER

Açıklanmasından bu makalenin oluşturulmasına kadar, Log4j2 ve Log4j1 ile ilgili dört CVE (Ortak Güvenlik Açıkları ve Etkilenmeler) yayınlandı:

LOG4J2: CVE-2021-44228

Log4j2 2.0-beta9 ila 2.15.0 sürümleri (2.12.1’den sonraki 2.12.x hariç), LDAP JNDI parser kullanılarak uzaktan kod yürütülmesine karşı savunmasızdır. Log mesajlarını veya log mesajı parametrelerini kontrol edebilen bir saldırgan, mesaj arama ikamesi etkinleştirildiğinde LDAP sunucularından yüklenen rastgele kodu çalıştırabilir.

CVE-2021-44228 olarak adlandırılan ilk güvenlik açığının 2.12.2 ve 2.15.0 sürümlerinde düzeltildiği varsayılmıştır. Düzeltme, varsayılan olarak JNDI’nin devre dışı bırakılmasını ve log4j2’nin adlandırılmış nesne araması ve JNDI yöneticisinde JNDI aracılığıyla LDAP erişiminin kısıtlanmasını içerir. Bu güvenlik açığı, mümkün olan en yüksek CVSS puanını, yani 10 puan aldı ve Maven Paket Yöneticisi aracılığıyla kullanılabilen aşağıdaki paketleri etkiler:

org.apache.logging.log4j:log4j-api
org.apache.logging.log4j:log4j-core

Notlar

Güvenlik açığının kendisi log4j-core’dadır. İstismarı tetiklemek için kullanılan Logger sınıfının kendisi, Logger.error() metodunu çağırarak istismar POC’lerinde kullanıldığı gibi, log4j-api’de tanımlanır. Bu tür bir kullanımı istismar edilebilir yol ile tespit etmek ve müşterilerimizin mümkün olduğunca güvenliğini sağlamak için, Logger’ın yöntemlerini savunmasız yöntemler olarak ekledik (araştırmaya göre sonunda güvenlik açığını tetikliyor). Bu yaklaşım, bu güvenlik açığı için GitHub’ın Danışma sayfasında açıklanmıştır.

LOG4J2: CVE-2021-45046

11 Aralık 2021’de, varsayılan olmayan bazı yapılandırmalarda CVE-2021-44228’in düzeltmesinin eksik olduğu keşfedildi. Bu durum, saldırganların özel olarak hazırlanmış kötü amaçlı input verileriyle bir JNDI arama modeli kullanmasına, tüm ortamlarda LCE (Yerel Kod Yürütme) ve bazı ortamlarda bilgi sızıntısı ve RCE ile sonuçlanmasına izin verebilir. RCE, bazı macOS ortamlarında da mümkündür. Bu tamamlayıcı güvenlik açığı CVE-2021-45046 olarak belirlenmiştir ve 2.12.2 ve 2.16.0 sürümlerinde JNDI varsayılan olarak devre dışı bırakılarak ve mesaj arama kaldırılarak düzeltilmiştir.

Bu güvenlik açığının başlangıçta yalnızca DOS saldırılarına izin verdiği kabul edildiğinden, bu güvenlik açığı için atanan CVSS puanı 3,7’dir. Daha sonra çok daha ciddi bir tehdit (RCE) olarak keşfedildiği için CVSS puanı 9,0’a yükseltildi.

Bu güvenlik açığı esasen CVE-2021-44228’in bir uzantısıdır, dolayısıyla etkilenen paketler aynıdır.

CVE-2021-44228 ve CVE-2021-45046 için İyileştirme Seçenekleri:

  • Java 8 (veya üstü) gerektiren kullanıcılar, 2.16.0 sürümüne yükseltme yapmalıdır.
  • Java 7’ye ihtiyaç duyan kullanıcılar, 2.12.2 sürümüne yükseltme yapmalıdır.
  • JndiLookup sınıfını sınıf path’inden kaldırın:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

LOG4J2: CVE-2021-45105

15 Aralık 2021’de log4j2’nin 2.0-alpha1’den 2.16.0’a kadar olan sürümlerinin (2.12.3’ten 2.12.x hariç) DOS saldırılarına karşı savunmasız olduğu keşfedildi. Çünkü kendini referanslı aramaların kontrolsüz ve sonsuz yinelenmesinden korumaz. Bunlar da işlemi sonlandıracak bir Yığın Taşması (Stack Overflow) hatasına neden olur. Bu güvenlik açığı 18 Aralık 2021’de CVE-2021-45105 altında NVD’de yayınlandı ve string değiştirme özyinelemesini düzelterek ve JNDI’yi yalnızca Java protokolüyle sınırlayarak 2.17.0 sürümünde düzeltildi.

GitHub Danışmanlığı ve log4Shell’in türevleri için önceki düzeltmelere göre, Java7 kullanıcıları için düzeltme, gelecek 2.12.3 sürümünde yayınlanmalıdır. Apache tarafından kendisine atanan CVSS puanı 7.5’tir.

CVE-2021-45105 için İyileştirme Seçenekleri:

  • Java 8 (veya üstü) gerektiren kullanıcılar, 2.17.0 sürümüne yükseltme yapmalıdır. GitHub Danışmanlığı ve log4Shell varyantları için geçmişteki düzeltmelere göre, Java 7’ye ihtiyaç duyan kullanıcılar, kullanılabilir olduğunda 2.12.3 sürümüne yükseltme yapmalıdır.
  • Log yapılandırmasındaki PatternLayout’ta, ${ctx:loginId} veya $${ctx:loginId} gibi Durum Aramalarını Thread Durum Eşlemesi pattern’leriyle (%X, %mdc veya %MDC) değiştirin.

Log4j2 güvenlik açıkları için önemli not:

Bu güvenlik açıklarından yalnızca og4j-core JAR dosyası etkilenir. log4j-core JAR dosyası olmadan yalnızca log4j-api JAR dosyasını kullanan uygulamalar etkilenmez. Apache Log4j, etkilenen tek Loglama Servisleri alt projesidir. Log4net ve Log4cxx gibi diğer projeler bu güvenlik açıklarından etkilenmez.

LOG4J1: CVE-2021-4104

13 Aralık 2021’de açıklanan ve 14 Aralık 2021’de CVE-2021-4104 kapsamında NVD’de yayınlanan log4j1’in, daha önce yalnızca log4j2’yi etkilediğine inanılan log4Shell güvenlik açığına karşı da savunmasız olduğu keşfedildi.

Bu güvenlik açığının temel nedeni, saldırganın Log4j yapılandırmasına yazma erişimine sahip olduğunda güvenilmeyen verilerin deserializasyona (seri durumdan çıkarılmasına) karşı savunmasız olan org.apache.log4j.net.JMSAppender sınıfındadır. Saldırgan, JMSAppender’ın uzaktan kod yürütülmesine neden olan JNDI istekleri gerçekleştirmesine neden olan yapılandırma parametrelerine kötü amaçlı payload’lar sağlayabilir. Bu, JMSAppender yapılandırması varsayılan olarak devre dışı bırakıldığından, Log4j 1.2’nin varsayılan olmayan yapılandırmalarını etkiler. Bu güvenlik açığı için atanan CVSS puanı 6.6’dır. Bu, saldırganın yararlanabilmesi için log4j yapılandırmasına yazma erişimine sahip olması gerektiğinden CVE-2021-44228’den daha düşüktür.

Güvenlik açığı, Maven Paket Yöneticisi aracılığıyla kullanılabilen log4j:log4j paketini etkiler:

CVE-2021-4104 için İyileştirme Seçenekleri:

  • Kullanıcılar, 2.12.2 veya 2.16.0 olan Log4j2’ye yükseltme yapmalıdır.
  • JMSAppender sınıfına erişime izin verebilecek herhangi bir mekanizmayı güvenilmeyen aramalara maruz bırakmadığınızdan veya örneklerinde herhangi bir değişiklik ve yapılandırma yapmadığınızdan emin olun.
  • Kullanılıyorsa, log4j yapılandırmasında JMSAppender’ı silin. JMSAppender sınıf path’ini silin:

zip -q -d log4j-*.jar org/apache/log4j/net/JMSAppender.class

Önemli not: Apache Log4j 1.2, Ağustos 2015’te kullanım ömrü sona ermiştir.

CHECKMARX SCA İLE LOG4SHELL TESPİTİ

Checkmarx SCA, açık kaynak bağımlılıklarında yukarıda bahsedilen Log4Shell güvenlik açıklarının hızlı ve kolay tespitini sağlar. Aşağıdaki ekran görüntüsü, savunmasız 3. parti bağımlılıklarına sahip kodun SCA tarama sonucunu göstermektedir.

SCA (Software Composition Analysis – Yazılım Kompozisyon Analizi) çözümleri, açık kaynaklı yazılım tüketen kuruluşlar için bir gerekliliktir. Checkmarx SCA, riskleri daha etkin bir şekilde belirlemek ve yönetmek için kuruluşunuzun SDLC’de daha önce açık kaynaklı güvenlik sorunlarını ele almasına imkan tanır.

Merve KOÇ
Siber Güvenlik Mühendisi

Endpoint Bilgi Teknolojileri Güvenliği ArGe A.Ş – 2021