اخبار داخلی آرمان داده پویان

مقالات

حملات XML external entity (XXE) injection (قسمت اول)

حملات XML external entity (XXE) injection

قسمت اول

از آنجایی که یکی از حوزه‌های فعالیت آرمان داده پویان امنیت وب می‌باشد در قسمت مقالات آموزشی در ارتباط با حملات امنیتی وب، آسیب‌پذیری‌ها، تست نفوذ، ابزارها و بهترین راهکارهای افزایش امنیت وب صحبت می‌نماییم. همچنین در مقالاتی مانند بررسی پروتکل HTTP از دیدگاه امنیتی، نگاهی به پروتکل‌های رایج انداخته و به بررسی تخصصی آن‌ها می‌پردازیم. آرمان داده پویان علاوه بر ارائه تست نفوذ وب، پویشگرهای آسیب‌پذیری وب، دیواره‌های آتش وب بنیان و با بهره گیری از یک تیم متخصص امنیت و برنامه‌نویسی امیدوار است تا با ارائه محتوی تخصصی در حوزه امنیت وب گامی را در راستای ارتقا امنیت وب و برنامه‌های کاربردی وب بنیان بردارد. در ادامه مطالبی که در ارتباط با امنیت وب در قسمت مقالات آموزشی منتشر کردیم، امروز به چهارمین آسیب‌پذیری در فهرست OWASP TOP 10 یعنی XXE می‌پردازیم .

XML external entity injection

