CVE-2020-1938 · Bilgilendirme

Apache Tomcat Improper Privilege Management Vulnerability

Apache Tomcat'te AJP bağlantılarındaki zafiyet, saldırganlar için önemli bir risk teşkil ediyor.

Üretici
Apache
Ürün
Tomcat
Seviye
yüksek
Yayın Tarihi
04 Nisan 2026
Okuma
9 dk okuma

CVE-2020-1938: Apache Tomcat Improper Privilege Management Vulnerability

Zorluk Seviyesi: Orta | Kaynak: CISA KEV

Zafiyet Analizi ve Giriş

CVE-2020-1938, Apache Tomcat üzerinde meydana gelen bir güvenlik açığını temsil etmektedir. Bu zafiyet, Apache JServ Protocol (AJP) bağlantılarına ilişkin güvenlik yönetiminde yapılan bir yanlışlık sonucu ortaya çıkmaktadır. AJP, Tomcat sunucularının web sunucuları ile etkileşimde bulunduğu bir protokoldür ve varsayılan olarak daha yüksek bir güven seviyesine sahip olduğu düşünülmektedir. Ancak, bu durum kötü niyetli bir saldırgana, bu bağlantıların yan etkilerinden yararlanarak sistemdeki kaynaklara izinsiz erişme imkanı tanıyabilir.

Zafiyetin teknik detaylarına bakıldığında, AJP bağlantılarının güvenliğinin sağlanmasında kullanılan JWT (JSON Web Token) veya API anahtarı gibi kimlik doğrulama mekanizmalarının eksik olduğu görülebilir. Saldırgan, AJP bağlantılarını kullanarak yetkisiz erişim elde ettikten sonra sistem üzerinde çeşitli kötü niyetli eylemler gerçekleştirebilir; örneğin, Remote Code Execution (RCE - Uzaktan Kod Çalıştırma) gibi ağır zafiyetler oluşturabilir. Bu tür açıklar, çoğu zaman sistem yöneticilerinin ve geliştiricilerin fark etmeksizin sistemlerinin içine sızmasına yol açar.

Gerçek dünya senaryolarında, bu zafiyet özellikle büyük web uygulamaları ve e-ticaret siteleri üzerinde etkili olmuştur. Örneğin, bir online alışveriş platformu, Apache Tomcat kullanarak çalışıyorsa, AJP bağlantısına esnek bir yapı sağlayan köprüler üzerinden saldırılara maruz kalabilir. Saldırgan, herhangi bir geçerli AJP bağlantısı üzerinden sistemin arka planda çalışan bir uygulamasına sızarak, müşteri bilgilerine veya ödeme kayıtlarına ulaşabilir. Bu da veri sızıntısına yol açarak ciddi sonuçlar doğurabilir.

CVE-2020-1938 zafiyeti, çeşitli sektörleri etkileyen genel bir tehdit olarak öne çıkmıştır. Özellikle finans, sağlık ve eğitim alanlarında sıkça kullanılan Apache Tomcat altyapısı, zafiyetin istismarının sonuçlarını en ağır hisseden sektörlerden olmuştur. Veri güvenliği ve kullanıcı mahremiyeti günlük yaşamda kritik bir öneme sahiptir. Dolayısıyla, bu zafiyetin geniş bir kitle tarafından bilinmesi ve önlem alınması gerekir.

Apache Tomcat üzerinde CVE-2020-1938 zafiyetine karşı alınabilecek önlemler arasında, AJP bağlantılarının güvenli bir şekilde yönetilmesi ve yalnızca güvenilir kaynaklardan gelen isteklerin kabul edilmesi bulunmaktadır. Bu bağlamda, organizasyonların kendi altyapılarında güvenlik denetimleri yapması, gerektiğinde yazılım güncellemelerini uygulaması ve sistem yapılandırmalarını gözden geçirmesi büyük önem taşır.

Sonuç olarak, bu tür zafiyetler, güvenlik açığı yönetimi ve sızma testleri (pen test) süreçlerinin önemini bir kez daha ortaya koymaktadır. "White Hat Hacker" (Beyaz Şapkalı Hacker) olarak, bu zafiyetlerin zamanında tespit edilmesi ve gerekli önlemlerin alınması, hem bireysel kullanıcıların hem de büyük organizasyonların veri güvenliğini korumak açısından kritik bir rol oynamaktadır. Zafiyete dair farkındalığın artırılması ve sürekli eğitim, güvenlik tehditlerine karşı en etkili savunma hattını oluşturacaktır.

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

