آسیبپذیری XXE چیست؟
تزریق XXE ( XML External Entity) نوعی از آسیبپذیری در امنیت وب است که یک مهاجم به واسطهی آن میتواند در فرایند پردازش دادههای XML توسط یک وباپلیکیشن مداخله کند. این آسیبپذیری معمولا مهاجم را قادر میکند که فایلهایی را که روی فایلسیستم سرور اپلیکیشن قرار دارند مشاهده کند، و با هر سیستم بکاند یا خارجی که خود اپلیکیشن قادر به دسترسی آن باشد، تعامل کند.
بعضی از اپلیکیشنها، دادههای بین مرورگر و سرور را در قالب فایلهای XML انتقال میدهند. این نوع اپلیکیشنها تقریبا همیشه از یک کتابخانهی استاندارد یا API متناسب با پلتفرم خود برای پردازش دادههای XML روی سرور استفاده میکنند. آسیبپذیریهای XXE به این خاطر به وجود میآیند که XML در تعریف خود ذاتاً امکاناتی دارد که بالقوه خطرناک هستند، و حتی اگر برخی از این امکانات مورد نیاز یک اپلیکیشن نباشد، باز هم پارسرهای* استاندارد XML از تمام این امکانات پشتیبانی میکنند.همانطور که پیش از این گفتیم، انتیتیهای اکسترنال در XML، نوعی از Custom Entity هستند که مقدار تعریفشده برای آنها، از جایی خارج از DTD که در آن تعریف شدهاند بارگیری میشود. این انتیتیهای خارجی از منظر امنیت اهمیت ویژهای دارند، زیرا این امکان را به وجود میآورند که یک انتیتی براساس محتویات یک آدرس فایل یا URL تعریف شود.* XML Parser یا XML پروسسور برنامه یا ماژولی است که وظیفهی تجزیهی فایلهای XML را دارد تا دادههای آنها قابل خواندن و استفاده باشد.
حملات XXE انواع مختلفی دارند. چند نوع از حملات XXE Injection عبارتند از:
برای مثال، یک اپلیکیشن خرید را در نظر بگیرید که با ارسال فایل XML زیر به سرور، موجودی یک محصول خاص در انبار را بررسی میکند:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Saeed [<!ENTITY file SYSTEM "file:///etc/passwd">]>
<stockCheck> <productId> &file; </productId> <storeId>3 </storeId> </stockCheck>
این پیلود XXE یک انتیتی اکسترنال به نام fileایجاد میکند که مقدار آن، محتویات فایل /etc/passwd است، و سپس از این انتیتی، در مقدار productID استفاده میکند. این کار باعث میشود پاسخ اپلیکیشن، شامل محتویات فایل باشد:
نکته: در آسیبپذیریهای واقعی XXE، معمولا در یک فایل XML ثبتشده، تعداد زیادی مقادیر داده وجود دارند، که هر کدام از آنها ممکن است در پاسخ اپلیکیشن به کار روند. برای این که بتوانید به صورت سیستماتیک و با یک رویهی قابل اعتماد وجود آسیبپذیریهای XXE را بررسی کنید، معمولا نیاز است تکتک Data Nodeها، یعنی همهی جاهایی را که در فایل XML دادهای آمده است، به طور جداگانه بررسی کنید. برای بررسی هم باید یک انتیتی تعریف کنید و آن را جای دادهی مورد نظر قرار دهید و ببینید مقدار آن در پاسخ اپلیکیشن بازگردانده میشود یا خیر.