XML external entity injection  یا به اختصار XXE یک آسیب‌پذیری امنیتی وب است که همانطور که گفتیم در فهرست OWASP TOP 10 در رتبه چهارم قرار دارد. در واقع این آسیب‌پذیری در پردازش داده‌های XML ورودی از سمت کاربر قرار دارد. (XML (Extensible Markup Language یک فرمت رایج داده است که در هر چیزی از سرویس‌های وب (XML-RPC, SOAP, REST)  تا داکیومنت‌ها  (XML, HTML, DOCX) و تصاویر (SVG, EXIF data) وجود دارد.  یک برنامه کاربردی ممکن است داده‌هایی که فرمت XML دارند را به طور مستقیم دریافت نماید و پردازش کند و یا از XML parser که به عنوان XML processor نیز شناخته می‌شود، برای پارس کردن داده‌های XML بهره ببرد.

مفهوم دیگری که وجود دارد XML external entity می‌باشد. یک داکیومنت XML می‌تواند حاوی entity باشد که به محتویات محلی یا از راه دور دسترسی داشته باشد که در این قسمت مد نظر ما محتویات از راه دور است. پس اگر یک برنامه کابردی نظارت و ارزیابی درستی بر روی ورودی‌هایش نداشته باشد یک مهاجم می‌تواند با بارگذاری یک payload از XML external entity در جهت پیش برد مقاصدش استفاده نماید. مثلا یک فایل را از سرور بازیابی نماید. با یک مثال این موضوع را نشان خواهیم داد. یک برنامه کاربردی فروشگاهی را درنظر بگیرید. این برنامه کاربردی با ارسال شناسه محصول به سرور در قالب یک داکیومنت html موجودی محصول را بررسی می‌کند. ساختار این داکیومنت html به صورت زیر می‌باشد:

این برنامه کاربردی به دلیل عدم بررسی و ارزیابی درست ورودی‌ها دارای آسیب پذیری XXE می‌باشد. مهاجم نیز از این آسیب‌پذیری استفاده کرده و با بارگذاری payload زیر به محتوی فایل etc/passwd/ دست می‌یابد. مهاجم در قسمت شناسه محصول یک external entity با نام :xxe&  را قرار داده است. مقدار این entity محتویات فایل etc/passwd/ می‌باشد.

این برنامه کاربردی در پاسخ مقدار Product ID را برمی‌گرداند و در نتیجه مهاجم در پاسخی که از سرور دریافت می‌کند، به محتویات فایل etc/passwd/ دست می‌یابد. در شکل زیر این موضوع را می‌بینید. البته در واقعیت کار به این آسانی نمی‌باشد.

در واقعیت تعداد زیادی داده در XML ارسالی وجود خواهد داشت و هر کدام از آن‌ها ممکن است در پاسخ برنامه استفاده شود یا نشود. در نتیجه یک مهاجم با بررسی مجزا بر روی هر داده بایستی داده‌هایی که در پاسخ نیز ارسال می‌گردند را به دست آورد تا بتواند حمله موفقیت آمیز XXE به راه انداخته و به مقاصدش دست یابد. تا به اینجا با توضیح در ارتباط با تک تک المان‌هایی که در ایجاد این آسیب‌پذیری نقش دارند و با آوردن یک مثال عملی XML external entity injection را تعریف کردیم. در بخش بعدی به اثرات این آسیب‌پذیری و کارهایی که یک مهاجم با بهره برداری از آن می‌تواند انجام دهد می‌پردازیم.

انواع حملات (external entity injection (XXE

  • راه اندازی حملات XXE برای دست یابی به فایل‌های حساس
  • راه اندازی حملات XXE برای راه اندازی حملات SSRF
  •  راه اندازی حملات XXE برای exfiltrate data out-of-band
  • راه اندازی حملات کورکورانه XXE برای بازیابی اطلاعات حساس از طریق پیغام‌های خطا

دست یابی به فایل‌های حساس

این نوع از حمله را در قسمت قبلی و در توضیح آسیب‌پذیری (external entity injection (XXE با مثال توضیح دادیم و نشان دادیم یک مهاجم با استفاده از آسیب‌پذیری XXE که در اثر عدم ارزیابی درست وروردی‌ها به وجود آمده بود، چطور توانست به فایل etc/passwd/ دست یابد. پس در صورت وجود این آسیب‌پذیری مهاجم می‌تواند با بازیابی فایل به اطلاعات حساسی دست یابد.

راه اندازی حملات SSRF با بهره برداری از آسیب‌پذیری XXE

در این روش مهاجم با بهره‌ برداری موفق از آسیب‌پذیری XXE موجود در وب اپلیکیشن می‌تواند درخواست‌های HTTP مورد نظرش را از طریق اپلیکیشن server-side ارسال نماید. برای این کار در external XML entity که در قسمت‌های قبلی در ارتباط با آن صحبت کردیم URL مورد نظر گنجانده شده و در نتیجه سرور متوجه می‌شود که مقدار این entity را باید برود از منبع خارجی، بارگذاری نماید. حال اگر مهاجم در پاسخی که از سمت سرور برایش ارسال می‌شود بتواند مقدار مورد نظرش را نیز دریافت نماید یعنی موفق به راه اندازی حمله SSRF شده است. در صورت موفقیت آمیز بودن این حمله مهاجم توانسته یک ارتباط دو طرفه با سیستم back-end برقرار نماید.

به مثال زیر توجه نمایید:

Blind XXE vulnerabilities

موضوع مهمی که مطرح می‌گردد این است که بسیاری از برنامه‌های کاربردی در پاسخ مقادیر external entities را برنمی‌گردانند. پس اجرای حملات XXE مستقیم امکان پذیر نمی‌باشد. در نتیجه ما با دسته‌ای از حملات XXE مواجه می‌شویم که آن را کورکورانه یا به اصطلاح blind می‌خوانیم. در این حملات مهاجمین با استفاده از روش‌های out-of-bound آسیب‌پذیری‌ها را یافته و موفق به exfiltrate کردن داده‌ها می‌گردند. همچنین گاهی می‌توانند از طریق ایجاد خطاهای پارس و از طریق پیغام‌های خطا به اطلاعات حساسی دست یابند.

ادامه دارد…

در قسمت بعدی روش‌های یافتن این آسیب‌پذیری و همچنین پیشگیری از آن را شرح خواهیم داد

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

برای مشاوره و کسب اطلاعات بیشتر با ما تماس بگیرید

تعداد بازدید: 170


تازه ترین ها