CVE-2017-5638: Apache Struts Remote Code Execution Vulnerability
Zorluk Seviyesi: Orta | Kaynak: CISA KEV
Zafiyet Analizi ve Giriş
CVE-2017-5638, Apache Struts framework'ü üzerinde bulunan ciddi bir güvenlik açığıdır ve uzaktan kod çalıştırma (RCE) imkanı tanır. 2017 yılında keşfedilen bu zafiyet, özellikle Jakarta Multipart parser'daki hatalı işlemden kaynaklanmaktadır. Bu zafiyet sayesinde, kötü niyetli bir saldırganın Content-Type başlığı aracılığıyla zararlı dosyalar yüklemesi ve bu dosyaların sunucu üzerinde çalıştırılması mümkün hale gelir. Bu durum, siber saldırganların sistem kontrolünü ele geçirmesine ve potansiyel olarak hassas verileri çalmasına olanak tanır.
Apache Struts, web uygulamaları için yaygın olarak kullanılan bir framework'tür ve özellikle MVC (Model-View-Controller) mimarisine dayanır. Bu framework, büyük çaplı kurumsal uygulamalarda sıklıkla kullanılmaktadır. Ancak, CVE-2017-5638 zafiyetinin ortaya çıkması ile birlikte, birçok kuruluşun güvenliği sorgulanmaya başlanmıştır. Özellikle finans, sağlık ve kamu sektörü gibi kritik veri işleyen alanlarda bu zafiyetin etkileri daha yıkıcı olmuştur.
Zafiyetin teknik kökeni, Apache Struts'ın dosya yükleme işlevini işleyen Jakarta Multipart parser'daki yanlış bir kontrol mekanizmasından kaynaklanıyor. İçerik tipi başlığı, dosyanın türünü belirtmekte kullanılırken, bu başlığın yeterince güvenli bir şekilde doğrulanmaması, saldırganların yüklemek istedikleri zararlı içeriklerin tanınmaması sonucunu doğurmuştur. Aşağıda, bu zafiyetin nasıl keşfedildiğine ve hedef alındığı sektörler üzerindeki etkisine dair bir örnek verilmiştir.
Bir gerçek dünya senaryosunda, bir e-ticaret web sitesi Apache Struts kullanıyordu. Saldırgan, bu zafiyetten faydalanarak sahte bir dosya yükleyerek sunucu üzerinde uzaktan kod çalıştırdı. Başlangıçta, saldırgan yalnızca belirli bir sistem dosyasına erişim sağladı; ancak, zamanla daha fazla yetkiye sahip olmayı başardı. Sonuç olarak, finansal bilgilere ulaşmak için web sunucusunu kontrol edebildi. Bu tür bir saldırı, sadece hedef alınan firma için değil, aynı zamanda kullanıcılarının verileri için de büyük bir risk taşımaktadır.
CVE-2017-5638’in etkileri, dünya genelinde birçok sektöre yayılmıştır. Bankacılık ve finans sektörü, bu tür açıkların keşfi ve kullanımıyla en çok zarar gören alanlardan biridir. Ayrıca, sağlık sektörü, hastaneler ve sağlık kuruluşlarına ait sistemlerin güvenlik açıkları nedeniyle hassas hasta verilerine erişim sağlanmasını risk altına sokmuştur. Devlet kurumları da, siber güvenlik zaafiyetleri nedeniyle kritik verilerin saldırganların eline geçmesini önlemek için sürekli olarak alt yapılarında güncellemeler yapmaya zorlanmışlardır.
Sonuç olarak, CVE-2017-5638 zafiyeti, işlevselliği yüksek olan bir framework'te büyük bir problem oluşturmuş ve birçok sektörde ciddi güvenlik ihlalleri yaşanmasına neden olmuştur. Geliştiricilerin bu tür zafiyetleri göz önünde bulundurarak uygulamalarını güvenli hale getirmek için gerekli önlemleri alması son derece önemlidir. Apache Struts gibi popüler kütüphanelerin her gün karşılaştığı yeni zafiyetlerle birlikte, yazılım geliştirme sürecinin başından itibaren güvenlik öncelikleri olarak düşünülmelidir.
Teknik Sömürü (Exploitation) ve PoC
CVE-2017-5638, Apache Struts ile ilişkili bir uzaktan kod yürütme (Remote Code Execution - RCE) zafiyetidir. Bu zafiyet, Jakarta Multipart parser'ından kaynaklanır ve kötü niyetli dosya yükleme yoluyla gerçekleşir. Zafiyetten faydalanarak saldırganlar, sunucuda zararlı komutlar çalıştırabilir. Bu tür bir zafiyet, web uygulamaları için ciddi bir tehdit oluşturur, çünkü sistemin kontrolünü tamamen ele geçirebilirler.
Zafiyetin temel noktası, dosya yükleme işlemi sırasında sunucunun içindeki içerik türü (Content-Type) header'ına aşırı güvenmesidir. Saldırgan, özel bir Content-Type header'ı belirleyerek, sunucu üzerinde zararlı bir kod parçasını yürütmeyi hayata geçirebilir. Bu özellikle, zafiyete sahip olan uygulamaların yeterli güvenlik önlemleri almadığı durumlarda tehlikeli bir şekilde ortaya çıkar.
Zafiyetin kötüye kullanılması süreci, aşağıdaki adımları içerir:
İlk olarak, zafiyete sahip bir Apache Struts uygulamasını tespit etmeniz gerekiyor. Bunun için genellikle uygulamanın veri yükleme alanlarına odaklanabilirsiniz. Uygulamanın yükleme alanında herhangi bir dosya yükleme yetkisi olup olmadığını kontrol edin.
İkinci adımda, HTTP isteklerini kullanarak, uygulama üzerindeki dosya yükleme kısmına kötü niyetli bir dosya gönderilmelidir. Bu aşamada, özellikle Content-Type header'ını değiştirmek kritik öneme sahiptir. Örnek bir HTTP isteği şu şekilde olabilir:
POST /upload HTTP/1.1
Host: hedef.site
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
Content-Length: 350
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="file"; filename="malicious.jsp"
Content-Type: application/x-javascript
<% Runtime.getRuntime().exec("id"); %>
------WebKitFormBoundaryABC123--
Bu istekte, “malicious.jsp” adlı bir dosya yüklenmektedir. Dosya içeriğinde ise zararlı bir Java kodu bulunmaktadır. Burada, Runtime.getRuntime().exec("id") komutunun çalıştırılması hedeflenmektedir; bu, sunucu üzerinde hangi kullanıcı ile çalışıldığını belirleyecek bir komuttur.
Üçüncü aşama, yüklenen dosyayı çalıştırmaktır. Eğer yükleme başarılı olduysa, ilgili JSP dosyasına erişerek sunucuda komutları çalıştırabilirsiniz. Örneğin, tarayıcıda şu URL’ye gidin:
http://hedef.site/uploads/malicious.jsp
Bu URL’ye erişim sağlandığında, sunucu üzerindeki zararlı kod çalışacak ve potansiyel olarak komutların çıkışını görebileceksiniz.
Son olarak, bu tür bir zafiyeti önlemek için sıkı güvenlik önlemleri alınmalıdır. Dosya yükleme alanlarında kullanıcı girdileri mutlaka validate edilmeli ve uygun güvenlik önlemleri (örneğin, dosya uzantısı kontrolü, MIME type doğrulaması) uygulanmalıdır. Zafiyetten etkilenmemek için Apache Struts sürüm güncellemeleri de dikkate alınmalıdır.
Apache Struts üzerindeki CVE-2017-5638 zafiyeti, disiplinli bir siber güvenlik analisti veya white hat hacker için çok önemli bir konudur. Zafiyetin keşfi ve kullanımı, güvenli yazılım geliştirme uygulamalarının önemini de vurgulamaktadır. Bu tür senaryolar, hem mevcut sistemlerin zayıflıklarını anlamak hem de güvenlik önlemlerini güçlendirmek için yol gösterici olmalıdır.
Forensics (Adli Bilişim) ve Log Analizi
CVE-2017-5638, Apache Struts uygulamalarında ciddi bir uzaktan kod çalıştırma (RCE - Remote Code Execution) açığına işaret etmektedir. Bu zafiyet, Jakarta Multipart parser'ın yanlış bir şekilde kullanılması neticesinde, kötü niyetli dosya yüklemelerine olanak tanımaktadır. Bu durum, siber saldırganların uzaktan herhangi bir komut çalıştırabilmesine yol açabilecek ciddi bir güvenlik açığıdır. Bu tür bir zafiyet, doğru şekilde tespit edilmediği takdirde, sistemin ele geçirilmesine veya hassas bilgilere erişime yol açabilir.
Siber güvenlik uzmanları, bu tür zafiyetlerin izlerini, özellikle SIEM (Security Information and Event Management - Güvenlik Bilgisi ve Olay Yönetimi) çözümleri ve log dosyalarını inceleyerek tespit edebilirler. Apache Struts kullanan bir web uygulamasında bu zafiyetin saldırıya maruz kaldığını anlamanın birkaç yolu bulunmaktadır.
Öncelikle, erişim logları (Access Logs) üzerinde inceleme yapılarak anormal içerik türleri ve dosya yükleme talepleri tespit edilmelidir. Örneğin, bir kullanıcıdan gelen HTTP isteklerinde, Content-Type başlığında beklenmedik veya şüpheli bir değer aramak faydalı olabilir. Normalde, bu başlık multipart/form-data olarak tanımlanmalıdır. Ancak, saldırganlar bu başlığı değiştirerek, zararlı payload'ları sisteme entegre etmeye çalışabilirler. Aşağıdaki gibi bir log kaydı örnek verilirse:
POST /upload HTTP/1.1
Host: vulnerable-site.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
Yukarıdaki örnekte, Content-Type başlığının düzgün olduğunu ancak yüklenen içeriğin detaylı bir şekilde incelenmesi gerektiğini belirtmektedir. Bu yüklemenin ardından sunucuda oluşan error log (hata logu) kayıtları da dikkatlice gözden geçirilmelidir. Sunucu, zafiyetten yararlanan bir saldırı sonucunda hatalar üretebilir. Örneğin, bir hata mesajı şu şekildedir:
ERROR: Unable to process multipart request
Bu tür hatalar, çok sayıda sunucu kaynaklı hatayı işaret edebilir ve zafiyetin kötüye kullanıldığına dair delil sağlayabilir.
Ayrıca, izlenmesi gereken diğer bir yöntem ise, gelen taleplerin kalıbını gözlemlemektir. TI (Threat Intelligence - Tehdit İstihbaratı) verileriyle senkronize olmuş SIEM sistemleri, bilinen kötü niyetli IP adreslerinden gelen talepleri işaretleyebilir. Genel olarak belirli bir IP adresinden gelen çok sayıda başvurunun tek bir URL’ye odaklanması, şüpheli bir aktivitenin göstergesi olabilir. Örneğin:
10.0.0.1 - - [10/Oct/2023:14:20:00 +0000] "POST /upload HTTP/1.1" 200 1234 "-" "Mozilla/5.0"
10.0.0.1 - - [10/Oct/2023:14:20:05 +0000] "POST /upload HTTP/1.1" 200 1234 "-" "Mozilla/5.0"
Aynı IP adresinden gelen bu tür art arda yazılan istekler, norm dışı bir davranışı işaret etmektedir. Genelde, her bir saldırıda olduğu gibi, dikkatli bir analizin ardından bu tür imzalar belirlenmeli ve takip edilmelidir.
Sonuç olarak, CVE-2017-5638 zafiyeti, siber güvenlik profesyonellerinin dikkatle izlemesi gereken önemli bir meseledir. Ancak, bu tür bir açığı tespit etmek ve önlemek için, log analizi ve forensics (adli bilişim) uygulamalarının önemine vurgu yapılmalıdır. Zafiyetlerin izini sürerken dikkat edilmesi gereken başlıca unsurlar, log dosyalarında şüpheli içeriklerin, exception (hata) mesajlarının ve IP adresi kalıplarının titizlikle incelenmesidir.
Savunma ve Sıkılaştırma (Hardening)
CVE-2017-5638 zafiyeti, Apache Struts framework'ünü etkileyen kritik bir uzaktan kod yürütme (RCE - Remote Code Execution) açığıdır. Bu açıktan yararlanan saldırganlar, kötü niyetli dosyaları yükleyerek sunucuda uzaktan komut çalıştırabilirler. Jakarta Multipart parser kullanılarak yapılan dosya yüklemelerinde, saldırganlar Content-Type başlığını manipüle ederek, sunucuya zararlı yüklerine geçiş yapabilir. Bu durum, hem veri hırsızlığına hem de sistemin tamamının kontrolünü ele geçirmeye neden olabilir.
Bu açığı kapatmanın ilk adımlarından biri, Apache Struts'ın güncellemelerinin takip edilmesidir. Apache, bu tür zafiyetler için düzenli olarak güvenlik güncellemeleri yayınlamaktadır. Bu nedenle, sistem yöneticilerinin, kullandıkları Struts sürümünü sürekli güncel tutmaları kritik bir adımdır. Örneğin, etkilenebilir sürümde iseniz aşağıdaki komutları kullanarak güncellemeyi sağlayabilirsiniz:
# Apache Struts güncelleme komutu
mvn versions:use-latest-versions
Alternatif olarak, zararlı yüklemelere karşı ek güvenlik katmanları eklemek de önemlidir. Web Uygulama Güvenlik Duvarı (WAF - Web Application Firewall) kullanmak, bu açığın etkilerini azaltabilir. Önerilen WAF kuralları, gelen dosya yükleme taleplerindeki Content-Type başlıklarını denetleyerek sadece belirli türde dosya yüklemelerine izin vermelidir. Örneğin:
{
"rules": [
{
"id": "91234",
"name": "File Upload Validation",
"conditions": [
{
"field": "HTTP_CONTENT_TYPE",
"operator": "IN",
"value": ["image/jpeg", "image/png", "application/pdf"]
}
],
"action": "deny"
}
]
}
Bu kural, yalnızca belirli dosya türlerine izin vererek saldırganların zararlı dosya yüklemelerini engelleyebilir. Böylelikle, sistemin güvenliği artırılmış olur.
Kalıcı sıkılaştırma önerileri açısından, dosya yüklemeleri için sunucu tarafında eklemeler yapmak da faydalıdır. Örneğin, dosyaların yüklenmeden önce belirli bir dizine geçici olarak kaydedilmesi ve daha sonra içeriklerinin taranması sağlanabilir. Bu tür bir süreç, kötü niyetli içeriklerin tespit edilip önceden engellenmesini kolaylaştırır. Aşağıdaki PHP kodu, yüklenen dosyanın içeriğini taramak için kullanılabilir:
$uploadedFile = $_FILES['uploadedFile']['tmp_name'];
if (preg_match('/<\?php/', file_get_contents($uploadedFile))) {
throw new Exception("Kötü niyetli dosya yüklemesi tespit edildi!");
}
Son olarak, kullanıcı girdilerini daima doğrulamak ve sanitize etmek (güvenli hale getirmek), hem RCE ve benzeri açılara karşı önemli bir kalkan sağlayacaktır. Apache Struts'da veri girişi kontrolü sağlamak için geliştirilmiş olan validator özelliğini aktif hale getirmek, olası saldırılara karşı sistemin direncini artırabilir.
Sonuç olarak, CVE-2017-5638 gibi zayıf noktalarla başa çıkmak için sistem yöneticilerinin dikkatli olması ve düzenli güncellemeler, WAF yapılandırmaları, dosya tarama sistemleri ve veri doğrulama uygulamaları gibi önlemleri alması gereklidir. Bu tür proaktif yaklaşımlar, siber saldırılara karşı sistemin dayanıklılığını artırarak güvenli bir ortam oluşturacaktır.