Apache Tomcat üzerinde bulunan CVE-2020-1938 zafiyeti, saldırganların Apache JServ Protocol (AJP) bağlantılarını kötüye kullanarak sistemdeki verilere erişim sağlamasına olanak tanımaktadır. Bu zafiyetin sömürülmesi, özellikle güvenli olmayan bir ağda, dışarıdan gelen anonim bağlantıların aşırı güvenli bir şekilde kabul edilmesi durumunda kritik bir tehdit oluşturur. AJP'nin normalde iç ağlarda kullanılması beklenirken, yanlış yapılandırmalar sayesinde bu protokol dışarıdan erişime açık hale gelebilir.

Sömürü aşamalarını inceleyerek daha iyi anlayabiliriz. İlk olarak, potansiyel bir saldırgan, hedef sistemin AJP bağlantı noktalarını taramak için standart bir port tarayıcı aracı kullanabilir. Genellikle AJP, 8009 numaralı port üzerinden çalışır, bu nedenle tarayıcı şu komutu kullanabilir:

nmap -p 8009 <hedef_ip>

Eğer tarama sonuçları bu portun açık olduğunu gösteriyorsa, saldırgan artık AJP üzerinden iletişim kurmaya hazıdır. İkinci aşamada, AJP ile iletişim başlatmak için gereken temel isteği oluşturmamız gereklidir. AJP istemcisi olarak işlev görebilen bir Python betiği yazabiliriz. Bu betik, önceden açılmış bir AJP bağlantısı üzerinden sunucuya istek gönderecektir.

Python ile basit bir AJP istemcisi aşağıdaki gibi görünebilir:

import socket

def ajp_request():
    HOST = '<hedef_ip>'
    PORT = 8009
    buffer = bytearray()

    # AJP istek başlatılıyor
    buffer.extend(b'\x12\x34\x00\x00')  # AJP header
    buffer.extend(b'\x01')              # AJP/1.3
    buffer.extend(b'\x00\x0C')          # İstek uzunluğu
    buffer.extend(b'GET')                # HTTP metodu
    buffer.extend(b'/manager/html')      # Hedef URI
    buffer.extend(b'\x00')               # Sonlandırıcı

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        s.connect((HOST, PORT))
        s.sendall(buffer)
        data = s.recv(1024)
        print('Aldığınız Cevap:', data)

ajp_request()

Bu temel betik, hedef sunucuya AJP üzerinden bir istek gönderir. Bunu yaptığımızda, sunucu, AJP protokolü üzerinden daha önce yapılandırılmış herhangi bir HTTP takip kontrolüne göre yanıt verebilir. Eğer doğru yapılandırılmamışsa, bu tür bir istek, yetkilendirme kontrolü atlatılmasına (Auth Bypass) ve dolayısıyla, sunucunun yönetim paneline erişim sağlanmasına yol açabilir.

Üçüncü aşamada, eğer yönetim paneline erişim kazanılmışsa, sistem üzerinde RCE (Uzak Kod Çalıştırma - Remote Code Execution) yönünde daha fazla araştırma yapabiliriz. Bu, uzaktan zararlı kodların yüklenmesi ve çalıştırılmasını sağlamak için kullanılabilecek kritik bir adım olacaktır. Yönetim paneli üzerinden dosya yükleme özelliklerini ele geçirmek, saldırganların sistem üzerinde tam kontrol sağlaması açısından olanak tanır.

Bu tür bir saldırının gerçekleştirilmesi durumunda, elde edilen kontrol ile birlikte, sistemin yapılandırmaları değiştirilebilir, veritabanına erişim sağlanabilir, kritik bilgiler sızdırılabilir veya sistem tamamen ele geçirilebilir. Özellikle büyük ölçekli organizasyonlarda, bu tür bir güvenlik açığı ciddi sonuçlar doğurabilir; bu yüzden sistem yöneticilerinin bu tür zafiyetleri önceden tespit edip, gerekli yapılandırmaları yapması büyük öneme sahiptir.

Sonuç olarak, Apache Tomcat'teki CVE-2020-1938 zaafiyeti, AJP protokolünün yanlış yapılandırılması sonucu ortaya çıkan ve saldırganlara çeşitli kötü niyetli eylemler gerçekleştirmelerine imkan tanıyan bir güvenlik açığıdır. Bu zafiyetin kapatılması adına, AJP protokolünün yalnızca güvenli ağ içinde ve güvenilir kaynaklarla kullanılması önerilmektedir.

Forensics (Adli Bilişim) ve Log Analizi

