SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Kayıtlar

Kategori XML Enjeksiyonu / Ayrıştırıcı Yanlış Yapılandırması
Tipik Önem Derecesi Yüksek
OWASP A05:2021 – Güvenlik Yanlış Yapılandırması
CWE CWE-611 – XML Dış Varlık Referansının Hatalı Kısıtlanması
Diğer adları XXE, XML Dış Varlık Saldırısı, DTD Enjeksiyonu, XML Varlık Genişletme
Etkilenen sistemler XML girdisini ayrıştıran tüm uygulamalar — web servisleri, REST/SOAP API'ları, dosya yükleme işlemcileri, belge ayrıştırıcılar ve ara yazılımlar
İlgili zayıflıklar CWE-918 (SSRF), CWE-776 (Billion Laughs / DTD Özyinelemesi), CWE-200 (Hassas Bilgi İfşası)

Genel Bakış

XML Dış Varlık (XXE) enjeksiyonu, Document Type Definition (DTD) içinde tanımlanan dış varlık bildirimlerini işleyecek şekilde yapılandırılmış XML ayrıştırıcılarını hedef alan bir saldırı sınıfıdır. Bir saldırgan XML girdisini sağlayabildiğinde veya üzerinde etki edebildiğinde, yerel bir dosya yolu, dahili ağ uç noktası ya da uzak URL gibi harici bir kaynağa başvuran özel bir varlık tanımlayabilir ve ayrıştırıcının bu kaynağı getirerek ayrıştırılan belgeye gömmesine neden olabilir.

XXE güvenlik açıkları, XML 1.0 spesifikasyonunun modülerlik amacıyla dış varlıkları meşru olarak desteklemesinden kaynaklanmaktadır. Modern uygulamaların büyük çoğunluğunun bu özelliğe ihtiyacı yoktur; ancak pek çok XML kütüphanesi onu varsayılan olarak etkinleştirir ve kullanıcı tarafından kontrol edilen XML açık bir sertleştirme yapılmadan ayrıştırıldığında saldırı yüzeyi oluşturur.

Sensagraph, XML kabul eden uç noktalarda hazırlanmış DTD yükleri enjekte ederek ve bant dışı veri sızdırma kanalları dahil olmak üzere ayrıştırıcı davranışını gözlemleyerek XXE açıklarını otomatik olarak test eder.

Nasıl çalışır?

XML spesifikasyonu, belgelerin ayrıştırma sırasında ayrıştırıcının içerikle değiştirdiği adlandırılmış referanslar olan varlıkları bildirmesine olanak tanır. Dış varlıklar, ayrıştırıcıyı URI kullanarak harici bir kaynağa yönlendirerek bunu genişletir:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<root>&xxe;</root>

Ayrıştırıcı dış varlığı çözümlerse, /etc/passwd içeriği belge gövdesine yerleştirilir ve potansiyel olarak saldırgana sunucu yanıtında yansıtılır.

Yaygın XXE saldırı varyantları

  • Klasik (bant içi) XXE: Çözümlenen varlık değeri doğrudan uygulama yanıtında yansıtılır ve doğrudan dosya okumaya olanak tanır.
  • Hata tabanlı XXE: Ayrıştırıcı, yanıt gövdesi yansıtılmasa bile hata mesajları aracılığıyla sızan hassas veriler içeren bir ayrıştırma hatası tetikler.
  • Bant dışı (OOB) XXE / Kör XXE: Ayrıştırıcı, sızdırılan verileri saldırgan tarafından kontrol edilen bir sunucuya taşıyan giden HTTP veya DNS isteği yapar; yanıt saldırgana hiçbir zaman gösterilmediğinde kullanışlıdır.
  • XXE aracılığıyla SSRF: Dış varlık URI'si dahili bir ağ kaynağını (örn. bulut örneklerinde http://169.254.169.254/latest/meta-data/) hedef alır ve internet üzerinden erişilemeyen servislere ulaşmak için sunucu taraflı istek sahteciliği sağlar.
  • Billion Laughs (XML Varlık Genişletme / DoS): İç içe varlık referansları üstel olarak genişler ve ayrıştırıcı belleğini ile CPU'sunu tüketerek CWE-776 kapsamında ayrı olarak ele alınır.
  • XInclude saldırıları: Tam DTD kontrolü mevcut olmadığında saldırganlar, ayrıştırıcı XInclude işlemeyi destekliyorsa dış dosyaları dahil etmek için XInclude direktiflerini kullanabilir.
  • Dosya yükleme yoluyla XXE: XML tabanlı dosya formatları (SVG, DOCX, XLSX, ODT, RSS beslemeleri) kötü amaçlı DTD bildirimleri taşıyabilir; sunucu bunları dosya işleme sırasında ayrıştırır ve geliştirici XML'in dahil olduğunun farkında olmayabilir.

