Siber güvenlik dünyasında bazı zafiyetler vardır ki, sistemin en temelindeki "güven" ilişkisini suistimal eder. Bugün, popüler içerik yönetim sistemi (CMS) SPIP'i vuran ve CVSS skoru 9.8 (Kritik) olan CVE-2023–27372 zafiyetinin derinliklerine ineceğiz. Bu sadece bir kod hatası değil, modern web uygulamalarının veri işleme mantığındaki kritik bir boşluğun hikayesidir.
Zafiyetin Anatomisi: Neye Dayanıyor?
Bu zafiyetin temelinde, siber güvenlikçilerin korkulu rüyası olan Güvensiz Deserialization (Serisizleştirme) yatıyor. Ancak olayı sadece bir fonksiyon ismiyle geçiştirmeyelim.
SPIP, 4.2.1 öncesindeki sürümlerinde kullanıcıdan gelen verileri işlerken PHP'nin unserialize() fonksiyonuna güveniyordu. Normalde bu fonksiyon, bir veri katarını (string) alıp tekrar bir nesneye (object) dönüştürür. Sorun şu ki; PHP'de nesneler sadece veri taşımaz, aynı zamanda sihirli metodlar (magic methods) dediğimiz (örneğin __wakeup() veya __destruct()) ve nesne oluşturulduğunda ya da silindiğinde otomatik çalışan fonksiyonları da tetikleyebilir.
Zafiyetin "kalbi", SPIP'in form işleme mekanizmasında atıyor. Uygulama, formlardan gelen verileri (_oups gibi parametreler üzerinden) yeterince filtrelemeden doğrudan bu fonksiyona gönderiyordu. Bir saldırgan, bu sürece müdahale ederek sistemin normal akışında olmayan, kendi hazırladığı zararlı bir PHP objesini sisteme "enjekte" edebiliyor.
CVE‑2023‑27372 zafiyeti, OWASP Top 10 listesindeki "A05 — Security Misconfiguration / Güvensiz Yapılandırmalar ve A04 — Insecure Design / Güvensiz Tasarım" kategorileriyle doğrudan ilişkili olarak değerlendirilebilir. OWASP (Open Web Application Security Project), web uygulamaları için küresel ölçekte güvenlik rehberleri ve en kritik riskleri sıralayan bir organizasyondur. Bu zafiyet, SPIP'in form verilerini güvenli şekilde doğrulamaması ve unserialize() gibi tehlikeli fonksiyonları filtrelemeden kullanması nedeniyle, hem uygulama tasarımındaki eksik güvenlik önlemlerini hem de yapılandırma hatalarını gözler önüne seriyor. OWASP Top 10 bağlamında incelendiğinde, böyle bir açık, modern web uygulamalarında sıkça karşılaşılan ve kritik etkiler yaratabilen güvenlik hatalarından biridir.
Saldırı Senaryosu: Saldırganlar Neyi Hedefliyor?
Bir saldırganın bu zafiyetteki nihai hedefi, sistemin en üst düzey yetkisi olan Uzaktan Kod Çalıştırmaktır (RCE). Peki, bu süreç adım adım nasıl işler?
- Keşif ve Giriş Noktası: Saldırganın sisteme kayıtlı bir kullanıcı olması gerekmez (Unauthenticated). SPIP'in halka açık herhangi bir form alanı (iletişim sayfası, kayıt formu vb.) bu saldırı için bir giriş kapısıdır.
- Zehirli Verinin Hazırlanması: Saldırgan, PHP'nin serisizleştirme mantığını kullanarak bir "payload" hazırlar. Bu payload, dışarıdan bakıldığında basit bir metin gibi görünse de aslında içinde
system()veyapassthru()gibi PHP komutlarını barındıran bir yapıdır. - Tetikleme: Hazırlanan bu veri, bir HTTP isteğiyle sunucuya gönderilir. SPIP, bu veriyi "güvenli bir form verisi" sanıp
unserialize()işlemine soktuğu an, saldırganın gizlediği komutlar sunucunun işletim sisteminde çalışmaya başlar. - Sonuç (Impact): Saldırgan artık sunucuda bir
whoamikomutu çalıştırabilir, veritabanına sızabilir veya daha kötüsü, sunucuya tam erişim sağlayan bir Reverse Shell bağlantısı kurabilir.
Neden 9.8? Rakamların Arkasındaki Tehlike
CVSS (Common Vulnerability Scoring System) tablosunda 10 üzerinden 9.8 almak, bir zafiyetin "atom bombası" statüsünde olduğunu gösterir. Bu yüksek skorun üç ana sebebi vardır:
- Sıfır Etkileşim ve Sıfır Kimlik Doğrulama: Saldırganın kurbanı bir linke tıklamaya ikna etmesi gerekmez. Ayrıca sistemde yetkisi olmayan herhangi bir yabancı, dünyanın öbür ucundan bu saldırıyı gerçekleştirebilir.
- Düşük Saldırı Karmaşıklığı: Bu zafiyeti sömürmek için çok ileri düzey ağ bilgisine veya özel donanımlara gerek yoktur. Sadece zafiyetli parametreyi bulmak ve uygun payload'u göndermek yeterlidir.
- CIA Üçlüsünün Çöküşü: * Gizlilik (Confidentiality): Tüm veriler çalınabilir.
- Bütünlük (Integrity): Web sitesi içeriği değiştirilebilir veya silinebilir.
- Erişilebilirlik (Availability): Sistem tamamen kapatılarak erişilemez hale getirilebilir.
Sonuç ve Korunma
CVE-2023–27372, bize input (girdi) kontrolünün ne kadar hayati olduğunu bir kez daha hatırlatıyor. Yazılım geliştiriciler için altın kural şudur: "Kullanıcıdan gelen her veri zehirlidir." Eğer bir uygulama, bu veriyi "güvenlidir" varsayımıyla kritik fonksiyonlara (unserialize, eval, exec vb.) sokarsa, o kapı siber saldırganlar için ardına kadar açılmış demektir.
Eğer hala bir SPIP kullanıcısıysanız, sisteminizi derhal daha güncel bir sürüme yükseltmelisiniz. Unutmayın, siber güvenlikte en zayıf halka her zaman en kolay sömürülen noktadır.
Zafiyetin ne kadar tehlikeli olduğunu gözlemlemek isteyenler için HackViser sitesinin bir senaryosu olan" Vector: A " senaro çözümümü Github üzerinden paylaştım.
URL : https://github.com/Erdemcey/CTF_rapor/blob/main/Vector%3A%20A/Write_up.md