XXE، درگاهی برای ورود نفوذگران
XML یک زبان معروف برنامه نویسی وب است و یکی از دلایل این محبوبیت مستقل بودن آن از نرم افزار و سخت افزاری است که بر روی آن اجرا می شود.
به گزارش شرکت مهندسی شبکه گستر به نقل از شرکت McAfee، عدم برنامه نویسی صحیح در XML می تواند سبب بروز ضعفی امنیتی با عنوان تزریق XML External Entity یا به اختصار XXE شود.
آسیب پذیری XXE زمانی ایجاد می شود که برنامه، ورودی XML را دریافت کرده و آن را بدون بررسی به کاربر منعکس کند. در حقیقت نگرانی اصلی، از اجرا شدن کدهای مخرب توسط XML Parser است. مهاجم از طریق این آسیب پذیری می تواند دستگاه کاربر را آلوده کرده و در ادامه خرابکاری هایی همچون سرقت داده های بااهمیت، حملات از کاراندازی سرویس و مواردی از این دست را اجرا کند.
در زبان XML،وEntity میانبری برای تعریف یک مقدار است. ضمن اینکه می توان محتوای یک فایل داخلی یا خارجی را نیز در آن ذخیره کرد.
این آسیب پذیری بصورت بالقوه در حالات زیر قابل بهره جویی است:
- برنامه مقداری را از کاربر به عنوان ورودی پذیرفته و آن را در فایلی XML دخیره و سپس اجرا می کند.
- برنامه امکان آپلود فایل XML را فراهم می کند و محتوای آن به کاربری دیگر نمایش داده می شود.
بعنوان مثالی برای حالت نخست، در شکل زیر testuser بصورت ایستا تعریف شده است.
اما در شکل زیر testuser به یک Entity با عنوان XXE تخصیص داده شده است.
حالا اگر مقدار از کاربر دریافت شود و XML Parser هر دو را به یک صورت اجرا کند، نتیجه این می شود که برنامه به XXE آسیب پذیر است. برای نمونه یک مهاجم می تواند با سوءاستفاده از کد بالا به یک فایل سیستمی دست پیدا کند.
مثال های بیشتر برای حالت نخست از اینجا قابل دریافت است.
در حالت دوم نیز مهاجم این امکان را خواهد داشت که فایلی را با کدهایی که با بهره گیری از آسیب پذیری XXE درون فایل، خرابکاری مورد نظر او را انجام می دهد در برنامه آپلود کند. برای جزییات بیشتر مطالعه این مقاله توصیه می شود.
پیشگیری
- ابزار پراکسی Burp می تواند این بررسی ها را انجام داده و آسیب پذیری های XXE را گزارش کند.
- ورودی کاربر همیشه می بایست توسط برنامه بررسی شده و تنها در صورت صحیح بودن پذیرفته شود.
- آپلود هر فایلی که در آن در بخش Document Typ،وEntity معرفی شده است محدود شود.
همچنین مطالعه این راهکارها و لحاظ کردن آنها در برنامه توصیه می شود.