Hızlı cevap: XXE (XML External Entity, XML dış varlık enjeksiyonu), bir uygulamanın kullanıcıdan gelen XML verisini güvensiz biçimde işlemesi sonucu, saldırganın sunucudaki dosyaları okuyabilmesi, iç ağı tarayabilmesi ve bazı durumlarda uzaktan kod çalıştırabilmesidir. XML formatı, belge içinde "dış varlık" tanımlamaya izin verir; güvensiz bir ayrıştırıcı bu tanımı işlerse, saldırgan uygulamaya kendi sunucusundaki ya da yerel sistemdeki bir dosyayı okutabilir. Örneğin bir dış varlık, sunucudaki parola dosyasına işaret edecek şekilde tanımlanabilir. Kök çözüm tek cümledir: XML ayrıştırıcısında dış varlık ve DTD işlemeyi kapatmak.

XXE, OWASP Top 10 listesinin klasik bir üyesidir ve XML kullanan her yerde, SOAP servislerinde, dosya yükleme akışlarında, hatta bazı belge formatlarında karşımıza çıkar. Adı teknik gelse de mantığı basittir: uygulama XML'e fazla güvenir. Bu yazıda XXE'nin nasıl çalıştığını, hangi savunmaların gerçekten işe yaradığını ve nasıl test edildiğini anlatıyoruz.

XXE nasıl çalışır

XML belgeleri, DTD (Document Type Definition) adı verilen bir bölümde "varlık" tanımlayabilir. Varlık, belge içinde kısaltma gibi kullanılan bir yer tutucudur. Sorun, bir varlığın dış bir kaynağa (bir dosya yoluna ya da bir adrese) işaret edecek şekilde tanımlanabilmesidir. Güvensiz bir ayrıştırıcı bu dış varlığı çözerken:

  • Sunucudaki yerel bir dosyayı okur ve içeriğini yanıta yansıtır.
  • Uygulamaya, saldırganın belirlediği bir iç adrese istek yaptırır. Bu, SSRF ile birleşerek iç ağı hedef alır.
  • Çok sayıda iç içe varlık tanımıyla belleği tüketip hizmeti durdurur.

Kritik nokta: uygulama XML'i sadece "veri" sanır, ama güvensiz ayrıştırıcı onu "yapılacaklar listesi" gibi çalıştırır.

XXE türleri

Tür Belirti Etki
Klasik (yansıyan) Dosya içeriği yanıtta görünür Bilgi ifşası
Kör (blind) Çıktı görünmez ama varlık çözülür Dışa veri sızdırma
SSRF üzerinden İç adrese istek gider İç ağ keşfi
Hizmet reddi İç içe varlık bombası Sunucu çökmesi

Kör XXE özellikle tehlikelidir: çıktı görünmese bile, saldırgan dış varlığı kendi sunucusuna veri gönderecek şekilde kurgulayıp dosya içeriğini dışarı taşıyabilir.

Doğru savunma

1. Dış varlık ve DTD işlemeyi kapatın

En güçlü ve kesin savunma budur. Uygulamanın kullandığı XML ayrıştırıcısında dış varlık çözümü ve DTD işleme kapatılmalıdır. Çoğu XML işleme kütüphanesi bu ayarı destekler; kapatıldığında XXE kökten imkansız hale gelir.

2. Mümkünse XML yerine daha basit format

Yeni geliştirmelerde, karmaşık XML yerine daha sade veri formatları tercih edilirse XXE yüzeyi tamamen ortadan kalkar. Var olan XML uçları içinse ayrıştırıcı sıkılaştırması şarttır.

3. Girdi doğrulama ve en az yetki

XML kabul eden uçlar katı doğrulanmalı, uygulamanın çalıştığı hesap yalnızca ihtiyacı olan dosyalara erişebilmelidir. Böylece bir açık olsa bile ulaşılabilecek alan daralır.

4. Kütüphaneleri güncel tutun

Eski XML kütüphaneleri güvensiz varsayılanlarla gelebilir. Güncel sürümler çoğunlukla dış varlığı varsayılan olarak kapatır; bu da güvenlik yanlış yapılandırması yönetiminin parçasıdır.

KAOS ile XXE taraması

XML kabul eden uçlardaki XXE açıklarını, DSET'in yapay zekâ destekli otonom güvenlik tarama motoru KAOS ile ölçekli biçimde tarıyoruz. KAOS çok-ajanlı mimarisiyle XML işleyen uçları keşfeder, dış varlık çözümünün açık olup olmadığını kontrollü ve zararsız bir yükle dener ve bir dosyaya erişebildiğini ya da dışarı sinyal alabildiğini gösterebildiğinde bunu doğrular; yalnızca kanıtlanmış bulguyu raporlar. Böylece klasik tarayıcıların ürettiği yanlış pozitif yığını yerine az ama gerçek bulgu elde edersiniz. KAOS insan uzmanın yerine değil yanında çalışır ve her bulguyu çalışan bir kanıtla belgeler.

Sık sorulan sorular

XXE sadece dosya mı okur? Hayır. Dosya okumanın yanında iç ağa istek yaptırabilir (SSRF), hizmeti durdurabilir ve bazı yapılandırmalarda kod çalıştırmaya kadar gidebilir.

XML kullanmıyorsam risk var mı? Doğrudan XML almasanız bile, bazı belge ve dosya formatları içeride XML kullanır. Bu dosyaları işleyen uçlar da XXE'ye açık olabilir.

Dış varlığı kapatmak bir şeyi bozar mı? Çoğu uygulama dış varlık kullanmaz; kapatmak işlevi bozmaz, yalnızca tehlikeli özelliği devre dışı bırakır. Güvenli varsayılan budur.

Kör XXE nasıl fark edilir? Çıktı görünmese bile, dış varlık saldırganın sunucusuna istek yapacak şekilde kurgulanır; gelen istek açığı kanıtlar.

Kaynaklar

Uygulamanızdaki XXE ve XML işleme açıklarını KAOS ve uzman ekibimizle çalışan kanıtla tespit ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi hizmeti veriyoruz.