سعید عزتی
سعید عزتی
خواندن ۳ دقیقه·۹ ماه پیش

Vulnerability XXE

آسیب‌پذیری XXE چیست؟
تزریق XXE ( XML External Entity) نوعی از آسیب‌پذیری در امنیت وب است که یک مهاجم به واسطه‌ی آن می‌تواند در فرایند پردازش داده‌های XML توسط یک وب‌اپلیکیشن مداخله کند. این آسیب‌پذیری معمولا مهاجم را قادر می‌کند که فایل‌هایی را که روی فایل‌سیستم سرور اپلیکیشن قرار دارند مشاهده کند، و با هر سیستم بک‌اند یا خارجی که خود اپلیکیشن قادر به دسترسی آن باشد، تعامل کند.

آسیب‌پذیری XXE چگونه به وجود می‌آید؟

بعضی از اپلیکیشن‌ها، داده‌های بین مرورگر و سرور را در قالب فایل‌های XML انتقال می‌دهند. این نوع اپلیکیشن‌ها تقریبا همیشه از یک کتابخانه‌ی استاندارد یا API متناسب با پلتفرم خود برای پردازش داده‌های XML روی سرور استفاده می‌کنند. آسیب‌‌پذیری‌های XXE به این خاطر به وجود می‌آیند که XML در تعریف  خود ذاتاً امکاناتی دارد که بالقوه خطرناک هستند، و حتی اگر برخی از این امکانات مورد نیاز یک اپلیکیشن نباشد، باز هم پارسرهای* استاندارد XML از تمام این امکانات پشتیبانی می‌کنند.همان‌طور که پیش از این گفتیم، انتیتی‌های اکسترنال در XML، نوعی از Custom Entity هستند که مقدار تعریف‌شده برای آن‌ها، از جایی خارج از DTD که در آن تعریف شده‌اند بارگیری می‌شود. این انتیتی‌های خارجی از منظر امنیت اهمیت ویژه‌ای دارند، زیرا این امکان را به وجود می‌آورند که یک انتیتی براساس محتویات یک آدرس فایل یا URL تعریف شود.* XML Parser یا XML پروسسور برنامه یا ماژولی است که وظیفه‌ی تجزیه‌ی فایل‌های XML را دارد تا داده‌های آن‌ها قابل خواندن و استفاده باشد.

نواع حملات XXE کدامند؟

حملات XXE انواع مختلفی دارند. چند نوع از حملات XXE Injection عبارتند از:

  • اکسپلویت XXE برای دستیابی به فایل‌ها: در این نوع حمله یک External Entity با محتویات یک فایل خاص تعریف می‌شود، و این محتویات در پاسخ وب‌اپلیکیشن بازگردانده می‌شوند.
  • اکسپلویت XXE برای انجام حمله SSRF: در این نوع حمله یک External Entity با لینک حاوی آدرس یک سیستم بک‌اند تعریف می‌شود.
  • اکسپلویت blind XXE برای استخراج داده به صورت out-of-band: در این نوع حمله، داده‌های حساس از سرور اپلیکیشن به سیستمی انتقال داده می‌شوند که در کنترل مهاجم است.
  • اکسپلویت blind XXE برای دستیابی به داده‌ها و پیام‌های خطا: در این نوع حمله، مهاجم می‌تواند باعث ایجاد یک parsing error* شود که حاوی اطلاعات حساس است.

اکسپلویت XXE برای دستیابی به فایل‌ها

برای مثال، یک اپلیکیشن خرید را در نظر بگیرید که با ارسال فایل XML زیر به سرور، موجودی یک محصول خاص در انبار را بررسی می‌کند:



<?xml version=&quot1.0&quot encoding=&quotUTF-8&quot?>
<!DOCTYPE Saeed [<!ENTITY file SYSTEM &quotfile:///etc/passwd&quot>]>
<stockCheck> <productId> &file; </productId> <storeId>3 </storeId> </stockCheck>

این پی‌لود XXE یک انتیتی اکسترنال به نام fileایجاد می‌کند که مقدار آن، محتویات فایل /etc/passwd است، و سپس از این انتیتی، در مقدار productID استفاده می‌کند. این کار باعث می‌شود پاسخ اپلیکیشن، شامل محتویات فایل باشد:

نکته: در آسیب‌پذیری‌های واقعی XXE، معمولا در یک فایل XML ثبت‌شده، تعداد زیادی مقادیر داده وجود دارند، که هر کدام از آن‌ها ممکن است در پاسخ اپلیکیشن به کار روند. برای این که بتوانید به صورت سیستماتیک و با یک رویه‌ی قابل اعتماد وجود آسیب‌پذیری‌های XXE را بررسی کنید، معمولا نیاز است تک‌تک Data Nodeها، یعنی همه‌ی جاهایی را که در فایل XML داده‌‌ای آمده است، به طور جداگانه بررسی کنید. برای بررسی هم باید یک انتیتی تعریف کنید و آن را جای داده‌ی مورد نظر قرار دهید و ببینید مقدار آن در پاسخ اپلیکیشن بازگردانده می‌شود یا خیر.

امنیت وبwebpentest
شاید از این پست‌ها خوشتان بیاید