Ayrıştırıcıların neden savunmasız olduğu

  • Pek çok XML kütüphanesi (Java'nın DocumentBuilderFactory'si, Python'ın xml.etree / lxml'i, PHP'nin SimpleXML / DOMDocument'i, .NET'in XmlDocument'i) varsayılan olarak dış varlık çözümlemesini etkinleştirir ya da tarihsel olarak etkinleştirmiştir.
  • Bir bileşenin XML işlediğinden habersiz olan geliştiriciler (örn. SAML kütüphanesi, OpenDocument ayrıştırıcısı veya SOAP çerçevesi) bu bileşene sertleştirme uygulamayabilir.
  • Şema doğrulaması XXE'yi engellemez — varlık şema doğrulaması gerçekleşmeden önce çözümlenir.

İş etkisi

Başarılı bir XXE saldırısı, sunucu ortamına ve ayrıştırıcı özelliklerine bağlı olarak ciddi sonuçlar doğurabilir:

  • Hassas dosya ifşası: /etc/passwd gibi sistem dosyalarının, uygulama yapılandırma dosyalarının, özel anahtarların ve sunucu dosya sisteminde depolanan kimlik bilgilerinin okunması.
  • Kimlik bilgisi ve sır hırsızlığı: Kaynak kodu, API anahtarları, veritabanı bağlantı dizeleri ve bulut sağlayıcı meta veri servisi belirteçlerinin tamamına yerel dosya URI'leri veya SSRF aracılığıyla ulaşılabilir.
  • Dahili ağ keşfi: XXE aracılığıyla SSRF, saldırganların dahili ana bilgisayarları araştırmasına, açık portları listelemesine ve dahili yönetim panelleri, Kubernetes API'leri veya bulut meta veri uç noktaları gibi servislere erişmesine olanak tanır.
  • Uzaktan kod yürütme: Belirli yapılandırmalarda (örn. expect:// URI desteği olan PHP veya belirli Java ayrıştırıcıları) XXE, RCE'ye yükselebilir.
  • Hizmet reddi: Billion Laughs ve benzeri yükler ayrıştırıcı sürecini çökertebilir veya ciddi ölçüde bozabilir.
  • Uyumluluk ihlalleri: XXE aracılığıyla kişisel verilere yetkisiz erişim, GDPR, HIPAA, PCI-DSS veya benzeri düzenlemeler kapsamında bir ihlal teşkil edebilir ve bildirim yükümlülükleri ile olası para cezalarını tetikleyebilir.

Nasıl düzeltilir?

  1. XML ayrıştırıcısında dış varlık işlemeyi devre dışı bırakın (birincil kontrol): Ayrıştırıcıyı dış varlıkları ve DTD işlemeyi tamamen reddedecek şekilde yapılandırın. Tam API dil ve kütüphaneye göre değişir:
    • Java (DocumentBuilderFactory): http://apache.org/xml/features/disallow-doctype-decl özelliğini true olarak ayarlayın ya da http://xml.org/sax/features/external-general-entities ve http://xml.org/sax/features/external-parameter-entities özelliklerini devre dışı bırakın.
    • Python (lxml): etree.XMLParser(resolve_entities=False, no_network=True) kullanın; güvenilmez girdi için eski sürümlerde varlıkları temiz biçimde devre dışı bırakma desteği olmayan xml.etree.ElementTree'den kaçının.
    • PHP: libxml_disable_entity_loader(true) çağrısı yapın (PHP < 8.0) ya da LIBXML_NOENT bayraklarını dikkatli kullanın; ağ erişimini engellemek için LIBXML_NONET tercih edin.
    • .NET: XmlReaderSettings.DtdProcessing = DtdProcessing.Prohibit ve XmlReaderSettings.XmlResolver = null olarak ayarlayın.
    • Node.js: Varlık genişletmesi devre dışı bırakılmış fast-xml-parser gibi kütüphaneleri tercih edin; dış varlık desteğiyle libxmljs kullanmaktan kaçının.
  2. Mümkün olan durumlarda daha az karmaşık veri formatları kullanın: Kullanım durumu karışık içerik veya ad alanları gibi XML özelliklerini gerektirmiyorsa XML'i, dış varlık kavramı bulunmayan JSON, Protocol Buffers veya MessagePack ile değiştirin.
  3. İzin listesi giriş doğrulaması uygulayın: Uygulamanızın buna özel ve kontrollü bir ihtiyacı olmadıkça DOCTYPE bildirimi içeren XML belgelerini reddedin. Bu, girdi ayrıştırıcıya aktarılmadan önce uygulama katmanında uygulanabilir.
  4. XML kütüphanelerini güncel tutun: Kütüphane satıcıları, varsayılan olarak güvensiz varlık işleme davranışına düzenli olarak yama uygular. Savunmasız sürümleri izlemek için bir yazılım bileşen analizi (SCA) süreci yürütün.
  5. XInclude işlemeyi devre dışı bırakın: Ayrıştırıcınız XInclude'u destekliyorsa ve kullanmıyorsanız varlık kısıtlamalarının XInclude tabanlı atlatılmasını önlemek için bunu açıkça devre dışı bırakın.
  6. Ağ düzeyinde kontroller uygulayın: XXE istismar edilse bile uygulama sunucusundan beklenmedik giden bağlantıları engelleyen çıkış filtrelemesi, bant dışı sızdırma ve SSRF pivot yapmanın kullanışlılığını sınırlandırır.
  7. Uygulama sürecine en az ayrıcalık ilkesi uygulayın: XML ayrıştırıcıyı çalıştıran süreç yalnızca ihtiyaç duyduğu dosyalara okuma erişimine sahip olmalıdır. Patlama yarıçapını sınırlamak için işletim sistemi düzeyinde korumalı alan oluşturma (seccomp, AppArmor, salt okunur bağlantı noktalı konteynerler) kullanın.
  8. XML kullanan bileşenleri denetleyin: SAML kimlik doğrulama kütüphaneleri, ofis belgesi dönüştürücüler, RSS ayrıştırıcılar ve üçüncü taraf entegrasyonlar gibi dolaylı yollar dahil olmak üzere XML'in işlendiği tüm yerleri envanterleyin ve her birinin sertleştirildiğini doğrulayın.

Referanslar

Sıkça sorulan sorular

Bir uygulama, güvenilmez bir kaynaktan gelen XML'i, dış varlık çözümlemesi etkin (genellikle varsayılan) olan bir ayrıştırıcıyla işlediğinde XXE'ye karşı savunmasızdır. Güvenlik açığı ayrıca XML'in SAML kütüphaneleri, belge dönüştürme araçları veya SVG ya da DOCX gibi XML tabanlı formatları işleyen dosya yükleme işlemcileri gibi dolaylı yollarla ayrıştırıldığı durumlarda da ortaya çıkar.

Evet. Bant dışı (kör) XXE teknikleri, güvenlik açığı bulunan ayrıştırıcıyı sızdırılan verileri istek URI'si veya başlıklarında taşıyarak saldırgan tarafından kontrol edilen bir sunucuya giden HTTP veya DNS isteği başlatmak için kullanır. Bu, uygulama yanıt gövdesi ayrıştırılan XML içeriği hakkında hiçbir şey ortaya koymasa bile çalışır.

Evet, JSON uç noktasının kendisi için — JSON ayrıştırıcıların dış varlık kavramı yoktur. Ancak aynı uygulama başka bir yerde de XML işliyorsa (örn. SAML girişi, içe aktarılan belgeler, arka uç entegrasyonları), bu yollar yine de bağımsız olarak sertleştirilmelidir.

Hayır. Şema doğrulaması, varlık çözümlemesinden sonra gerçekleşir. Kötü amaçlı bir dış varlık, şema kısıtlamaları değerlendirilmeden önce ayrıştırıcı tarafından çözümlenir; bu nedenle belge şema doğrulamasını geçse de geçmese de saldırı başarılı olur.

Herhangi bir XML tabanlı dosya formatı XXE yükü taşıyabilir. Yaygın örnekler arasında SVG görseller, Microsoft Office Open XML dosyaları (DOCX, XLSX, PPTX), OpenDocument dosyaları (ODT, ODS), RSS/Atom beslemeleri ve SAML onayları yer alır. Geliştiriciler bunları ikili veya XML olmayan formatlar olarak düşündükleri için genellikle gözden kaçırır.

XXE, dış varlık bildiriminde file:// URI yerine HTTP veya HTTPS URI belirtilerek Sunucu Taraflı İstek Sahteciliği (SSRF) elde etmek için kullanılabilir. Ayrıştırıcı URL'yi sunucudan getirir; bu da saldırgana dahili servisleri, bulut meta veri uç noktalarını veya internet üzerinden erişilemeyen dahili ağdaki diğer kaynakları araştırma olanağı tanır.