CVE-2020-1938 zafiyetine ilişkin olarak, Apache Tomcat’ın AJP (Apache JServ Protocol) bağlantılarına uyguladığı yanlış bir yetkilendirme yönetimi bulunuyor. Bu durum, kötü niyetli bir saldırganın AJP bağlantılarını kullanarak sunucuye erişim sağlaması veya mevcutse bu bağlantıları kötüye kullanmasıyla sonuçlanabilir. Bu tür bir zafiyetle başa çıkabilmek için, siber güvenlik uzmanlarının adli bilişim ve log analizi açısından süreci iyi anlaması gerekmektedir.

Bir siber güvenlik uzmanı, Apache Tomcat sunucusunda CVE-2020-1938 zafiyetinin istismar edildiğine dair izleri tespit edebilmek için zamanında ve doğru bir şekilde log analizi yapmalıdır. İlk olarak, SIEM (Security Information and Event Management) sistemleri üzerinden toplanan log verilerine göz atmak gerekir. Özellikle erişim logları (Access log) ve hata logları (Error log) bu bağlamda kritik öneme sahiptir. AJP bağlantılarıyla ilgili anormal aktiviteleri tespit etmek için aşağıdaki adımlar izlenebilir:

  1. Logları İnceleme: Apache Tomcat erişim loglarında, AJP üzerinden gelen isteklere ait kayıtları dikkatlice incelemek gerekir. Normal HTTP isteklerinin dışında, AJP isteklerinin kaydedildiği satırları filtrelemek faydalı olacaktır. AJP bağlantıları genellikle belirli bir port üzerinden çalışmakta ve bu port 8009 olabilmektedir. Örneğin:
   127.0.0.1 - - [12/Oct/2021:10:15:32 +0000] "AJP/1.3 200" ...

Yukarıdaki örnekte, AJP üzerindeki bir isteğin kaydı görülmektedir. Şayet burada şüpheli bir kullanıcı veya IP adresi varsa, bu durum üzerinde durulmalıdır.

  1. Anormal Davranışların Aranması: Normalde beklenmeyen, yüksek erişim sayıları veya belirli saat dilimlerinde yapılan erişimler dikkat çekici olabilir. Özellikle, yalnızca yerel IP'lerden (localhost) gelen AJP isteklerinde anormal bir artış, sistemin aktif olarak istismar edildiğine dair bir gösterge olabilir.

  2. İmza Analizi: Log analizi sırasında izlenmesi gereken temel imzalar arasında AJP bağlantılarına ait isteklere odaklanmak önemlidir. Özellikle, kötü niyetli girişimlerin belirleyici belirtileri olan anormal yöntem tanımları, örneğin POST / veya diğer HTTP metodları içeren istekleri, derhal incelenmesi gereken unsurlardır.

  3. Hata Loglarının İncelemesi: Apache Tomcat hata logları, sistemde meydana gelen hataların kaydını tutar. Eğer AJP bağlantıları üzerinden sistemde beklenmeyen bir şekilde hatalar alıyorsanız, bu durum bir zafiyetin suistimal edilmekte olduğuna işaret edebilir. Örneğin:

   org.apache.catalina.connector.CoyoteAdapter service

bu tür hataların loglarda yer alması sistemin olumsuz etkileşimleri hakkında bilgi verebilir.

  1. Log Tabanlı Saldırı Tespit Sistemleri (IDS/IPS): AJP protokolü üzerinden gelen ve olası bir RCE (Remote Code Execution - Uzak Kod Çalıştırma) veya başka istismar girişimlerine karşı özel ayarlar yaparak dublikat (duplicate) veya anlamsız veri gönderen bağlantıları tespit eden imzalar oluşturulabilir.

Sonuç olarak, bir siber güvenlik uzmanının CVE-2020-1938 zafiyetine ilişkin saldırıları tespit edebilmesi, etkili bir log analizi ve SIEM kullanımı gerektirir. Özellikle, AJP üzerinden gelen isteklerin detaylı bir şekilde incelenmesi ve anormal davranışların izlenmesi, siber güvenlik olaylarının önlenmesinde kritik bir rol oynamaktadır. Zafiyetten haberdar olmak ve daha sonrasında olası zararları en aza indirmek için sürekli bir izleme ve hızlı müdahale mekanizmalarının geliştirilmesi gerekmektedir.

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

Apache Tomcat, web uygulamaları için popüler bir sunucu ve servlet konteyneridir. Ancak, 2020 yılında yayımlanan CVE-2020-1938 zafiyeti, Apache JServ Protocol (AJP) bağlantılarının, benzer HTTP bağlantılarına kıyasla daha yüksek bir güven derecesine sahip olarak değerlendirilmesi nedeniyle oluşan bir güvenlik açığının varlığını ortaya koydu. Bu durum, kötü niyetli bir saldırganın AJP üzerinden sunucuya saldırması durumunda önemli bir risk ortaya çıkarmaktadır. Tomcat'in AJP bağlantılarını daha yüksek bir güven derecesiyle ele alması, bir saldırganın bu kanalı kullanarak yetkisiz erişim sağlamasına ve kritik verilere ulaşmasına olanak tanır.

Bu zafiyet, özellikle saldırganların dışarıdan AJP’yi erişebileceği bir ortamda ciddi sonuçlar doğurabilir. Örneğin, bir saldırganın AJP üzerinden Apache Tomcat'e erişim sağladığını düşünelim. Bu durumda, saldırgan, uzaktan kod çalıştırma (Remote Code Execution - RCE) veya yetkisiz erişim (Auth Bypass) gibi kötü niyetli faaliyetlerde bulunabilir. Dolayısıyla, bu açığın kapatılması ve Tomcat sunucularının sıkılaştırılması kritik bir öneme sahiptir.

Zafiyetin kapatılması için öncelikle Apache Tomcat'in güncel sürümünün kullanılması gerektiği vurgulanmalıdır. Tomcat'in yeni sürümleri, bu zafiyeti gideren yamalar içermektedir. Aşağıdaki adımları takip ederek zafiyeti kapatma sürecine başlayabilirsiniz:

  1. Güncelleme: Apache Tomcat’in en son sürümünü indirip kurarak mevcut sürümdeki zafiyetleri kapatmalısınız. Tomcat’in güvenlik güncellemelerini takip etmek, bilinen zafiyetlere karşı korunmanızı sağlar.

  2. AJP’yi Devre Dışı Bırakma: Eğer AJP kullanımına ihtiyacınız yoksa, bu protokolü tamamen devre dışı bırakmanız en etkili çözüm olacaktır. Bunun için server.xml dosyasında AJP bağlantısını etkin bir şekilde kaldırmalısınız:

   <Connector port="8009" protocol="AJP/1.3"
              redirectPort="8443" 
              maxThreads="150" 
              minSpareThreads="25"
              enableLookups="false" 
              acceptCount="100" 
              scheme="http" 
              secure="false" 
              socketTimeout="20000" 
              URIEncoding="UTF-8" />
  1. Firewall ve Web Application Firewall (WAF) Kuralları: Hem donanım tabanlı hem de yazılım tabanlı güvenlik önlemleri kullanmak gereklidir. Örneğin, bir WAF kullanarak AJP bağlantılarını filtreleyebilir ve sadece belirli IP adreslerinden gelen trafiği kabul edebilirsiniz. Aşağıdaki gibi bir WAF kuralı oluşturabilirsiniz:
   SecRule REMOTE_ADDR "@ipMatch 192.168.1.0/24" \
   "id:1000001,phase:1,pass,nolog,ctl:requestBodyProcessor=URLENCODED"

Bu örnek, yalnızca 192.168.1.0/24 ağından gelen IP adreslerine izin verir.

  1. Yetkilendirme ve Erişim Kontrollerini Güçlendirme: Tomcat uygulamanızda yer alan kullanıcı ve yetki yönetimini gözden geçirin. Kullanıcılara verilmiş en düşük gerekli yetkileri tanımlayın ve potansiyel olarak zafiyet taşıyan uygulama bileşenlerine erişimi sınırlandırın. Bu, bir saldırganın kötü amaçlı faaliyetlerde bulunmasını zorlaştıracaktır.

  2. Güvenlik İzleme ve Loglama: Sunucu aktivitelerini sürekli izlemek, olası saldırıların erken tespiti için kritik öneme sahiptir. Loglama işlemlerinizi düzgün gerçekleştirin ve olağan dışı aktiviteleri takip edin. Ossec, Splunk veya ELK Stack gibi araçlar, olay izleme için etkili çözümler sunabilir.

Sonuç olarak, Apache Tomcat üzerindeki CVE-2020-1938 zafiyetinin üstesinden gelmek için birden fazla sağlam yöntem bulunmaktadır. Sunucularınızın güvenliğini sağlamak için güncellemeleri düzenli olarak yapmalı, AJP gibi gereksiz protokolleri devre dışı bırakmalı ve katı güvenlik politikaları uygulamalısınız. Bu tür önlemler, sistemlerinizi güvenli tutmanın yanı sıra, gelecekte karşılaşabileceğiniz çeşitli güvenlik açıklarına karşı önlem almanıza da yardımcı olacaktır. Her zaman güncel kalmak ve güvenlik alışkanlıklarını düzenli olarak gözden geçirmek, bilgi güvenliğiniz için en iyi yoldur.